基于单片机的多功能电子表的设计论文 (2)_第1页
基于单片机的多功能电子表的设计论文 (2)_第2页
基于单片机的多功能电子表的设计论文 (2)_第3页
基于单片机的多功能电子表的设计论文 (2)_第4页
基于单片机的多功能电子表的设计论文 (2)_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、. . . 课程设计(论文)题 目名称基于单片机的多功能电子表设计课 程 名 称单片机原理与在电气测控学科中的应用摘 要单片计算机即单片微型计算机。由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。本设计是通过单片机设计一个多功能电子表,要求不仅具有电子时钟的功能还具有闹铃、设定闹铃时间、整点报时、生日提醒功能,而且能够预置生日时间关键字:单片机;多功能电子表;跑表;数码管显示。目 录摘要

2、1引言31、 AT89S52单片机介绍42、设计功能与说明73、整体设计方案94、单模块流程设计与程序设计104.1初始化模块(ONE)114.2开关检测模块(TWO)114.3显示主程序(THREE)14.4闹铃与整点报时判断程序(EIGHT)14.5中断(TO)计时程序(NINE)04.6中断(T1)预置程序(TEN)04.7中断(INT0)设定程序(ELEVEN)05、总结1致2参考文献:3附录A4附录B:5引言1957年,Ventura发明了世界上第一个电子表,从而奠定了电子表的基础,电子表开始迅速发展起来。现代的电子表是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一

3、秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。从而达到计时的功能,是人民日常生活不可缺少的工具。现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。1、 AT89S52单片机介绍AT89S52 具有以下标准功能:8k 字节 Flash,256 字节 RAM,32 位 I/O 口线,看门

4、狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片晶振与时钟电路。另外,AT89S52 可降至 0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下,CPU停止工作,允许 RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。图1.1 AT89S52 引脚图VCC : 电源GND: 地P0 口:P0 口是一个 8 位漏极开路的双向 I/O 口。作为输出口,每位能驱动 8 个 TTL 逻辑电平。对 P0 端口写“1”时,引脚用作高阻抗输入。当访

5、问外部程序和数据存储器时,P0 口也被作为低 8 位地址/数据复用。在这种模式下,P0 具有部上拉电阻。在 flash 编程时,P0 口也用来接收指令字节;在程序校验时,输出指令字节。程序校时,需要外部上拉电阻。P1 口:P1 口是一个具有部上拉电阻的 8 位双向 I/O 口,p1 输出缓冲器能驱动 4 个TTL 逻辑电平。对 P1 端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流(IIL)。此外,P1.0 和 P1.2 分别作定时器/计数器 2 的外部计数输入(P1.0/T2)和时器/计数器 2的触发输入(P1.1/T

6、2EX),具体如下表所示。脚号第二功能P1.0T2(定时器/计数器 T2 的外部计数输入),时钟输出P1.1T2EX(定时器/计数器 T2 的捕捉/重载触发信号和方向控制)P1.5MOSI(在系统编程用)P1.6MISO(在系统编程用)P1.7SCK(在系统编程用)P2 口:P2 口是一个具有部上拉电阻的 8 位双向 I/O 口,P2 输出缓冲器能驱动 4 个TTL 逻辑电平。对 P2 端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流(IIL)在访问外部程序存储器或用 16 位地址读取外部数据存储器(例如执行 MOVX

7、DPTR)时,P2 口送出高八位地址P3 口:P3 口是一个具有部上拉电阻的 8 位双向 I/O 口,p2 输出缓冲器能驱动 4 个TTL 逻辑电平。对 P3 端口写“1”时,部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于部电阻的原因,将输出电流(IIL)。P3 口亦作为 AT89S52 特殊功能(第二功能)使用,如下表所示。脚号第二功能P3.0RXD(串行输入)P3.1TXD(串行输出)P3.2INT0(外部中断 0)P3.3INT0(外部中断 0)P3.4T0(定时器 0 外部输入)P3.5T1(定时器 1 外部输入)P3.6WR(外部数据存储器写选通)

8、P3.7RD(外部数据存储器写选通)RST: 复位输入。晶振工作时,RST 脚持续 2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出 96 个晶振周期的高电平。特殊寄存器 AUXR(地址 8EH)上的 DISRTO 位可以使此功能无效。DISRTO 默认状态下,复位高电平有效。ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低 8 位地址的输出脉冲。在 flash 编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE 脉

