毕业设计(论文)-电子时钟的设计与实现(24页).doc
-毕业设计(论文)-电子时钟的设计与实现-第 21 页目 录摘要1关键词1Abstract1Key words1引言21 电子时钟设计概述21.1 电子时钟的原理21.2 电子时钟的设计思路22 元器件介绍32.1 主控芯片89C5132.2 LED 数码管52.2.1 LED数码管的结构原理52.2.2 LED显示器接口及显示方式63 硬件电路设计73.1 硬件电路图73.2 复位电路83.3 晶体振荡电路103.4 按键电路104 软件设计114.1 程序设计步骤114.2 电子时钟的程序设计114.2.1 主程序124.2.2 按键和中断服务子程序124.2.3 显示和处理子程序 155 系统仿真175.1 PROTUES软件介绍175.2 电子钟系统PROTUES仿真186 总结20参考文献21附录A 程序清单22致谢27电子时钟的设计与实现摘要:本设计主要实现了一个基于89C51单片机并通过数码管显示相应的时间的电子时钟。通过控制键来实现时间的调节,并将电子时钟小时、分钟、秒采用24小时计时方式用八位LED数码管显示,并应用Proteus的ISIS软件实现了单片机电子时钟系统的仿真,该方法仿真效果真实、准确,节省了硬件资源。本设计采用单片机原理实现的电子时钟,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有硬件成本低、计时准确、更长的使用寿命等特点。关键词:单片机;电子时钟;LED数码管The Design And Implementation of Electronic ClockAbstract:This design mainly realizes an electronic clock which is based on 89c51. And through digital tube, it displays the corresponding time of electronic clock. Adjust the time through the control button, and the electronic clocks hours, minutes, seconds displays by 24 hour chronograph and eight LED digital tube. And the application of Proteus ISIS software simulation of single chip electronic clock system, the method of simulation results is true, accurate and saving the hardware resources. This design uses the electronic clock monolithic integrated circuit principle. Compared with the mechanical clock, it has a higher accuracy and intuitive, and no mechanical device, it has low hardware cost, timing accuracy, longer service life etc.Key words: Single Chip Microcomputer;Electronic Clock;LED Digital Tube 引言 1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。20世纪末,电子技术获得飞速的发展,在其推动下,现代电子产品几乎渗透到社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时现代电子产品性能也得到进一步提高,产品更新换代的速度也越来越快。 时间对人们来说越来越宝贵,工作的繁杂性和忙碌性容易使人忘记当前的时间。忘记很多要做的事情,如果事情不是很重要的时候,这种遗忘可能无伤大雅。但是,一旦重要的事情,一时的耽将能酿成大祸,因此电子时钟得到了广泛的应用。1 电子时钟设计概述1.1 电子时钟的原理 目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。还在于单片机应用的重要意义,传统的控制系统设计方法和设计思想被单片机改变了。从前必须由数字电路或模拟电路实现的大部分功能,现在已能可以通过软件用单片机来实现了。这种软件代替硬件的控制技术称为微控制技术,对传统控制技术来说是一次革命。单片机模块中最常见的是数字电子时钟,数字电子时钟是一种用数字电路技术实现时、分、秒计时的装置,数字电子时钟钟用集成电路计时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。电子时钟是一个将“ 时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒。因此,一个基本的电子时钟电路主要由显示器和单片机,还有校时电路组成。该电子时钟由89C51,八段数码管等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时、分、秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。而电路中的四个控制键却拥有多种不同的功能,K1实现小时加1,K2实现小时减1,K3实现分钟加1,K4实现分钟减1,通过调节时、分从而使显示时间更加准确。 1.2 电子时钟的设计思路此次设计主要是应用单片机来设计电子时钟,硬件部分主要分为以下电路模块:复位电路,按键电路,晶振电路,驱动电路和显示电路五部分。其中显示电路用8个共阳极数码管分别显示小时、分钟和秒,通过三极管导通和截止的方式进行显示,从而避免了译码器的使用,使编程更加简单。单片计算机即单片微型计算机,由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这种单片机应用简单,适合电子时钟设计。电路的总体设计框架如图1-1所示,硬件电路分为复位电路,按键电路,晶振电路,显示驱动和时间显示五部分。图1-1 硬件电路设计框图2 元器件介绍本次电子时钟的设计主要应用89C51内部的定时器和计数器来实现计时控制并通过七段数码管进行显示。以下是对两种元器件的简介:2.1 主控芯片89C5189C51是一种带4K字节闪烁可编程可擦除只读存(FPEROMFalshProgrammable and Erasable Read Only Memory)的高性能、低电压8位微处理器,又叫单片机。单片机的可擦除只读存储器是可以反复擦除100次的。单片机采用ATMEL非易失高密度存储器制造技术制造的,指令集和输出管脚与工业标准的MCS-51相集兼容。由于要将多功能8位CPU和闪烁存储器组合在单个芯片中,89C51是ATMEL的一种高效微控制器。主要特性: ·与MCS-51 兼容 ·4K字节可编程闪烁存储器 ·寿命:1000写/擦循环 ·数据保留时间:10年 ·全静态工作:0Hz-24MHz ·三级程序存储器锁定 ·128×8位内部RAM ·32可编程I/O线 ·两个16位定时器/计数器 ·5个中断源 ·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路如图2-1所示为89C51引脚图。图2-1 89C51引脚图下面为引脚说明:VCC:供电电压。GND:接地。P0口:P0口是一个漏级开路为8位的双向I/O口,每个引脚可吸收8TTL门电流。当把P1口的管脚置1时,被定义为高阻输入。P0口可以被定义为地址/数据的第八位,能够用于外部程序数据存储器。P1口:P1口是一个8位内部提供上拉电阻的双向I/O口,4TTL门电流可以通过P1口缓冲器接收输出。P1口管脚被置1后,被内部电阻上拉为高,可用作输入,当外部电阻下拉让P1为低电平时,输出电流。 P2口:P2口是一个8位内部提供上拉电阻的双向I/O口,4TTL门电流可以通过P2口缓冲器接收输出,P2口被置1时,被内部电阻上拉为高,可作为输入。并因此为输入时,外部电阻将P2口的管脚拉低时,将输出电流。P2口被用于16位地址外部数据存储器或者外部程序存储器时,高八位由P2口输出地址输出。在给出地址“1”时,它利用内部电阻的上拉优势,当对外部的八位地址数据存储器进行读写时,P2口将输出特殊功能寄存器的内容。P3口:P3口管脚是双向I/O口带8个内部上拉电阻,被用于接收输出4个TTL门电流。当P3口被写入“1”后,被作为输出,它们内部被上拉电阻置为高电平。当被外部电阻下拉为低电平时,用作输出,因为上拉的缘故,P3口将输出电流。P3口也可作为89C51的一些特殊功能口,如下所示:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,其地址锁存允许的输出电平将用于锁存地址的低位字节。在FLASH编程期间,此引脚将用于输入编程脉冲。在平时,ALE端将以不变的频率周期,输出正脉冲信号,此频率是振荡器频率的1/6。因此,它将用作用于定时目的或对外部输出的脉冲。尤其要注意的是:每次用作外部数据存储器时,要跳过一个ALE脉冲。另外,该引脚要被略微拉高。如果微处理器将在外部执行状态ALE禁止时,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期将两次/PSEN有效。但是在访问外部数据存储器时,这两次有效/PSEN信号不出现。/EA/VPP:当/EA保持低电平时,该期间外部程序存储器,不管有没有内部程序存储器。注意加密方式为1时,/EA将被内部锁定为RESET。XTAL1:内部时钟工作电路的输入及反向振荡放大器的输入。XTAL2:反向振荡器的输出。2.2 LED 数码管2.2.1 LED数码管的结构原理 数码管是一种把多个LED显示段集成在一起的显示设备。有两种类型,一种是共阳型,一种是共阴型。共阳型就是把多个LED显示段的阳极接在一起,又称为公共端。共阴型就是把多个LED显示段的阴极接在一起,即为公共端。阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。8个发光二极管组成一位显示器,其中字型“8”的各个笔划ag由7个发光二极管构成,第8个发光二极管为一个小数点。当一定的正向电压被施加在某段发光二极管上时,该段笔划即亮;不加电压则暗。外加限流电阻是为了保护各段LED不被损坏。如图2-2为数码管的结构图,从左向右依次为引脚配置外形结构图、共阴极结构图和共阳极结构图。图2-2 数码管结构图共阴极与共阳极7段LED显示数字0F、“”符号及“灭”的编码(a段为最低位,dp点为最高位)如表2-1所列。表2-1 数码管段选表显示字符012345678共阴极段选码3F(BF)06(36)5B(DB)4F(CF)66(F6)6D(FD)7D(FD)07(87)7F(FF)共阳极段选码C0(40)F9(79)A4(24)B0(30)99(19)92(12)82(02)F8(78)80(00)显示字符9ABCDEF熄灭共阴极段选码6F(EF)77(F7)7C(FC)39(B9)5E(DE)79(F9)71(F1)40(C0)00(80)共阳极段选码90(10)88(08)83(03)C6(46)A1(21)86(06)8E(0E)BF(3F)FF(7F)本设计采用共阳极数码管作为电子时钟的显示器。2.2.2 LED显示器接口及显示方式 LED显示器有静态显示和动态显示两种方式。静态显示就是某个字符由显示器显示时,相应的段恒定地导通或截至,直到显示另一个字符为止。LED显示器处于静态显示方式时,各位的共阴极接地;若接+5V电源,则为共阳极。每位的段选线(adp)分别与一个8位锁存器的输出口相连,显示器中的各位相互独立,而且一经确定各位的显示字符,将维持相应锁存的输出不变。正因为如此,静态显示器的亮度较高。这种显示方式编程容易,管理也较简单,但占用I/O口线资源较多。动态显示是在多位LED显示时,为了简化电路,降低成本,将所有位的段选线并连在一起,有一个8位I/O口控制。而共阴(或共阳)极公共端K由相应的I/O线控制,实现各位的分时选通。由于LED所有段选线皆由一个8位I/O口控制,因此,在每一瞬时LED会先是相同的字符。要想每位显示的字符不同,各位LED就必须采用扫描方法轮流点亮,即某一位显示字符只在每一瞬间使用。在此瞬间,段选码由段选控制I/O输出相应字符,则选通电平由位选择控制I/O口送入,以保证相应字符在该位显示。如此轮流,是每位分时显示该位应显示相应的字符。段选码、位选码每送入一次后延时1ms,因人眼的视觉暂留时间为0.1s(100ms),所以每位显示的间隔不必超过20ms,并保持延时一段时间,以造成视觉暂留效果,给人看上去每个数码管总在亮。这种方式称为软件扫描显示。本设计采用了数码管动态显示的方式进行设计的。 3 硬件电路设计3.1 硬件电路图图3-1 电子时钟硬件电路图根据硬件结构框图画出电子时钟的硬件电路图,硬件电路设计图如图3-1所示1。按键的作用:其中K1用于小时加1,K2用于将小时减1,K3用于将分钟加1,K4用于将分钟减1;数码管用于实时显示当前时间信息。关于电路的说明如下:按键:4个独立按键占用单片机的P1.4、P1.5、P1.6、P1.7引脚,并且每个引脚上都分别外加了上拉电阻,保证在按键释放后引脚上为可靠的高电平以便区分按键的按下和释放状态。显示电路采用8位一体的数码管1个,采用动态显示方式,P0口送显示段码决定数码管上显示什么数据,P2口送位选码指定数码管显示。P0口上接的470电阻为限流电阻,用于调节数码管的亮度;10K电阻为P0口的上拉电阻。其中数码管选择的是共阳极8位一体的LED数码管,每个上面有8个(这8个数码管的各个同名段在内部是连接好的,只是8个COM公共端是分开的,如图3-1所示),7因此能显示8位数据,三极管采用PNP型PN5138,所以当输出是低电平时三极管导通,对应的数码管点亮,当输出是高电平时三极管截至,对应的数码管熄灭。显示电路将“时”、“分”、“秒”通过七段显示器显示出来。3.2 复位电路复位电路的作用是控制CPU在上电或复位过程中的复位状态: CPU在这段时间保持复位状态,而不是刚复位或一上电完毕就工作,防止CPU指令发出错误、操作执行错误,也可以提高电磁兼容性能。 单片机在启动时都将需要复位,为了使CPU和系统各部件从初始的状态开始工作。单片机的复位信号是从RST口输入到芯片内的施密特触发器中的。如果振荡器稳定后,并且系统处于正常工作状态时, RST引脚上将有一个维持两个周期的高电平 (24个振荡周期)以上,则CPU可以将系统复位并响应。单片机系统有两种复位方式:手动按钮复位方式和上电自动复位方式。本设计采用上电自动复位方式2。 VccC89c51Vcc22uFRes1kRVss图3-2 上电自动复位方式如图3-2为89C51的上电自动复位方式,只要在RST引脚上接一电容至Vcc端,下接一个上拉电阻到地就可以。对于CMOS型单片机,因为在RST端内部有一个下拉电阻,因此可将外部电阻去掉,如果将外接电容减至1µF。上电自动复位的工作过程是在加电过程时,复位电路将通过电容加给RST引脚一个短暂的高电平,此高电平信号将随着Vcc对电容的充电过程而逐渐回落,因此RST端的电容的充电时间将决定高电平持续时间。为了整个系统可以保证可靠地复位,RST端的将必须维持足够长时间的高电平。上电时,Vcc的上升时间约为10ms,而振荡器的振荡频率将决定振荡时间,如晶振频率为10MHz,起振时间则为1ms;晶振频率为1MHz,起振时间则为10ms。在图3-2所示的复位电路中,当Vcc掉电时,RST端电压将快速下降到0V以下,但是,因为内部电阻电路的限制作用,此负电压将不会对器件产生任何损害。其次,端口引脚将在复位期间处于随机状态,复位后,系统将引脚端口置为全“l”态。如果系统得不到有效的复位,则程序计数器PC将会没有一个合适的初值,因此,CPU可能会开始执行程序从一个未被定义的位置2。VccREST89C51VccR1C200RSTR21KVss图3-3手动按钮复位方式如图3-3手动按钮复位方式所示,手动按钮复位方式要在复位输入端RST上加入高电平,需要人为完成。一般将采用在RST端和正电源Vcc之间接一个按钮的办法。当把人为按钮按下时,则Vcc的+5V电平信号将会直接加到RST端口。由于人的动作再快也会保持接达数十毫秒,因此,完全能够满足复位的要求4。复位电路的作用非常重要,虽然起结构简单。单片机系统能不能正常运行,首先要检查能否复位成功。初步检查可用示波器探头监视RES引脚,按下复位键,观察有没有足够幅度的波形输出(瞬时的),改变复位电路阻容值也可以进行实验。3.3 晶体振荡电路单片机的晶体振荡电路分为内部振荡和外部振荡两种方式。如图3-4为晶体振荡电路内部方式和外部方式,本设计采用晶振电路的内部方式。XTAL2悬空XTAL2XTAL1XTAL1外部振荡信号GNDGND外部方式内部方式图3-4晶体振荡电路内部方式和外部方式片内振荡器的反相放大器输入端是XTAL1,则输出端是XTAL2。选用外部振荡器时,应直接在XTAL1加上外部振荡信号,而XTAL2悬空。用内部方式时,时钟发生器对振荡脉冲二分频,如晶振频率为12MHz,则时钟频率为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30PF左右。时钟电路设计是采用的是系统的内部方式,即利用芯片内部的振荡电路。AT89系列单片机内部有一个构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。此放大器和作为反馈元件的片外晶体谐振器一块构成自激振荡器。外接晶体谐振器和电容C1和C2构成并联的振荡电路,将接在放大器的反馈回路中。外接电容的值没有严格的要求,但是电容的大小会影响震荡器的稳定性、震荡器频率的高低、温度的稳定性和起振的快速性。因此,这个系统电路的晶体振荡器的值为12MHz,电容将尽可能的选择陶瓷电容,电容值约为22F。在焊接刷电路板时,晶体振荡器和电容应尽可能与单片机靠在一起安装,用于减少寄生电容,以及更好地保证震荡器可靠和稳定地工作9。3.4 按键电路考虑到调整时间的方便性以及时间误差的存在,采用独立式键盘。为提高CPU的工作效率,采用中断工作方式。独立式按键是指一条输入数据线被各按键相互独立地接通,如图3-5所示。这是最简单的键盘结构,该电路为查询方式电路。键盘的工作过程可分为两步:第一步是CPU首先检测键盘上是否有按键被按下,第二步是识别哪一个键按下。检查键盘上有无键按下可采用查询工作方式:键盘上有无键按下是有列线送出全扫描字,然后读入行线状态来识别的。其方法是P1口输出00H,将所有列线置为低电平,并将行线电平状态读入累加器A中,如果有键按下,将会有一根行线被拉为低电平,因而使行输入状态不全为“1”。键盘中哪一个键按下是有列线逐列被拉为低电平,检查行输入状态,称为逐列扫描。方法是:从PC口输入入行线状态,如果全为“1”,则所按下之键不在此列中,如果不全为“1”,则在此列,并且是与“0”电平行线相交的交点上的那个键。如图3-5为独立按键电路图10。+5VP1.0P1.11P1.2P1.489C51图3-5独立按键电路图4 软件设计4.1 程序设计步骤 (1)计算计数初值。电子时钟的最小单位是秒,但使用单片机定时器/计数器进行定时,即使按方式1工作,其最长定时时间也只能达131ms。鉴于此,可以把定时器的定时时间定位100ms,这样,计数溢出10次即得到时钟的最小单位秒;而10次计数可用软件方法实现。假定使用定时器T1,以工作模式1进行100ms的定时。如果单片机时钟频率为6MHz,为得到100ms定时,设计初值为X,则X=155536D=001110010110000B=3CB0H(2)采用中断方式进行溢出次数的累计,计满10次即可得到秒计时。从秒到分和从分到时的计时是通过累加和数值比较实现的。3设计主程序、按键子程序、处理子程序、中断子程序、延时子程序和显示子程序(4)电子时钟的显示及显示缓冲从端口输出3。4.2 电子时钟的程序设计电子时钟分为主程序MAIN、按键子程序KEY、处理子程序PROCESS、显示子程序DISPLAY、中断服务子程序、延时子程序。下面分别介绍几个子程序的程序设计过程:4.2.1 主程序 在程序执行过程中,首先执行初始化程序,将一切工作准备就绪之后,进去到一个循环执行的主程序,如图4-1所示为主程序流程图图4-1主程序流程图根据主程序流程图编写相应的主程序:MAIN: CALL KEY ;调按键子程序KEY CALL PROCESS ;调数据处理子程序PROCESS CALL DISPLAY ;调显示子程序DISPLAY SJMP MAIN ;跳转到MAIN标号处4.2.2 按键和中断服务子程序 下面分别介绍了按键子程序和中断服务子程序的设计过程:(1)按键子程序:定时调用一个按键子程序,完成对按键是否按下的判断工作,如果有按键按下,则根据按下的按键做相应的处理,如果没有按键按下就继续执行其它程序,如显示子程序。按键程序由KEY子程序完成。按键子程序接P1.4P1.7口,P1.4接K1表示小时加1,P1.5接K2表示小时减1,P1.6接K3表示分钟加1,P1.7接K4表示分钟减1。如图4-2所示为按键子程序的流程图图4-2按键子程序流程图根据流程图编写按键子程序如下所示:KEY:JNB P1.4,HOUURJIA ;P1.4引脚是低电平就跳转到HOURJIA处 JNB P1.5,HOUURJIAN ;P1.5引脚是低电平就跳转到HOURJIAN处 JNB P1.6,MINUTEJIA ;P1.6引脚是低电平就跳转到MINUTEJIA处 JNB P1.7, MINUTEJIAN ;P1.7引脚是低电平就跳转到MINUTEJIN处FANHUI: RET ;子程序返回HOURJIA: CALL DELAY ;调用延时程序目的是跳过按键抖动期JB P1.4,FANGHUI ;如果P1.4是高电平就跳到FANHUI处JNB P1.4,$ ;如果P1.4是低电平就停在当前位置等键释放INC HOUR ;把小时位加1RETHOURJIAN: CALL DELAY ;调用延时程序目的是跳过按键抖动期JB P1.5,FANGHUI ;如果P1.5是高电平就跳到FANHUI处JNB P1.5,$ ;如果P1.5是低电平就停在当前位置等键释放DEC HOUR ;把小时位减1RETMINUTEJIA: CALL DELAY ;调用延时程序目的是跳过按键抖动期JB P1.6,FANGHUI ;如果P1.6是高电平就跳到FANHUI处JNB P1.6,$ ;如果P1.6是低电平就停在当前位置等键释放INC MINUTE ;把分钟位加1RETMINUTEJIAN: CALL DELAY ;调用延时程序目的是跳过按键抖动期JB P1.7,FANGHUI ;如果P1.7是高电平就跳到FANHUI处 JNB P1.7,$ ;如果P1.7是低电平就停在当前位置等键释放DEC MINUTE ;把分钟位减1RET(2)中断服务子程序:如图4-3所示为中断服务子程序流程图,要求每隔1s秒位加1,且在到60s时要把秒位清零,同时分钟位加1,如果分钟位到了60min时要将时位加1,同时将分位清零,而且在时位到了24h要将时位清零。图4-3中断服务子程序流程图根据中断服务子程序流程图编写程序如下:TIMER0: PUSH ACC ;把A中的数据压入栈保护起来 INC 30H ;把30H单元的数加1 MOV A,30H ;30H单元中的数据复制给A CJNE A,#10,JIXU ;A中的数据与10比较不相等就跳转到JIXU处MOV 30H,#0 ;(如果30H单元计满10)给30H赋值0 INC SECOND ;把SECOND单元的秒数加1 MOV A,SECOND ;SECOND单元中的数据复制给A CJNE A,#60,JIXU ;A中的数据与60比较不相等就跳转到JIXU处MOV SECOND,#0 ;给秒SECOND赋值0 INC MINUTE ;把MINUTE单元的分数加1 MOV A,MINUTE ;MINUTE单元中的数据复制给A CJNE A,#60,JIXU ;A中的数据与60比较不相等就跳转到JIXU处MOV MINUTE,#0 ;给分MINUTE赋值0 INC HOUR ;把HOUR单元的秒数加1 MOV A,HOUR ;HOUR单元中的数据复制给A CJNE A,#24,JIXU ;A中的数据与24比较不相等就跳转到JIXU处MOV HOUR,#0 ;给小时HOUR赋值0JIXU: POP ACC ;把刚才压入栈中的数据还给A MOV TH0,#3CH ;给计数容器的高8位TH0赋初始值3CH MOV TL0,#B0H ;给计数容器的低8位TL0赋初始值B0H RETI ;中断子程序返回主程序4.2.3 显示和处理子程序 下面分别介绍了显示子程序和处理子程序的设计过程:(1)显示子程序:由于在本设计中采用的是动态显示方式,因此单片机在能够完成前面的任务的情况下,还要去执行一个显示程序,保证数码管不熄灭,看上去一直在显示当前的时间信息,这部分由显示子程序DISPLAY完成8。显示子程序如下所示:DISPLAY: MOV A,HOURSHIWEI ;小时的十位复制给A MOVC A,A+DPTR ;到A+DPTR对应的地方找显示段码复制给A MOV P0,A ;把显示段码送到P0 CLR P2.7 ;把P2.7置低电平,对应的三极管导通 CALL DELAY ;调延时程序 SETB P2.7 ;将P2.7置高电平,对应三极管截止对应数码管灭MOV A,HOURGEWEI ;小时的个位复制给A MOVC A,A+DPTR ;到A+DPTR对应的地方找显示段码复制给A MOV P0,A ;把显示段码送到P0 CLR P2.6 ;把P2.6置低电平,对应的三极管导通 CALL DELAY ;调延时程序 SETB P2.6 ;将P2.6置高电平,对应三极管截止数码管灭 MOV P0,#0BFH ;给P0口送一个数据“BFH”,显示一个横杠“” CLR P2.5 ;把P2.5置低电平,对应的三极管导通 CALL DELAY ;调延时程序 SETB P2.5 ;将P2.2置高电平,对应三极管截止数码管灭MOV A,MINUTESHIWEI ;分钟的十位复制给A MOVC A,A+DPTR ;到A+DPTR对应的地方找显示段码复制给A MOV P0,A ;把显示段码送到P0 CLR P2.4 ;把P2.4置低电平,对应的三极管导通 CALL DELAY ;调延时程序 SETB P2.4 ;将P2.4置高电平,对应三极管截止数码管灭MOV A,MINUTEGEWEI ;分钟的个位复制给A MOVC A,A+DPTR ;到A+DPTR对应的地方找显示段码复制给A MOV P0,A ;把显示段码送到P0 CLR P2.3 ;把P2.3置低电平,对应的三极管导通 CALL DELAY ;调延时程序 SETB P2.3 ;将P2.3置高电平,对应三极管截止数码管灭MOV P0,#0BFH ;给P0口送一个数据“BFH”,显示一个横杠“” CLR P2.2 ;把P2.2置低电平,对应的三极管导通 CALL DELAY ;调延时程序 SETB P2.2 ;将P2.2置高电平,对应三极管截止数码管灭MOV A,SECONDSHIWEI ;秒的十位复制给A MOVC A,A+DPTR ;到A+DPTR对应的地方找显示段码复制给A MOV P0,A ;把显示段码送到P0 CLR P2.1 ;把P2.1置低电平,对应的三极管导通 CALL DELAY ;调延时程序 SETB P2.1 ;将P2.1置高电平,对应三极管截止数码管灭MOV A,SECONDGEWEI ;秒的个位复制给A MOVC A,A+DPTR ;到A+DPTR对应的地方找显示段码复制给A MOV P0,A ;把显示段码送到P0 CLR P2.0 ;把P2.0置低电平,对应的三极管导通 CALL DELAY ;调延时程序 SETB P2.0 ;将P2.0置高电平,对应三极管截止数码管灭 RET(2)处理子程序:要对最新的当前时钟数据进行处理,就需要处理子程序。如当前时间为“12 30 06”,要实现这个数据在数码管上显示,需要将时、分和秒3个数据分拆成十位和个位2个数,如秒位的“06”需要拆成“0”和“6”2个数,这部分由PROCESS子程序完成,实现的原理是分别用时、分秒这3个数据除以10,将得到的十位和个位分别存在2个独立的存储器里,这样就实现了将一个数据分开的目的。处理子程序PROCESS程序设计如下:PROCESS: MOV A,SECOND ;把SECOND中的秒值复制给A MOV B,#10 ;给寄存器B复制10 DIV AB ;A除以B,结果存入A中,余数存入B中 MOV SECONDSHIWEI,A ;结果即秒的十位复制给SECONDSHIWEI MOV SECONDGEWEI,B ;结果即秒的个位复制给SECONDSHIWEIMOV A,MINUTE ;把MINUTE中的分值复制给A MOV B,#10 ;给寄存器B复制10 DIV AB ;A除以B,结果存入A