课程设计论文基于单片机的多功能电子表设计.doc

上传人:sccc 文档编号:4869300 上传时间:2023-05-20 格式:DOC 页数:39 大小:873.51KB
返回 下载 相关 举报
课程设计论文基于单片机的多功能电子表设计.doc_第1页
第1页 / 共39页
课程设计论文基于单片机的多功能电子表设计.doc_第2页
第2页 / 共39页
课程设计论文基于单片机的多功能电子表设计.doc_第3页
第3页 / 共39页
课程设计论文基于单片机的多功能电子表设计.doc_第4页
第4页 / 共39页
课程设计论文基于单片机的多功能电子表设计.doc_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《课程设计论文基于单片机的多功能电子表设计.doc》由会员分享,可在线阅读,更多相关《课程设计论文基于单片机的多功能电子表设计.doc(39页珍藏版)》请在三一办公上搜索。

1、课程设计(论文)题 目 名 称 基于单片机的多功能电子表设计 课 程 名 称 单片机原理及在电气测控学科中的应用 学 生 姓 名 学 号 系 、专 业 电气工程系08级电气测控类 指 导 教 师 2010年 06 月30日摘 要 单片计算机即单片微型计算机。由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。本设计是通过单片机设计一个多功能电子表,要求不仅具有电子时钟的功能还具有闹铃、设定闹

2、铃时间、整点报时、生日提醒功能,而且能够预置生日时间关键字:单片机;多功能电子表;跑表;数码管显示。目 录摘 要41 引言71.1 多功能电子表简介71.2 多功能电子表的基本特点71.3 多功能电子表的原理72 单片机识的相关知识72.1 单片机简介72.2 单片机的发展史82.3 单片机的特点92.4 89C51单片机介绍93 控制系统的硬件设计123.1 单片机型号的选择123.2 数码管显示工作原理123.3 按键电路、复位键设计143.4 系统电路原理图144 控制系统的软件设计154.1 程序设计154.2 程序流程图154.3 仿真图204.4 仿真结果分析22总结23附录24A

3、2424.附B28参考文献29致谢引言 1957年,Ventura发明了世界上第一个电子表,从而奠定了电子表的基础,电子表开始迅速发展起来。现代的电子表是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。从而达到计时的功能,是人民日常生活不可缺少的工具。 现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时

4、误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。1、 AT89S52单片机介绍 AT89S52 具有以下标准功能:8k 字节 Flash,256 字节 RAM,32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至 0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下,CPU停止工作,允许 RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位

5、为止。 图 1.1 单片机引脚图VCC : 电源 GND: 地P0 口:P0 口是一个 8 位漏极开路的双向 I/O 口。作为输出口,每位能驱动 8 个 TTL 逻辑电平。对 P0 端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0 口也被作为低 8 位地址/数据复用。在这种模式下,P0 具有内部上拉电阻。在 flash 编程时,P0 口也用来接收指令字节;在程序校验时,输出指令字节。程序校时,需要外部上拉电阻。P1 口:P1 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p1 输出缓冲器能驱动 4 个TTL 逻辑电平。对 P1 端口写“1”时,内部上拉电阻把端口拉高

6、,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0 和 P1.2 分别作定时器/计数器 2 的外部计数输入(P1.0/T2)和时器/计数器 2的触发输入(P1.1/T2EX),具体如下表所示。表1.1 AT89S52 P1口第二功能表脚号第二功能P1.0T2(定时器/计数器 T2 的外部计数输入),时钟输出P1.1T2EX(定时器/计数器 T2 的捕捉/重载触发信号和方向控制)P1.5MOSI(在系统编程用)P1.6MISO(在系统编程用)P1.7SCK(在系统编程用)P2 口:P2 口是一个具有内部上拉电阻的 8 位双向 I/O

7、 口,P2 输出缓冲器能驱动 4 个TTL 逻辑电平。对 P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)在访问外部程序存储器或用 16 位地址读取外部数据存储器(例如执行 MOVX DPTR)时,P2 口送出高八位地址P3 口:P3 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p2 输出缓冲器能驱动 4 个TTL 逻辑电平。对 P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3 口亦作为 AT8