9、冲将会跳过。PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当 AT89S52 从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN 将不被激活。EA/VPP:访问外部程序存储器控制信号。为使能从 0000H 到 FFFFH 的外部程序存储器读取指令,EA 必须接 GND。为了执行部程序指令,EA 应该接 VCC。在 flash 编程期间,EA 也接收 12 伏 VPP 电压。XTAL1:振荡器反相放大器和部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。2、设计功能与说明电子数字钟实现的主要功能: 实现正常走

10、时(秒分时日月年进位) 能够预置时间和日期 能够自动区分平闰年和大小月 具有闹铃与设定闹铃时间功能 具有整点报时功能 具有生日提醒功能,能够预置生日时间 在任何一种预置状态下,预置项目会闪烁显示其它设计说明 优先级:预置闹铃报时生日提醒正常显示,即预置状态下闹铃、报时功能与生日提醒功能都无效 生日时间到五个数码管显示“HAPPY” 生日显示状态下,按下中断INT0恢复正常显示且此后只有在下更改生日日期或第二年生日显示才有效。 正常显示状态下按下中断INT0进入预置状态,再按一次恢复。 用数码管(K0,K1)控制显示状态:00:时间,01:闹铃时间,10:日期,11。生日时间且显示样板如下图所示

11、:生日:6 月1 日生日,最后两位bd 为birthday 的缩写。闹铃:于早晨6 点10 分响,最后一位为一表示使能有效。日期:08 年2 月29 日时间:12 点39 分45 秒 预置由拨码开关K2/K3/K4分别控制数码管12/34/56显示值,预置优先级:LED34LED12LED56(相应数码管显示的项目,显示状态下才能预置) 整点报时声音为59分51、53、55、57秒的后半秒报四声低音, 59秒的后半秒报一声高音 闹铃每次响一分钟 不论是预置状态还是正常走时状态均能够自动区分平闰年和大小月 闹铃使能由拨码开关K5控制并实时显示3、整体设计方案系统硬件电路根据系统功能可知,需要六个

12、数码管,一个外部中断INT0,一个扬声器,由此结合单片机课程学习中对实验面板的了解,做出如下电路:如图,晶振频率12MHz,拨码开关数值由P0口读入;P2口的输出作为控制数码管的段控信号,经74LS573即8位数据锁存器接到数码管中。数码管采用共阴接法(图中未标示);P1.0-P1.5作为数码管的位控信号出端;开关W2经一个基本RS锁存器接入INT0,每按一次开关INTO取反次,按两次输入一个下降沿;扬声器由P1.6口控制。4、单模块流程设计与程序设计在完成了系统总流程设计后,便进入到了系统设计中工作量最大的模块流程设计。由于系统模块划分虽然是系统设计的基础,但比较简单而且模块划分有多种方法,

13、因此单模块的设计可以认为是本程序中最关键的部分。单模块设计的好坏与否决定了系统功能能否被稳定地实现以与下一阶段调试程序的难度。鉴于单模块设计的重要性,我在设计中并不急于对模块进行编码,而是反复论证模块的可行性和流程图,为下一阶段的工作做好准备,同时也能够尽早发现系统模块划分的错误,加以解决。4.1初始化模块(ONE)初始化模块包含了各中断的跳转语句、存储资源的分配、各存储器和寄存器的赋值以与中断与计时器的状态设置。源程序中共使用了17字节的部数据存储地址,其中包含3字节位寻址地址以便于进行位判断。三字节的位寻址地址分配如下:22H秒的存储地址,方便对整点报时条件进行判断23H月的存储地址,方便

14、对大小月平闰年进行判断另外一个位寻址字节00H地址拆开用做程序状态标志位00H(bit,BS)生日标志位,到生日那天为 1 使程序转入生日显示段01H(bit,SS)预置标志,以INT0控制其值,控制预置闪烁的实现02H(bit,GS)闪烁标志,在预置标志有效时控制闪烁项目的亮和灭两状态03H(bit,FC)频率控制,在整点报时时控制产生低音还是高音04H(bit,NB)忽略生日标志,控制预置与报时的优先级高于生日显示05H(bit)控制生日信号的有效与否,其使用目的参见调试过程源程序中使用了两个寄存器R1、R0,R1用于控制闪烁的间隔时间, R0用于显示延时。在初始化模块中设定了中断的优先级

