《课程设计论文基于89C51单片机的电子时钟.doc》由会员分享,可在线阅读,更多相关《课程设计论文基于89C51单片机的电子时钟.doc(27页珍藏版)》请在三一办公上搜索。
1、摘要单片计算机即单片微型计算机。由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。 本设计主要设计了一个基于89C51单片机的电子时钟。并在数码管上显示相应的时间。并通过一个控制键用来实现时间的调节和是否进入省电模式的转换。应用Proteus的ISIS软件实现了单片机电子时钟系统的设计与仿真。该方法仿真效果真实、准确,节省了硬件资源。关键字:单片机;子时钟;键盘控制。目录摘要.1一 需求分
2、析.41引言41.1 编写目的41.2项目背景41.3参考资料42系统任务概述42.1目标42.2用户的特点52.3假定和约束53需求规定53.1软件功能的规定53.2对性能的规定53.2.1精度53.2.2 时间特性要求53.2.3可靠性53.2.4 灵活性64运行环境规定6 4.1设备.6 4.2系统及软件.6二、系统设计介绍.62.1 设计目的.62.2功能要求说明.62.3 模块设计.7三、电子时钟.7 3.1 电子时钟简介.7 3.2 电子时钟的本特点.7 3.3 子时钟的基本原理.8四、单片机的相关知识.84.1单片机的简介.8 4.2单片机的发展史.84.2.1 4位单片机 .8
3、4.2.2 8位单片机.84.2.3 16位单片机.94.2.4 32位单片机.94.2.5 64位单片机.9 4.3单片机的特点.9 4.4 89C51单片机介绍.10五、各部分电路分析.12 5.1 显示模块.125.2 运算模块.125.3 校时模块.135.4整体功能.13六、程序调试.13七、硬件电路图.14八、仿真效果图.15九、程序调试图.16十、程序流程图.16十一、程序清单.18十二、参考文献.26一、需求分析1、引言随着生活节奏的加快和网络的发展,教师、学生对电脑软件用于学习越来越重视,希望获取软件应用的过程简单,方便,快速。因而,用电脑完成学习中设计数字电子钟应用是十分重
4、要的。 1.1 编写目的 在对课程设计进行了全面细致的分析后明确了该电子钟 “做什么”, 编写这份分析报告的目的是将分析结果条理清晰的展示出来,它说明了本产品实现的各种计时功能以及各种功能的适用范围,方便以后更好的开展具体工作。本分析报告主要提交给老师和其他同学参考,以达到最终满足用户的要求,让用户满意。1.2项目背景项目名称:单片机电子时钟项目提出者:杨超项目开发者:杨超用户:学生1.3参考资料 1、谢自美电子线路设计实验测试 华中理工大学出版社2、刘湘涛江世明单片机原理与应用2、电子时钟概述2.1目标本设计可细化为两个子系统:时钟系统和秒表系统。在这个设计中以电子时钟设计为主,在此基础上稍
5、加变换以得到一个电子秒表。也可以将时钟与秒表合二为一,并且在同时使用时互不影响。即可在时钟与秒表之间任意切换,而不影响走时、计秒。 电子时钟主要工作过程为:在XD12键盘上选定3个键分别作为小时. 分. 秒的调校键。每按一次键,对应的显示值便加1。分. 秒加到59后变为00;小时加到23后再按键即变为00.再调校时均不向上一单位进位(例如分加到59后变为00;但小时不发生改变)。电子秒表的主要工作过程为:分、秒各占用2位显示,1/10秒、1/100秒各占用1位显示。设定二个键分别作启动停止、清零。2.2用户的特点本软件的最终用户可分为操作人员、维护人员。其中,要求操作人员对计算机、相关软件有一
6、定了解,可以无障碍的使用本系统提供给操作人员操作权限内的各种功能。 要求维护人员是对本系统有较深的了解,同时对系统相关信息及工作流程有所了解的技术人员,并且能分析编程程序。2.3假定和约束本系统由自己承接设计,是非专业的设计技术人员,只是学习了相关课程有关知识,由于此课程设计开发时间有限,我只能利用有限的课余时间进行系统需求分析报告。而且考虑到作为在校生,自己没有此类开发经验,所以,在设计过程中不可避免的出现考虑不全面,技术不成熟等问题,设计的系统相对比较简单。3、需求规定3.1软件功能的规定产品主要实现以下功能:电子钟:通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零
7、。从而达到计时的功能,是人民日常生活补课缺少的工具。电子秒表:分、秒各占用2位显示,1/10秒、1/100秒各占用1位显示。设定二个键分别作启动停止、清零。3.2对性能的规定3.2.1精度开机时时钟时从000000开始计时的,到235959时在回到0000003.2.2时间特性要求在中断服务程序里,必须对秒、分和时的单元内的数值进行判断,当秒加到60时,分必须加1 、秒清零;当分加到60时,时加1、分清零。当时加到24时,直接清零。然后转到调用处。3.2.3可靠性由于此系统由自己设计管理,所以,不会出现不运行或是死机等现象,可靠性高。3.2.4 灵活性在运用此设计中的电子时钟时可以改变其程序设
8、计来改变其相应的输入、输出设计要求,以完成各种不同用户的需求。4、运行环境规定4.1 设备键盘、鼠标及安装相应软件的电脑等4.2 系统及软件1. 操作系统:使用Windows XP 或 Windows 7等系统2. 应用软件:Keil uVision2、proteus7.2sp6二、系统设计介绍2.1、设计目的用89C51单片机CPU及接口电路设计并实现显示时间的实时时钟。2.2、功能要求说明(1)在ZY15MCU12BD型综合单片机试验箱的硬件结构上编写软件完成设计。(2)程序的首地址应使目标机可以直接运行,即从0000H开始。在主程序的开始部分必须设置一个合适的栈底。程序放置的地址须连续且
9、靠前,不要在中间留下大量的空间地址,以使目标机可以使用较少的硬件资源。(3)6位LED数码管从左到右分别显示时. 分. 秒(各占用2位),采用24小时标准计时制。开始计时时为000000,到235959后变成000000。(4)在XD12键盘上选定3个键分别作为小时. 分. 秒的调校键。每按一次键,对应的显示值便加1。分. 秒加到59后变为00;小时加到23后再按键即变为00.再调校时均不向上一单位进位(例如分加到59后变为00;但小时不发生改变)。(5)另设三个键,分别作小时、分、秒的减1调校。(6)在以上设计的基础上,修改程序制作一个电子秒表。分、秒各占用2位显示,1/10秒、1/100秒
10、各占用1位显示。设定二个键分别作启动停止、清零。(7)在做完(6)后,将时钟与秒表合二为一,并且在同时使用时互不影响。即可在时钟与秒表之间任意切换,而不影响走时、计秒。(8)软件设计必须使用8031片内定时器,采用定时中断结构,不得使用软件延时法。(9)上机调试程序。(10)写出设计报告。2.3 模块设计六位数码管显示模块89C51运算模块计算模块校时模块图1 系统模块三、电子时钟3.1、电子时钟简介1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通
11、过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。从而达到计时的功能,是人民日常生活补课缺少的工具。3.2、电子时钟的基本特点 现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。3.3、电子时钟的基本原理 该电子时钟由89C51,BUTTON,六段数码管等构成,采用晶振电路作为驱动电路,由延时程序和
12、循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。而电路中唯一的一个控制键却拥有多种不同的功能,按下又松开,可以实现屏蔽数码管显示的功能,达到省电的目的;直接按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加一。四、单片机的相关知识 4.1、单片机的简介单片机全称为单片机微型计算机(Single Chip Microsoftcomputer)。从应用领域来看,单片机主要用来控制,所以又称为微控制器(Microcontroller Unit)或嵌入式控制器。单片机是将计算机的基
13、本部件微型化并集成在一块芯片上的微型计算机。4.2、单片机的发展史4.2.1 4位单片机 1975年,美国德克萨斯仪器公司首次推出4位单片机TMS-1000;此后,各个计算机公司竞相推出四位单片机。日本松下公司的MN1400系列,美国洛克威尔公司的PPS/1系列等。四位单片机的主要应用领域有:PC机的输入装置,电池充电器,运动器材,带液晶显示的音/视频产品控制器,一般家用电器的控制及遥控器,电子玩具,钟表,计算器,多功能电话等。 4.2.2 8位单片机 1972年,美国Intel公司首先推出8位微处理器8008,并于1976年9月率先推出MCS-48系列单片机。在这以后,8位单片机纷纷面市。例
14、如,莫斯特克和仙童公司合作生产的3870系列,摩托罗拉公司生产的6801系列等。随着集成电路工艺水平的提高,一些高性能的8位单片机相继问世。例如,1978年摩托罗拉公司的MC6801系列及齐洛格公司的Z8系列,1979年NEC公司的UPD78XX系列。这类单片机的寻址能力达64KB,片内ROM容量达4-8KB,片内除带有并行IO口外,还有串行IO口,甚至还有AD转化器功能。8位单片机由于功能强,被广泛用于自动化装置、智能仪器仪表、智能接口、过程控制、通信、家用电器等各个领域。4.2.3 16位单片机 1983年以后,集成电路的集成度可达几十万只管/片,各系列16位单片机纷纷面市。这一阶段的代表
15、产品有1983年Intel公司推出的MCS-96系列,1987年Intel推出了80C96,美国国家半导体公司推出的HPC16040,NEC公司推出的783XX系列等。16位单片机主要用于工业控制,智能仪器仪表,便携式设备等场合。4.2.4 32位单片机 随着高新技术只智能机器人,光盘驱动器,激光打印机,图像与数据实时处理,复杂实时控制,网络服务器等领域的应用与发展,20世纪80年代末推出了32位单片机,如Motorlora公司的MC683XX系列,Intel的80960系列,以及近年来流行的ARM系列单片机。32位单片机是单片机的发展趋势,随着技术的发展及开发成本和产品价格的下降,将会与8位
16、单片机并驾齐驱。4.2.5 64位单片机 近年来,64位单片机在引擎控制,智能机器人,磁盘控制,语音图像通信,算法密集的实时控制场合已有应用,如英国Inmos公司的Transputer T800是高性能的64位单片机。4.3 单片机的特点 (1)、单片机的存储器ROM和RAM时严格区分的。ROM称为程序存储器,只存放程序,固定常数,及数据表格。RAM则为数据存储器,用作工作区及存放用户数据。 (2)、采用面向控制的指令系统。为满足控制需要,单片机有更强的逻辑控制能力,特别是单片机具有很强的位处理能力。(3)、单片机的I/O口通常时多功能的。由于单片机芯片上引脚数目有限,为了解决实际引脚数和需要
17、的信号线的矛盾,采用了引脚功能复用的方法,引脚处于何种功能,可由指令来设置或由机器状态来区分。(4)、单片机的外部扩展能力很强。在内部的各种功能部件不能满足应用的需求时,均可在外部进行扩展,与许多通用的微机接口芯片兼容,给应用系统设计带来了很大的方便。4.4、89C51单片机介绍 VCC:电源。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程 序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高
18、。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作 输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻 拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存 储器进行存取时,P2口输出地址的高八位。在给出地址“
19、1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器 的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。图2 89C51单片机 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中
20、断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脉冲。如
21、想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。EA/VPP:当/EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时, /EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源
22、(VPP)。五、各部分电路分析此实时时钟的设计与实现,主要采用了6只LED数码管,8031内部二进制16位定时器/计数器,可编程中断控制器8031等芯片,包括显示模块,运算模块和校时模块三大功能模块。5.1、显示模块用8255控制,用数码管的显示功能来设计。显示部分硬件用六只LED为显示管,这些LED发光二极管的阴极是互相连接在一起的,所以称为共阴极数码管。通过在这8只发光二极管的阳极加+5 V或0 V的电压使不同的二极管发光,形成不同的数字。该模块主要是将运算模块和校时模块运算出来并存放在内存单元里的十六进制表示的时位、分位和秒位数值转化为十进制,并通过8只数码管显示出来。该模块实现的硬件是
23、DVCC8086JH实验箱中的LED单元,采用软件译码,即在程序中设置一个段选码表。CPU直接往LED输出八段代码,省去了硬件译码器。A0A3作为8段数据输出口,经74LS07驱动后到达各LED。只要做到每送一次段选码时也送一次位扫描码,并且每送一次位扫描码后,位码中的0右移一位作为下一次的位扫描码,即可实现由左向右使6只LED依次出现数字显示。5.2、运算模块该模块的主要功能是对时、分、秒的运算,并把运算出的最终结果存到事先已经开辟的内存单元里,以便显示模块即时地显示出来。该模块可以细分为秒定时模块和运算模块。秒定时模块负责提供中断信号,由于CPU运算模块中的指令消耗一定的时间,所以中断信号
24、最好通过硬件来实现。本实验中用8031定时器/计数器,但因为8031供的信号的周期是毫秒级的,因此必须通过软件的方法在运算模块中设置一个统计中断次数的变量,并且这一变量必须事先在内存里开辟存储单元。中断信号是8031工作方式为方式1,产生一个50ms的脉冲信号。运算模块负责时、分、秒的计算,该模块主要通过8031的IR1号中断来实现,但由于每50ms一次中断请求,所以在中断服务程序必须利用已申请内存单元26H来统计中断请求的次数,只有当26H的值为20时,才能让秒单元内的数值加1。在中断服务程序里,必须对秒、分和时的单元内的数值进行判断,当秒加到60时,分必须加1 、秒清零;当分加到60时,时
25、加1、分清零。当时加到24时,直接清零。然后转到调用处。5.3、校时模块该模块主要功能是修改时、分、秒内存单元的数值。每按一次键,对应的显示值便加1。分、 秒加到59后变为00;小时加到23后再按键即变为00.再调校时均不向上一单位进位(例如分加到59后变为00;但小时不发生改变)。注意:在主程序中对时间进行调校前应关闭中断,以防在调校过程中定时中断服务程序也对时间进行修改而造成混淆。5.4. 整体功能在6块LED数码管上能实现数字时钟的时、分、秒显示和电子秒表的显示,并能对时、分、秒进行加1校对、减1校对和清零。本实验中06键、0A键、0E键是分别对时、分、秒的加1校对;05键、09键、0D
26、键时分别对时、分、秒的减1校对;07是电子秒表的清零键,0B是电子秒表的启动/停止键,0E键是数字时钟/电子秒表的切换键。并且开机时时钟时从000000开始计时的,到235959时在回到000000.六、程序调试将编写好的源程序输入电脑,编译后出现很多错误,这些错误有许多时平时的实验遇到过的,例如:输入的分号格式不正确,零和字母O弄混淆了,LOOP5出现了几次,CJNE写成了CJNZ等等,幸好这些错误在平时的实验中遇到了,所以改错误很容易,但同时也说明了,平时的错误现在还在换,证明错误我还没有完全的改正,这点我以后一定要注意了。争起错误换了两次就不能在换了。除了常见的错误外,还有几条错误时我从
27、来没有遇到过的,如:LJMP跳转指令跳不回指定的位置,是因为跳转的长度大于LJMP跳转的长度,最后只好设置跳转两次后才能跳到指定的位置。经过多次的修改和向别人请教,错误都拍除了,编译通过了,但功能没有达到设计的要求,第一、小时加1键加到23时还可以向上加而不是回到00.第二、时钟走到235959时不能回到000000的状态。这两个错误都出现在小时的位置,说明小时键很特殊,的确,小时键当小于23时个位遇到10要进位,当大于23时个位遇到4时要进位,小时的十位也是一样,要判断两次,才能实现完整的功能。最后,经过几天在机房的努力,终于实现了时钟的全部要求。在前期的程序编写和几天的上机调试,使我又获得
28、了很多新的知识,因为前期编写程序时查了很多资料学到了很多知识,这几天的调试更时获得很新的知识,因为程序中又很多的错误,为了修改错误必须看书或向别人请教,在这个过程中无意识的获得了很多知识。同时也使我对单片机更感兴趣了,这点我觉得很重要,因为兴趣使最好的老师,相信在以后的单片机相关的学习中会表现的更好。七、硬件电路图图3 总体电路图元件清单:名称数值数量名称数值数量电容C30pF2C08321电容E22uF174LS373174L240174LS1381LED274HC02389C511C08081名称数值数量名称数值数量晶振12MHz18255A1电建167406874086电位器10KW1电
29、阻100W8数码管17411八、仿真效果图图4 仿真效果图九、程序调试图5 程序设计调试图十、程序流程图初始化 设置堆栈定时器及打开相应中断调用显示子程序调用键盘扫描子程序图6主程序流程图是否有键按下 是延时12ms是否有键按下是否第0列有键按下 是是否为第0行是FLAG取反 否是否为第1行 否是否为第2行是跑表清零 否跑表暂停是否第1行右键按下 图7 键盘扫描流程图是否为第0行是秒加1 否是否为第1行是分加1 否是否为第2行是小时加1 否是否第2行右键按下是否松手 否 是否为第0行是秒减1调用显示程序 是否为第1行是分减1 是是否为第2行是小时减1返回FLAG=? =1 =0跑表数据地址R0
30、21H R0 ODFH R2数字钟数据首地址R031H R0 ODFH R2 查表取出数据并显示INC R0 RR R2 否是否显示完一遍即R0第四位是否为7 是返回图8 显示程序流程图十一、程序清单 FLAG EQU 20H.0 ;数字钟秒表切换标志位 DSEC EQU 38H ;数字钟秒计数单元 DMIN EQU 39H ;数字钟分计数单元 DHOUR EQU 3AH ;数字钟时计数单元 MSSUM EQU 28H ;跑表1/10,1/100秒计数单元 SECSUM EQU 29H ;跑表秒计数单元 MINSUM EQU 2AH ;跑表分计数单元 ORG 0000H ; SJMP STAR
31、T ; ORG 000BH LJMP INT_T0 ;跳转到数字钟中断服务程序 ORG 001BH LJMP INT_T1;跳转到跑表中断服务程序START:SETB EA SETB ET1 SETB ET0 MOV TMOD,#11H MOV TH1,#(65535-5000)/256 MOV TL1,#(65535-5000) MOD 256 MOV TH0,#(65535-50000)/256 MOV TL0,#(65535-50000) MOD 256 SETB TR0 SETB TR1 MOV DPTR,#4003H ;初始化8255 MOV A,#81H MOVX DPTR,A M
32、OV SP ,#50H ;堆栈设置 MOV R3,#0 MOV R7,#0MAIN: LCALL DISP;主程序 LCALL SCAN SJMP MAINSCAN: MOV DPTR,#4002H;键盘扫描子程序 MOV A,#0FH MOVX DPTR,A MOVX A,DPTR ANL A,#0FH CJNE A,#0FH,KEYSCAN ;有键按下,跳转到键盘检测 LJMP DONE KEYSCAN:INC R7 ;延时12Ms,去抖动 LCALL DISP CJNE R7,#10,KEYSCAN MOV R7,#0 MOV A,#0FH ;再次检测,确认是否有键按下 MOV DPTR
33、,#4002H MOVX DPTR,A MOVX A,DPTR ANL A,#0FH CJNE A,#0FH,KEYS0 LJMP DONEKEYS0: MOV A,#0EFH ;第0列按键检测 MOVX DPTR,A MOVX A,DPTR ;读回数据KEY00:JB ACC.0,KEY01 ;第0列第0行检测 CPL FLAG ;数字钟跑表显示标志位取反 LJMP NEXT1 ;跳到松手检测KEY01:JB ACC.1,KEY02 ;第0列第1行检测 CPL TR1 ;管定时器1 LJMP NEXT1KEY02:JB ACC.2,KEYS1 ;第0列第2行检测 MOV 21H,#0 MOV
34、 22H,#0 ;跑表计数单元清零 MOV 23H,#0 MOV 24H,#0 MOV 25H,#0 MOV 26H,#0 MOV MSSUM,#0 MOV SECSUM,#0 MOV MINSUM,#0 SJMP NEXT1 ;转到松手检测KEYS1:MOV A,#0DFH ;第1列按键检测 MOVX DPTR,A MOVX A,DPTRKEY10:JB ACC.0,KEY11 ;第1列第0行检测 INC DSEC;数字钟秒计数加1 MOV A,DSEC CJNE A,#60,NEXT1 ;秒是否到了60,没有则跳到松手检测 MOV DSEC,#0 ;到了60,清零 LJMP NEXT1;跳
35、到松手检测KEY11:JB ACC.1,KEY12;第1列第1行检测 INC DMIN;分加1 MOV A,DMIN CJNE A,#60,NEXT1 ;是否到60 MOV DMIN,#0 LJMP NEXT1KEY12:JB ACC.2,KEYS2 ;第1列第2行检测 INC DHOUR ;小时加1 MOV A,DHOUR CJNE A,#24,NEXT1;是否到24 MOV DHOUR,#0 LJMP NEXT1KEYS2:MOV A,#0BFH;第2列按键检测 MOVX DPTR,A MOVX A,DPTRKEY20:JB ACC.0,KEY21 ;第2列第0行检测 DEC DSEC;数
36、字钟秒计数减1 MOV A,DSEC CJNE A,#0FFH,NEXT1;是否为FFH,若是,则给秒计数赋值59 MOV DSEC,#59 LJMP NEXT1KEY21:JB ACC.1,KEY22;第2列第1行检测 DEC DMIN;分减1 MOV A,DMIN CJNE A,#0FFH,NEXT1 MOV DMIN,#59 LJMP NEXT1KEY22:JB ACC.2,DONE;第2列第2行检测 DEC DHOUR;小时减1 MOV A,DHOUR CJNE A,#0FFH,NEXT1 MOV DHOUR,#23NEXT1:LCALL DISP;松手检测,调用显示程序,防止数码管熄灭 MOV