8、9S52 特殊功能(第二功能)使用,如下表所示。表1.1 AT89S52 P3口第二功能表脚号第二功能P3.0RXD(串行输入)P3.1TXD(串行输出)P3.2INT0(外部中断 0)P3.3INT0(外部中断 0)P3.4T0(定时器 0 外部输入)P3.5T1(定时器 1 外部输入)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器写选通)RST: 复位输入。晶振工作时,RST 脚持续 2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出 96 个晶振周期的高电平。特殊寄存器 AUXR(地址 8EH)上的 DISRTO 位可以使此功能无效。DISRTO 默认

9、状态下,复位高电平有效。ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低 8 位地址的输出脉冲。在 flash 编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE 脉冲将会跳过。PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当 AT89S52 从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN 将不被激活。EA/VPP:访问外部程序存储器控制信号。为使能从 00

10、00H 到 FFFFH 的外部程序存储器读取指令,EA 必须接 GND。为了执行内部程序指令,EA 应该接 VCC。在 flash 编程期间,EA 也接收 12 伏 VPP 电压。XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。2、设计功能及说明电子数字钟实现的主要功能: 实现正常走时(秒分时日月年进位) 能够预置时间和日期 能够自动区分平闰年和大小月 具有闹铃及设定闹铃时间功能 具有整点报时功能 具有生日提醒功能,能够预置生日时间 在任何一种预置状态下,预置项目会闪烁显示其它设计说明 优先级:预置闹铃报时生日提醒正常显示,即预置状态下闹铃、报时功

11、能及生日提醒功能都无效 生日时间到五个数码管显示“HAPPY” 生日显示状态下,按下中断INT0恢复正常显示且此后只有在下更改生日日期或第二年生日显示才有效。 正常显示状态下按下中断INT0进入预置状态,再按一次恢复。 用数码管(K0,K1)控制显示状态:00:时间,01:闹铃时间,10:日期,11。生日时间且显示样板如下图所示:生日:6 月1 日生日,最 闹铃:于早晨6 点10 分响,最后后两位bd 为birthday 的缩写 一位为一表示使能有效。日期:08 年2 月29 日 时间:12 点39 分45 秒 预置由拨码开关K2/K3/K4分别控制数码管12/34/56显示值,预置优先级:L

12、ED34LED12LED56(相应数码管显示的项目,显示状态下才能预置) 整点报时声音为59分51、53、55、57秒的后半秒报四声低音, 59秒的后半秒报一声高音 闹铃每次响一分钟 不论是预置状态还是正常走时状态均能够自动区分平闰年和大小月 闹铃使能由拨码开关K5控制并实时显示3、整体设计方案系统硬件电路根据系统功能可知,需要六个数码管,一个外部中断INT0,一个扬声器,由此结合单片机课程学习中对实验面板的了解,做出如下电路:图 3.1系统硬件电路图如图,晶振频率12MHz,拨码开关数值由P0口读入;P2口的输出作为控制数码管的段控信号,经74LS573即8位数据锁存器接到数码管中。数码管采

13、用共阴接法(图中未标示);P1.0-P1.5作为数码管的位控信号出端;开关W2经一个基本RS锁存器接入INT0,每按一次开关INTO取反次,按两次输入一个下降沿;扬声器由P1.6口控制。4、单模块流程设计及程序设计在完成了系统总流程设计后,便进入到了系统设计中工作量最大的模块流程设计。由于系统模块划分虽然是系统设计的基础,但比较简单而且模块划分有多种方法,因此单模块的设计可以认为是本程序中最关键的部分。单模块设计的好坏与否决定了系统功能能否被稳定地实现以及下一阶段调试程序的难度。鉴于单模块设计的重要性,我在设计中并不急于对模块进行编码,而是反复论证模块的可行性和流程图,为下一阶段的工作做好准备

14、,同时也能够尽早发现系统模块划分的错误,加以解决。各模块设计概述初始化模块(ONE)初始化模块包含了各中断的跳转语句、存储资源的分配、各存储器和寄存器的赋值以及中断及计时器的状态设置。源程序中共使用了17字节的内部数据存储地址,其中包含3字节位寻址地址以便于进行位判断。三字节的位寻址地址分配如下:22H秒的存储地址,方便对整点报时条件进行判断23H月的存储地址,方便对大小月平闰年进行判断另外一个位寻址字节00H地址拆开用做程序状态标志位00H(bit,BS)生日标志位,到生日那天为 1 使程序转入生日显示段01H(bit,SS)预置标志,以INT0控制其值,控制预置闪烁的实现02H(bit,G

15、S)闪烁标志,在预置标志有效时控制闪烁项目的亮和灭两状态03H(bit,FC)频率控制,在整点报时时控制产生低音还是高音04H(bit,NB)忽略生日标志,控制预置及报时的优先级高于生日显示05H(bit)控制生日信号的有效与否,其使用目的参见调试过程源程序中使用了两个寄存器R1、R0,R1用于控制闪烁的间隔时间, R0用于显示延时。在初始化模块中设定了中断的优先级、定时计数器的工作模式、并打开了定时计数器TO开始计时其他资源分配项目参见源程序集合及注释。初始化模块指令很大一部分都是伪指令,方便了后面程序的编写。24开关检测模块(TWO)开关检测模块主要执行两个任务:读取闹铃使能控制拨码开关K