15、、定时计数器的工作模式、并打开了定时计数器TO开始计时其他资源分配项目参见源程序集合与注释。初始化模块指令很大一部分都是伪指令,方便了后面程序的编写。24 / 384.2开关检测模块(TWO)开关检测模块主要执行两个任务:读取闹铃使能控制拨码开关K5的值并赋予闹铃使能相应值;读取显示选择开关(K0,K1)的值并将要显示的项目值送入显示缓存LED12、LED34、LED56当k5为1时将A1H送入RE反之送入A1H,其中A为“”的字型码查表偏移量。当显示生日日期时,将生日Birthday的缩写“bd”的字型码送入显示缓存LED56。开关检测模块的执行时间大约在40uS左右。4.3显示主程序(TH

16、REE)显示主程序是程序中最复杂的模块,实现的功能也最多,占用了程序运行过程当中90%以上的执行时间。流程图中由判断SS(预置信号)开始分成两个分支,当SS=1,即预置状态下程序进入预置闪烁部分。预置闪烁的优先级是:LED34LED12LED56即同预置优先级一样(参见调试部分的详细说明)闪烁首先判断是否对LED34进行判断闪烁,如果是则另外两个显示值直接显示,否则判断是否对LED12进行闪烁,如果是则直接显示LED56的值,只有当前两个显示值都不闪烁的时候,才判断是否对LED56进行闪烁,这样就确保了每次只有一个显示值闪烁。预置通过GS标志位判断预置的亮/灭,由R1控制每50轮显示对GS取反

17、一次。当SS=0时进入判断闹铃/报时与正常显示模块,模块EIGHT(参见其说明)对闹铃与报时条件进行判断,符合条件则对P1.6取反一次并使NB(忽略生日)有效,此时行对BS(生日标志)的判断,即使响铃优先级高于生日显示(其实也可以对程序进行修改使响铃和生日显示不发生冲突,修改方法参见程序优化)。当不响铃并且生日标志BS有效时显示HAPPY其单列开来。本程序由生日标志BS控制,当到达生日时间时,T0中断程序会将BS置1使之有效在显示主程序过判断BS的置来控制是否执行本模块标志BS有效时显示HAPPY其单列开来。本程序由生日标志BS控制,当到达生日时间时,T0中断程序会将BS置1使之有效在显示主程

18、序过判断BS的置来控制是否执行本模块4.4闹铃与整点报时判断程序(EIGHT)在显示主程序中每隔一段时间调用一次本程序来实现闹铃与报时功能。符合闹铃条件时,每调用一次本程序对P1.6取反一次,调节调用的时间间隔便可以调节报时的输出频率。在主程序中设置每完成对一个数码管的显示变调用一次本程序,显示一个数码管的时间大约为1ms,因此响铃频率高音约为500Hz,低音约为250Hz。程序判断闹铃使能RE后分成两个分支,当RE=A1时判断闹铃条件是否满足,满足则对P1.6取反一次,否则跳转判断整点报时条件是否满足。当RE=0时,直接怕暖整点报时条件是否满足。判断整点报时条件时当当前时间满足:(MIN=5

19、9)(SECOND=59) (COUNT10)时报高音;当满足:(MIN=59)(SECOND=51/53/55/57) (COUNT10)时报低音。利用位寻址区来存储SECOND的方法,(SECOND50)(SECOND.0=1)时便满足报低音的秒条件。利用TO中断次数存储器COUNT的大小可以判断是否到了后半秒(T0每50ms中断一次,中断20次到达一秒)。通过增加一个标志位FC来时下对高低音的区分,高音不受FC的影响,低音只有当FC=0的时候才对P1.6取反一次。并且每调用一次本程序便对FC取反一次,便达到每调用两次取反一次P1.6的效果。本程序的执行时间小于40us,因此多次调用不过分