16、5的值并赋予闹铃使能相应值;读取显示选择开关(K0,K1)的值并将要显示的项目值送入显示缓存LED12、LED34、LED56当k5为1时将A1H送入RE反之送入A1H,其中A为“”的字型码查表偏移量。当显示生日日期时,将生日Birthday的缩写“bd”的字型码送入显示缓存 LED56。图 4.1开关检测流程图显示主程序(THREE)显示主程序是程序中最复杂的模块,实现的功能也最多,占用了程序运行过程当中90%以上的执行时间。流程图中由判断SS(预置信号)开始分成两个分支,当SS=1,即预置状态下程序进入预置闪烁部分。图 4.2 显示主程序流程图预置闪烁的优先级是:LED34LED12LED

17、56即同预置优先级相同(参见调试部分的详细说明)闪烁首先判断是否对LED34进行判断闪烁,如果是则另外两个显示值直接显示,否则判断是否对LED12进行闪烁,如果是则直接显示LED56的值,只有当前两个显示值都不闪烁的时候,才判断是否对LED56进行闪烁,这样就确保了每次只有一个显示值闪烁。预置通过GS标志位判断预置的亮/灭,由R1控制每50轮显示对GS取反一次。当SS=0时进入判断闹铃/报时及正常显示模块,模块EIGHT(参见其说明)对闹铃及报时条件进行判断,符合条件则对P1.6取反一次并使NB(忽略生日)有效,此时行对BS(生日标志)的判断,即使响铃优先级高于生日显示(其实也可以对程序进行修

18、改使响铃和生日显示不发生冲突,修改方法参见程序优化)。当不响铃并且生日标志BS有效时显示HAPPY其单列开来。本程序由生日标志BS控制,当到达生日时间时,T0中断程序会将BS置1使之有效在显示主程序中通过判断BS的置来控制是否执行本模块标志BS有效时显示HAPPY其单列开来。本程序由生日标志BS控制,当到达生日时间时,T0中断程序会将BS置1使之有效在显示主程序中通过判断BS的置来控制是否执行本模块闹铃及整点报时判断程序(EIGHT)在显示主程序中每隔一段时间调用一次本程序来实现闹铃及报时功能。符合闹铃条件时,每调用一次本程序对P1.6取反一次,调节调用的时间间隔便可以调节报时的输出频率。在主

19、程序中设置每完成对一个数码管的显示变调用一次本程序,显示一个数码管的时间大约为1ms,因此响铃频率高音约为500Hz,低音约为250Hz。程序判断闹铃使能RE后分成两个分支,当RE=A1时判断闹铃条件是否满足,满足则对P1.6取反一次,否则跳转判断整点报时条件是否满足。当RE=0时,直接怕暖整点报时条件是否满足。判断整点报时条件时当当前时间满足:(MIN=59)(SECOND=59) (COUNT10)时报高音;当满足:(MIN=59)(SECOND=51/53/55/57) (COUNT10)时报低音。利用位寻址区来存储SECOND的方法,(SECOND50)(SECOND.0=1)时便满足

20、报低音的秒条件。利用TO中断次数存储器COUNT的大小可以判断是否到了后半秒(T0每50ms中断一次,中断20次到达一秒)。通过增加一个标志位FC来时下对高低音的区分,高音不受FC的影响,低音只有当FC=0的时候才对P1.6取反一次。并且每调用一次本程序便对FC取反一次,便达到每调用两次取反一次P1.6的效果。本程序的执行时间小于40us,因此多次调用不过分影响执行。中断(TO)计时程序(NINE)中断计时程序的流程比较简单。程序除实现正常走时外还需要判断是否到达生日时间置生日标志位有效。程序的输出均为BCD码,方便了显示程序对高低位的分离并查表显示。程序比较复杂的地方在于对平闰年及大小月的判