20、影响执行。4.5中断(TO)计时程序(NINE)中断计时程序的流程比较简单。程序除实现正常走时外还需要判断是否到达生日时间置生日标志位有效。程序的输出均为BCD码,方便了显示程序对高低位的分离并查表显示。程序比较复杂的地方在于对平闰年与大小月的判断。把月MONTH存储在位寻址区,当MONTH=02H时判断是否是平闰年,先将年由BCD码转化为二进制码,此时当年的后两位为全零的时候为闰年(由于只显示年的个位和十位,由2000年开始,00年、04年为闰年,其共同特点就是二进制后两位为零),否则为平年。当MONTH2时判断是否为大小月,MOUTH7时双月为大月。4.6中断(T1)预置程序(TEN)T1

21、通过中断INT0控制开启或关闭,每次定时50毫秒,存储地址COUNTS计数15次执行一次中断程序。由开关(K0,K1)控制预置项目,通过开关K2/K3/K4来分别控制LED12/LED34/LED56的预置,当两个开关都是有效时,具有优先级的区分,确保无论按几个开关都最多只有一个项目被预置。判断预置的优先级顺序是:LED34LED12LED56这样安排的原因是由于根据生活经验LED34所对应的4个项目(小时、闹铃分、月、生日日)被预置的可能性最大。在预置日期和生日是要注意对大小月与平闰年进行判断(判断方法与中断计时程序中说明的方法类似,但不需要考虑进位)且月和日在溢出后应置一而不是归零。4.7

22、中断(INT0)设定程序(ELEVEN)中断INT0设置是否进行预置以与对生日标志的清除。且有如下设置顺序:清除预置信号并关T1清除生日标志设定预置信号并开T1。每按一次中断都只执行其中一个项目5、总结在宇红老师耐心的指导下,我顺利完成了这次单片机课程设计课题中的多功能电子表的设计,通过这次的设计使我认识到本人对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,尤其是对程序设计语句的理解和运用,不能够充分理解每个语句的具体含义,导致编程的程序过于复杂,使得需要的存储空间增大。损耗了过多的存资源。本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学

23、到的知识运用到我以后的工作中去。在大学的课堂的学习只是在给我们灌输专业知识,而我们应把所学的用到我们现实的生活中去,此次的多功能电子版表设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争,同时在查找资料的过程中我也学到了许多新的知识,在和同学协作过程中增进同学间的友谊,使我对团队精神的积极性和重要性有了更加充分的理解。致最后,感进田老师对我的细心的指导,正是由于老师的细心的辅导和他提供给我们的参考资料,使得我的课程设计能够顺利的完成,同时感所以在课程设计过程中给于我帮助过的老师和同学,非常感。 婷 2010年6月30日参考文献:1 自美电子线路设计实验测试M:

24、华中理工大学,1992.2 何立民单片机应用系统设计M:航空航天大学,1993.3 楼然笛单片机开发M:人民邮电,1994.4 付家才单片机控制工程实践技术M:化学工业 2004.3.5 光才单片机课程设计 实例指导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显示缓存LED3