21、断。把月MONTH存储在位寻址区,当MONTH=02H时判断是否是平闰年,先将年由BCD码转化为二进制码,此时当年的后两位为全零的时候为闰年(由于只显示年的个位和十位,由2000年开始,00年、04年为闰年,其共同特点就是二进制后两位为零),否则为平年。当MONTH2时判断是否为大小月,MOUTH7时双月为大月。中断(T1)预置程序(TEN)T1通过中断INT0控制开启或关闭,每次定时50毫秒,存储地址COUNTS计数15次执行一次中断程序。由开关(K0,K1)控制预置项目,通过开关K2/K3/K4来分别控制LED12/LED34/LED56的预置,当两个开关都是有效时,具有优先级的区分,确保

22、无论按几个开关都最多只有一个项目被预置。判断预置的优先级顺序是:LED34LED12LED56这样安排的原因是由于根据生活经验LED34所对应的4个项目(小时、闹铃分、月、生日日)被预置的可能性最大。在预置日期和生日是要注意对大小月及平闰年进行判断(判断方法与中断计时程序中说明的方法类似,但不需要考虑进位)且月和日在溢出后应置一而不是归零。中断(INT0)设定程序(ELEVEN)中断INT0设置是否进行预置以及对生日标志的清除。且有如下设置顺序:清除预置信号并关T1清除生日标志设定预置信号并开T1。每按一次中断都只执行其中一个项目5、总结在赵宇红老师耐心的指导下,我顺利完成了这次单片机课程设计

23、课题中的多功能电子表的设计,通过这次的设计使我认识到本人对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,不能够充分理解每个语句的具体含义,导致编程的程序过于复杂,使得需要的存储空间增大。损耗了过多的内存资源。本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的多功能电子版表设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争,同时在查找资料的过程中我也学到了

24、许多新的知识,在和同学协作过程中增进同学间的友谊,使我对团队精神的积极性和重要性有了更加充分的理解。致谢最后,感谢尹进田老师对我的细心的指导,正是由于尹老师的细心的辅导和他提供给我们的参考资料,使得我的课程设计能够顺利的完成,同时感谢所以在课程设计过程中给于我帮助过的老师和同学,非常感谢。 张婷 2010年6月30日参考文献:1 谢自美电子线路设计实验测试M武汉:华中理工大学出版社,1992.2 何立民单片机应用系统设计M北京:北京航空航天大学出版社,1993.3 楼然笛单片机开发M北京:人民邮电出版社,1994.4 付家才单片机控制工程实践技术M北京:化学工业出版社 2004.3.5 李光才

25、单片机课程设计 实例指导M 北京:北京航空航天大学出版社 2004.6 朱定华单片机原理及接口技术实验M北京:北方交通大学出版社2002.11.7 刘湘涛江世明单片机原理与应用M. 北京:电子工业出版社,2006.附录A附录B:;*ONE初始化ORG 0SJMP ONEORG 0003HLJMP ELEVENORG 000BHLJMP NINEORG 001BHLJMP TENONE:LED12 EQU 30H ;数码管12显示缓存LED34 EQU 31H ;数码管34显示缓存LED56 EQU 32H ;数码管56显示缓存COUNT EQU 33H ;定时器T0(用来走时)计数值存储器(计

26、数中断20次到1秒)COUNTS EQU 34H ;定时器T1(用来预置)计数值存储器(计数中断15次到预置值加1)HOUR EQU 40H ;以下为时间,日期,闹铃时间,生日的存储地址MIN EQU 41HSECOND EQU 22HYEAR EQU 50HMONTH EQU 23HDAY EQU 52HRH EQU 60H ;闹铃小时RM EQU 61H ;闹铃分RE EQU 62H ;闹铃使能BM EQU 71H ;生日月份BD EQU 72H ;生日天MOV LED12,#0MOV LED34,#0MOV LED56,#0MOV COUNT,#0MOV COUNTS,#0MOV HOU

27、R,#0MOV MIN,#0MOV SECOND,#0MOV YEAR,#0MOV MONTH,#1MOV DAY,#1MOV RH,#0MOV RM,#0MOV RE,#0MOV BM,#6MOV BD,#1BS BIT 00H ;birthday symbol生日标志(到生日那天就为1)SS BIT 01H ;set symbol预置信号(按下中断预置为1,便开始闪烁和预置)GS BIT 02H ;glisten symbol闪烁标志FC BIT 03H ;frequency control频率控制NB BIT 04H ;neglect bitrhday symbol 忽略生日标志CLR