25、4 EQU 31H ;数码管34显示缓存LED56 EQU 32H ;数码管56显示缓存COUNT EQU 33H ;定时器T0(用来走时)计数值存储器(计数中断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 EQ

26、U 72H ;生日天MOV LED12,#0MOV LED34,#0MOV LED56,#0MOV COUNT,#0MOV COUNTS,#0MOV HOUR,#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闪烁标志F

27、C BIT 03H ;frequency control频率控制NB BIT 04H ;neglect bitrhday symbol 忽略生日标志CLR 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,#0FFH P0.5,TWO1MOV RE,#0A

28、0H ;0A0表示闹铃无效,送0A0是为了方便将使能查表显示,表中第A项为-SJMP TWO2TWO1:MOV RE,#0A1HTWO2: P0.0,TWO4 P0.1,TWO3MOV LED12,HOURMOV LED34,MINMOV LED56,SECONDSJMP THREETWO3:MOV LED12,YEARMOV LED34,MONTHMOV LED56,DAYSJMP THREETWO4: P0.1,TWO5MOV LED12,RHMOV LED34,RMMOV LED56,RESJMP THREETWO5:MOV LED12,BMMOV LED34,BDMOV LED56,#

29、0BCHSJMP THREE;* THREE显示主程序(同时包含了闹铃,预置闪烁,闹铃功能)THREE:MOV P1,#0MOV P0,#0FFHMOV DPTR,#TAB3JNB SS,THREEB ;判断预置信号是否有效,预置有效则转入判断闪烁显示模块,否则转入正常显示模块SJMP THREEATHREEB:LJMP THREE11 ;THREE11是正常显示并判断整点报时与闹铃模块THREEA:JNB P0.3,THREE1 ;开始是判断闪烁显示,这句判断是否预置分/月/生日的日/闹铃分JNB GS,THREE1 ;是否闪烁?LCALL TWELVE ;闪烁则调用延时不显示LED34SJ

30、MP THREE4THREE1:MOV A,LED34ANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE2:SETB 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,LED12A

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

32、A,LED56ANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE8:SETB P1.5NOPDJNZ R0,THREE8CLR 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:LC

33、ALL EIGHT ;判断是否取反P1.6即输出闹铃或整点报时,以下每次显示都要调用一次 NB,THREE12 ;如果是在整点报时状态就不显示生日提醒,报时过后显示提醒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.2N

34、OPDJNZ R0,THREE14CLR P1.2LCALL EIGHTMOV A,LED12ANL A,#0FHMOVC A,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,THREE17

35、CLR P1.5MOV A,LED56SWAP AANL A,#0FHMOVC A,A+DPTRMOV P2,ATHREE18: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:MO

36、V P1,#02HMOV P2,#77HDJNZ R0,SEVEN1SEVEN2:MOV P1,#04HMOV P2,#73HDJNZ 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一次并

37、忽略生日标志(即NB有效)EIGHT1:MOV A,MINCJNE A,#59H,EIGHT7MOV A,SECONDCJNE 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 ;判断是否报低音 FC,EIGHT7 ; 只有FC有效时才输出SJMP EIGHT

38、2EIGHT7:CPL FC ;用来控制报低音和高音,满足报低音条件时,调用两次本程序对P1.6取反一次,高音时调用一次取反一次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,INEA

39、AMOV SECOND,#0MOV A,MINADD A,#01DA AMOV MIN,ACJNE A,#60H,INEAAMOV 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,24H A

40、CC.0,TEN5A ;二进制码后两位为00表示为闰年 ACC.1,TEN5AMOV 24H,#01MOV A,DAYCJNE 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 TEN9A 18H,TEN8AMOV A,DAYCJNE A,#32H,NINE1MOV DAY,#1SJMP NINE0TEN8A:MOV A,DAYCJ

41、NE 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;*NINE0:MOV A,MONTHADD A,#01DA AMOV MONTH,ASETB 05HCJNE A,#13H,NINE1MOV MONTH,#1MOV A,YEARADD A,#01DA AMOV YEAR,ANINE1:MOV A,MONTHCJNE A,BM,NINE2MOV A,DAYCJ

42、NE A,BD,NINE2JNB 05H,NINE2SETB BSNINE2:RETI;*TEN中断(T1)预置加一程序由INT0控制其的开启与关闭;*判断预置项目TEN:MOV TH1,#3CHMOV TL1,#0B0HSETB TR1INC COUNTSMOV A,COUNTSCJNE A,#15,TENEMOV COUNTS,#0 P0.0,RBRB P0.1,DATSJMP TIMEDAT: LJMP DATERBRB: P0.1,BDATLJMP RTIMEBDAT:LJMP BDATETENE:RETI;*预置时间TIME: JNB P0.3,TEN1MOV A,MINADD A,

43、#01DA AMOV MIN,ACJNE A,#60H,TENAMOV MIN,#0SJMP TENATEN1:JNB P0.2,TENAMOV A,HOURADD A,#01DA AMOV HOUR,ACJNE A,#24H,TENAMOV HOUR,#0TENA:RETI;*预置日期DATE:JNB P0.3,TEN3MOV A,MONTHADD A,#01DA AMOV MONTH,ACJNE A,#13H,TENBMOV MONTH,#1SJMP TENBTEN3:JNB P0.2,TEN4MOV A,YEARADD A,#01DA AMOV YEAR,ASJMP TENBTEN4:JNB P0.4,TENBMOV A,DAYADD A,#01DA AMOV DAY,A;*判断平

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论