28、BSCLR SSCLR GSCLR FCCLR NBSETB 05H ;生日显示有效标志位MOV IP,#02H;中断优先级:T0INT0T1MOV TMOD,#11HMOV IE,#8BHSETB IT0MOV TH0,#3CH ;50msMOV TL0,#0B0HSETB TR0MOV R1,#50 ;显示延时用MOV R0,#0 ;显示延时用;* TWO检测开关号TWO:MOV P0,#0FFHJB P0.5,TWO1MOV RE,#0A0H ;0A0表示闹铃无效,送0A0是为了方便将使能查表显示,表中第A项为-SJMP TWO2TWO1:MOV RE,#0A1HTWO2:JB P0.0

29、,TWO4JB P0.1,TWO3MOV LED12,HOURMOV LED34,MINMOV LED56,SECONDSJMP THREETWO3:MOV LED12,YEARMOV LED34,MONTHMOV LED56,DAYSJMP THREETWO4:JB P0.1,TWO5MOV LED12,RHMOV LED34,RMMOV LED56,RESJMP THREETWO5:MOV LED12,BMMOV LED34,BDMOV LED56,#0BCHSJMP THREE;* THREE显示主程序(同时包含了闹铃,预置闪烁,闹铃功能)THREE:MOV P1,#0MOV P0,#0

30、FFHMOV DPTR,#TAB3JNB SS,THREEB ;判断预置信号是否有效,预置有效则转入判断闪烁显示模块,否则转入正常显示模块SJMP THREEATHREEB:LJMP THREE11 ;THREE11是正常显示并判断整点报时及闹铃模块THREEA:JNB P0.3,THREE1 ;开始是判断闪烁显示,这句判断是否预置分/月/生日的日/闹铃分JNB GS,THREE1 ;是否闪烁?LCALL TWELVE ;闪烁则调用延时不显示LED34SJMP THREE4THREE1:MOV A,LED34ANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE2:SETB

31、P1.3NOPDJNZ R0,THREE2CLR P1.3MOV A,LED34SWAP AANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE3:SETB P1.2NOPDJNZ R0,THREE3CLR P1.2JNB P0.2,THREE4 ;判断是否预置小时/年/生日月/闹铃的小时JNB GS,THREE4 ;是否显示小时/年/生日月/闹铃的小时LCALL TWELVESJMP THREE7THREE4:MOV A,LED12ANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE5:SETB P1.1NOPDJNZ R0,THREE5CLR P1.

32、1MOV A,LED12SWAP AANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE6:SETB P1.0NOPDJNZ R0,THREE6CLR P1.0JB P0.0,THREE7 ;数码管56只有在显示日期的天时才有预置闪烁功能,其余三项都不需要判断闪烁JNB P0.1,THREE7JB P0.3,THREE7JNB P0.4,THREE7JNB GS,THREE7LCALL TWELVESJMP THREE10THREE7:MOV A,LED56ANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE8:SETB P1.5NOPDJNZ R0,T

33、HREE8CLR P1.5MOV A,LED56SWAP AANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE9:SETB P1.4NOPDJNZ R0,THREE9CLR P1.4THREE10:DJNZ R1,TWOASJMP TWOBTWOA:LJMP TWOTWOB:MOV R1,#50 ;判断闪烁一次是否完成CPL GS ;取反闪烁标志,用于控制闪烁的亮和灭LJMP TWO ;一轮显示完后再判断开关号;*正常显示THREE11:LCALL EIGHT ;判断是否取反P1.6即输出闹铃或整点报时,以下每次显示都要调用一次JB NB,THREE12 ;如果是在整点报

34、时状态就不显示生日提醒,报时过后显示提醒JNB BS,THREE12SJMP SEVEN ;跳到生日提醒程序THREE12:CLR NB ;开始正常显示时间及判断闹铃输出MOV A,LED34ANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE13:SETB P1.3NOPDJNZ R0,THREE13CLR P1.3MOV A,LED34SWAP AANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE14:SETB P1.2NOPDJNZ R0,THREE14CLR P1.2LCALL EIGHTMOV A,LED12ANL A,#0FHMOVC A,

35、A+DPTRMOV P2,ATHREE15:SETB P1.1NOPDJNZ R0,THREE15CLR P1.1MOV A,LED12SWAP AANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE16:SETB P1.0NOPDJNZ R0,THREE16CLR P1.0LCALL EIGHTMOV A,LED56ANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE17:SETB P1.5NOPDJNZ R0,THREE17CLR P1.5MOV A,LED56SWAP AANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE18:

36、SETB P1.4NOPDJNZ R0,THREE18CLR P1.4LJMP TWO ;一轮显示完后判开关TAB3:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H 7FH,6FH,40H,7CH,5EH;0.1.2.3.4.5.6.7.8.9.-.b.d,的字形表bd在显示生日时间时显示在LED56;*SEVEN生日时显示生日祝福语”HAPPY”SEVEN:MOV P1,#01HMOV P2,#76HDJNZ R0,SEVENSEVEN1:MOV P1,#02HMOV P2,#77HDJNZ R0,SEVEN1SEVEN2:MOV P1,#04HMOV P2,#73HD

37、JNZ R0,SEVEN2SEVEN3:MOV P1,#08HMOV P2,#73HDJNZ R0,SEVEN3SEVEN4:MOV P1,#10HMOV P2,#6EHDJNZ R0,SEVEN4LJMP TWO;*EIGHT判断是否闹铃子程序EIGHT:MOV A,RECJNE A,#0A1H,EIGHT1MOV A,MINCJNE A,RM,EIGHT1MOV A,HOURCJNE A,RH,EIGHT1SJMP EIGHT4 ;闹铃时间到则CPLP1.6一次并忽略生日标志(即NB有效)EIGHT1:MOV A,MINCJNE A,#59H,EIGHT7MOV A,SECONDCJNE

38、A,#59H,EIGHT5 ;是否等于59分59秒EIGHT2:MOV A,COUNT ;是否到达后半秒CJNE A,#10,EIGHT3EIGHT3:JC EIGHT7EIGHT4:CPL P1.6SETB NBSJMP EIGHT7EIGHT5:MOV A,SECONDCJNE A,#51H,EIGHT6 ;是否大于51秒EIGHT6:JC EIGHT7JNB 10H,EIGHT7 ;判断是否报低音JB FC,EIGHT7 ; 只有FC有效时才输出SJMP EIGHT2EIGHT7:CPL FC ;用来控制报低音和高音,满足报低音条件时,调用两次本程序对P1.6取反一次,高音时调用一次取反

39、一次RET;* NINE中断(T0)计时程序(包含了秒分时日月年间的进位及判断大小月,平闰年)NINE:MOV TH0,#3CH ;开定时器MOV TL0,#0B0HSETB TR0INC COUNTMOV A,COUNTCJNE A,#20,INEAASJMP AAAINEAA:LJMP NINE1AAA:MOV COUNT,#0 ; 计时MOV A,SECONDADD A,#01DA A ;换成bcd码以方便显示MOV SECOND,ACJNE A,#60H,INEAAMOV SECOND,#0MOV A,MINADD A,#01DA AMOV MIN,ACJNE A,#60H,INEAA

40、MOV MIN,#0MOV A,HOURADD A,#01DA AMOV HOUR,ACJNE A,#24H,INEAAMOV HOUR,#0MOV A,DAYADD A,#01DA AMOV DAY,A;*判断平闰年及大小月MOV A,MONTHCJNE A,#02H,TEN6AMOV A,YEAR ;把年由BCD码换成二进制码ANL A,#0F0HSWAP AMOV B,#10MUL ABMOV 24H,AMOV A,YEARANL A,#0FHADD A,24HJB ACC.0,TEN5A ;二进制码后两位为00表示为闰年JB ACC.1,TEN5AMOV 24H,#01MOV A,DA

41、YCJNE A,#30H,NINE1MOV DAY,#1SJMP NINE0TEN5A:MOV A,DAYCJNE A,#29H,NINE1MOV DAY,#1SJMP NINE0;*判断大小月;大于等于8月时双月为大月,小于8月时单月为大月TEN6A:MOV A,MONTHCJNE A,#08H,TEN7ATEN7A:JC TEN9AJB 18H,TEN8AMOV A,DAYCJNE A,#32H,NINE1MOV DAY,#1SJMP NINE0TEN8A:MOV A,DAYCJNE A,#31H,NINE1MOV DAY,#1SJMP NINE0TEN9A:JNB 18H,TEN10AMOV A,DAYCJNE A,#32H,NINE1MOV DAY,#1SJMP NINE0TEN10A:MOV A,DAYCJNE A,#31H,NINE1MOV DAY,#1;*NI

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号