电子时钟设计
摘要
单片机集成度高、功能强、可靠性高、体积小、功耗低、使用方便、价格低廉等一系列优点,在当今人们生活中几乎无处不在,本文是基于AT89S51单片机的数字电子时钟设计。数字时钟在日常生活中最常见,时钟,自从它被发明的那天起,就成为人们生活中必不可少的一件工具,尤其是在现在这个讲效率的年代,时钟更是在人类生产、生活、学习等多个领域使用。电子钟是人们日常生活中常用的计时工具,应用也最广泛。本文主要就是设计一款数字钟,以AT89S51单片机为核心,配备显示模块、时钟电路、闹铃等功能模块。数字钟采用24小时制方式显示时间,定时信息。
本文主要从硬件设计和软件设计两大方面进行详细介绍。硬件电路设计主要包括中央处理单元电路、时钟电路、控制电路、显示电路等级部分组成。软件用汇编语言来实现,主要包括主程序、加计时、减计时设计子程序、闹铃程序等软件模块。
关键词:AT89S51,加计时,电子时钟,显示模块
课程设计说明书 第 II 页
目 录
1绪论 ......................................................................................................................................... 1 2硬件设计 ................................................................................................................................. 2 2.1硬件总体框图 .................................................................................................................. 2 2.2主要硬件电路的介绍 ...................................................................................................... 2 2.2.1 AT89S51的介绍 ..................................................................................................... 2 2.2.2复位电路 ................................................................................................................. 6 2.2.3时钟电路 ................................................................................................................. 7 2.2.4输入电路 ................................................................................................................. 8 2.2.5 LED数码显示电路 ................................................................................................ 8 2.2.6闹铃电路 ............................................................................................................... 11 2.2.7电路原理图 ........................................................................................................... 11 3各功能的实现 ....................................................................................................................... 12 4软件设计 ............................................................................................................................... 13 4.1程序流程图 .................................................................................................................... 13 4.2程序 ................................................................................................................................ 16 总 结 ...................................................................................................................................... 30 致 谢 ...................................................................................................................................... 31 参考文献 .................................................................................................................................. 32
课程设计说明书 第 1 页
1绪论
单片机自1976年由Intel公司推出MCS-48开始,迄今已有30多年了。由于单片机集成度高、功能强、可靠性高、体积小、功耗低、使用方便、价格低廉等一系列优点。 到现在为止单片机在日常生活和工作中无处不在、无处不有:家用电器中的电子表、洗衣机、电饭煲、豆浆机、电子秤;住宅小区的监控系统、电梯智能化控制系统、医用设备中的呼吸机等等,都有单片机的影子,本文以AT89S51单片机为基础设计数字电子时钟 [5]。
时钟,自从它被发明的那天起,就成为人们生活中必不可少的一件工具,尤其是在现在这个讲效率的年代,时钟更是在人类生产、生活、学习等多个领域使用。电子钟是人们日常生活中常用的计时工具,时间对人们来说总是那么宝贵,工作的忙碌和复杂性容易使人忘记当前的时间,忘记了要做的事情,一旦是重要的事情,一时的耽误可能酿成大祸。电子钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、码头、剧院、广场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来很大的方便。由于数字集成电路技术的发展采用了先进的石英技术,使电子钟具有走时准确、性能稳定、携带方便而数字式电子时钟又有体积小、重量轻、走时准确、结构简单、耗电量少等优点而在生活中被广泛应用,它还用于计时,自动报时和自动控制等各个领域。
然而随着时间的推移,人们不仅对于时钟精度的要求越来越高,而且对于时钟的要求也越来越多,时钟已不仅仅是一种显示时间的工具,在很多实际应用中它还需要实现更多其他的功能。诸如闹钟功能、日历显示功能、温度测量功能、电压测量功能、频率测量功能、过欠压报警功能等。钟表的数字化给人们的生产带来了极大的方便,而且大大的扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动启闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启动等,所有这些,都是以钟表数字化为基础。可以说设计多功能数字时钟的意义已不只在于数字时钟本身,更大的意义在于多功能数字时钟在许多实时控制系统中的应用。在很多实际应用中,只要多数字时钟的程序和硬件电路加以一定的修改,便可以得到实时控制的实用系统,从而应用到实际工作与生产中去。因此,研究数字时钟及扩大其应用,有着非常现实的意义。怎样让时钟更好的为我们服务?怎样让时钟更符合实际应用的需求?这就要求人们不断设计出新型时钟,不断设计出适合实际应用的多功能时
课程设计说明书 第 2 页
钟。本设计正是根据以上所述并结合日常生活中对时钟功能需求的分析,运用单片机技术,设计出一个适合日常生活需要的多功能电子时钟。
2硬件设计
2.1硬件总体框图
电子时钟电路设计总体设计框图如图1所示,控制器采用单片机AT89S51,用六位共阴LED数码管显示,输入电路由键盘组成,闹铃主要由蜂鸣器,时钟振荡电路等组成。
图1 硬件总体框图
控制部分用单片机AT89S51来实现,显示部分用共阴极八段数码管,其中时、分、秒的分段“:”,将分、秒的十位数码管倒置与时、分个位的组合而成。用AT89S51的P0.0~P0.7并接6个数码管做时、分、秒的显示。 2.2主要硬件电路的介绍 2.2.1 AT89S51的介绍
AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用[2]。
a、主要性能特点
课程设计说明书 第 3 页
1、4k Bytes Flash片内程序存储器;
2、128 bytes的随机存取数据存储器(RAM); 3、32个外部双向输入/输出(I/O)口; 4、5个中断优先级、2层中断嵌套中断; 5、6个中断源;
6、2个16位可编程定时器/计数器; 7、2个全双工串行通信口; 8、看门狗(WDT)电路; 9、片内振荡器和时钟电路; 10、与MCS-51兼容;
11、全静态工作:0Hz-33MHz; 12、三级程序存储器保密锁定; 13、可编程串行通道;
14、低功耗的闲置和掉电模式。 b、管脚说明
AT89S51管脚和封装如图2和图3所示 VCC:电源电压输入端。 GND:电源地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
课程设计说明书 第 4 页
图2 AT89S51的引脚图 图3 AT89S51的封装图
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口除了作为普通I/O口,还有第二功能:
P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0)
课程设计说明书 第 5 页
P3.3 /INT1(外部中断1)
P3.4 T0(T0定时器的外部计数输入) P3.5 T1(T1定时器的外部计数输入) P3.6 /WR(外部数据存储器的写选通) P3.7 /RD(外部数据存储器的读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器。只有读端口时才真正地把外部的数据读入到内部总线。89C51的P0、P1、P2、P3口作为输入时都是准双向口。除了P1口外P0、P2、P3口都还有其他的功能。
RST:复位输入端,高电平有效。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:地址锁存允许/编程脉冲信号端。当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:外部程序存储器的选通信号,低电平有效。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:外部程序存储器访问允许。当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:片内振荡器反相放大器和时钟发生器的输入端。 XTAL2:片内振荡器反相放大器的输出端。
课程设计说明书 第 6 页
c、 AT89S51 的新功能有:
(1)新增加很多功能,性能有了较大提升,价格基本不变,甚至比89C51更低! (2)ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。是一个强大易用的功能。
(3)最高工作频率33MHz,大家都知道89C51的极限工作频率是24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。
(4)具有双工UART串行通道;内部集成看门狗计时器,不再需要像89C51那样外界看门狗计时单元电路;双数据指示器;电源关闭标识。
(5)全新的加密算法,这使得对于89S51的解密变为不可能,程序的保密性大大加强,这样就可以有效地保护知识产权不被侵犯。
(6)兼容性方面:向下完全兼容51全部字序列产品,比如8051、89C51等等早期MCS-51兼容产品。也就是说所有教科书、网路教程上的程序,在89S51上一样可以照常运行,这就是所谓的向下兼容。 2.2.2 复位电路
单片机复位的条件是:必须使PSW或RST引脚(9)加上持续两个机器周期(即24个振荡周期)的高电平。例如,若时钟频率为12MHz,每机器周期为1us,则2us以上时间的高电平,在RST引脚出现高电平后的第二个机器周期执行复位。单片机常见的复位电路如图 4(a),(b)所示 [1] 。
图4中(a)图为上电复位电路,它是利用电容充电来实现的。在接电瞬间,RESET端的电位与VCC相同,随着充电电流的减小,RESET的电位逐渐下降。只要保证RESET为高电平的时间大于两个机器周期,使能正常复位。
图4中(b)图为按键复位电路。若要复位,只需按图4(b)中的RESET键,此时电上电式复位电路的特点是很方便的,当有电源接通给单片机时,此电路就可以自动产生复位信号。它是利用电容充电来实现的。在接电瞬间,RESET端的电位与VCC相同,在接电瞬间,RESET端的电位与VCC相同,随着充电电流的减小,RESET的电位逐渐下降。只要保证RESET为高电平的时间大于两个机器周期,使能正常复位。 源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。
课程设计说明书 第 7 页
(a)上电复位电路 (b)按键复位电路
图4 复位电路
按键复位电路的特点就是上电以后,可以随时通过按键来发出复位信号。若要复位,只需按图4(b)中的RESET键,此时电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。这对系统的可控性是很有帮助的。
以上介绍了复位电路的形式,其实对于系统而言并没有什么大的区别,但考虑到系统的简单方便,本系统采用了上电式复位方式。当调试不成功时,经过调整后,只需单片机上电复位即可进行下一次调试。所以最终选定上电复位电路为单片机部分的复位电路。
2.2.3 时钟电路
时钟是单片机的中心,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有两种方式:一种是内部时钟方式,另一种为外部时钟方式。本文用的是外部时钟方式 [6] 。
MCS-51单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反向放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定的自激振荡器。
AT89S51片内有一高增益反相放大器构成的振荡器。反相放大器的输入端为XTAL1,输出端为XTAL2,两端跨接石英晶体及两个电容形成稳定的自激振荡器。电容通常取30PF左右。振荡频率范围1.2-12MHz,如图5所示。
晶体振荡器的振荡信号从XTAL2端输出到片内的时钟发生器上。时钟发生器为二分频器,向CPU提供两时钟信号P1和P2和。时钟信号的周期称作机器周期,时间s.
课程设计说明书 第 8 页
是振荡周期的两倍。每个时钟周期有两个节拍P1和P2,CPU就以两时钟P1和P2为基本节拍指挥8051单片机各部分协调工作。
图5 振荡电路的接法
2.2.4输入电路
它是由S1、S2、S3组成的,分别是调秒、调分、调时。而SW1、SW2、SW3分别为加减控制键、暂停键、蜂鸣器控制键。SW4为省电控制键,BELL为蜂鸣器。当SW1为低电平时为减计时,当SW1悬空时为加计时。SW2接低电平时电路暂停工作。如图6所示 [9] 。
图6 输入电路
2.2.5 LED数码显示电路
发光二极管LED是一种通电后能发光的半导体器件,其导电性质与普通二极管类似。LED数码显示器就是由发光二极管组合而成的一种新型显示器件。在单片机系统中应用非常广泛。
LED数码显示器是一种由LED发光二极管组合显示字符的显示器件。它使用了8
课程设计说明书 第 9 页
个LED发光二极管,其中7个用于显示字符,1个用于显示小数点[7]。LED数码显示器有两种连接方法:
(1)共阳极接法。把发光二极管的阳极连在一起构成公共阳极,使用时公共阳极接+5V,每个发光二极管的阴极通过电阻与输入端相连。当阴极端输入低电平时,发光二极管就导通点亮,而输入高电平时则不点亮。
(2)共阴极接法。把发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接地,每个发光二极管的阴极通过电阻与输入端相连。当阳极端输入高电平时,发光二极管就导通点亮,而输入低电平时则不点亮。
由于系统要显示的内容比较简单,显示量不多,所以选用数码管既方便又经济。LED有共阴极和共阳极两种。如图 7和图8 所示。
二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压。一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g(如图9所示),另一个小数点为dp发光二极管。当在某段发光二极管施加一定的正向电压时,该段比划即亮;不加电压则暗。为了保护各段LED不被损坏,通常需外加限流电阻。
图7 共阴极 高电平驱动 图 8 共阳极 低电平驱动
课程设计说明书 第 10 页
图9 数码管结构原理图
LED显示数码管通常由硬件7段译码集成器,完成从数字到显示码的译码驱动。本文采用软件译码,以减小体积,降低成本和功耗,软件译码的另一优势还在于比硬件译码有更大的灵活性。所谓软件译码,即由单片机软件完成从数字到显示码的轮换。从LED数码管结构原理图可知,为了显示字符,要为LED显示数码管提供显示段码,组成一个“8”字形字符的7段,再加上1个小数点位,共计8端,因此提供给LED数码管的显示段码为1个字节[4]。各段码位与显示段的对应关系如表1所示:
表1 LED显示段码
当用数据口连接LED数码管a~dp引脚时,不同的连接方法,各段码位与显示段有不同的对应关系,通常数据口的D0位与a段连接,D1位与b段连接,D7位与dp段连接,如表2所示,LED数码管显示的十六制数和空白字符与P的显示段码
表2各段码位的对应关系
[2]
。
课程设计说明书 第 11 页
2.2.6 闹铃电路
P1.6口控制蜂鸣器进而控制电铃工作。当时钟当前的时间和当前所执行的时间表的时间一致时,相应的标志位为0,P1.6口输出低电平,从而合上开关,启动电铃进行打铃。打铃一定时间,标志位0,P1.6输出高电平,蜂鸣器停止工作。在蜂鸣器工作时可以打开开关,也可以控制蜂鸣器停止工作 [8] 。 2.2.7 电路原理图
总体原理图如图10所示。
图10 电路原理图
课程设计说明书 第 12 页
3各功能的实现
1、数据与代码转换
具体转换过程如下:我们先将要显示的数据装入数据指针累加器A中,再将A中的数据转换成高低两位,再放回A中,然后将通过MOVC A,@A+DPTR查表将A中的值输出。如:有一个单元存储了45这样一位数,则需转换成高低两位放在两个地址中,然后通过查表取得5, P1口送出数据, P2口送出地址。
2、计时功能的实现与中断服务程序
时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。计数器T0打开后,进入计时,满10毫秒后,重装定时。中断一次,满一秒后秒进位,满60秒后即为1分钟,分钟单元进位,60分到了后,时单元进位,24小时满后,天单元进位。这样然后根据进率,得到年、月、日、时、分、秒存储单元的值,并经译码后,通过扫描程序送LED中一位一位显示出来,实现时钟计时功能。累加是用指令INC来实现的。
3、定时,音乐播放控制功能与比较指令
系统的另一功能就是实现对执行设备的定时开关控制,其主要控制思想是这样的:先将执行设备开启的时间和关闭时间置入RAM某一单元,在计时主程序当中执行几条比较指令,如果当前计时时间与执行设备的设定开启时间相等,就执行一条STEB 12H指令,将对应的那路置为高电位,开启,定时时间到,调用音乐播放子程序;
4、整点报时控制功能
当时间的秒开始进入到59分55秒时,开蜂鸣器,56秒时关蜂鸣器,57秒开蜂鸣器,58秒关蜂鸣器,59秒开蜂鸣器,60秒关掉。这样实现了整点报时功能。如果有播放音乐则不进行整点报时,这点也在程序中加以控制,以免产生混乱。
5、秒表功能的实现
秒表是通过定时100毫秒的时间。将0.1秒位通过CJNE 的不等转移的比较指令和10比较,如果不等,则0.1秒位继续每100毫秒加1;如果等于10,0.1秒位清0,秒位则加1。秒位通过CJNE 的不等转移的比较指令和60比较,如果不等,则秒位继续每1毫秒加1;如果等于60,秒位清0,分位加1。分位则也是通过CJNE 的不等转移的比较指令和60比较,如果不等,则分位继续每60秒加1;如果等于60,分位清0,秒位清0,0.1秒位清0,停止计数。
课程设计说明书 第 13 页
4软件设计
4.1程序流程图
图11主程序流程图
课程设计说明书 第 14 页
图12定时器0流程图
课程设计说明书 第 15 页
图13 外部中断0流程图
课程设计说明书 第 16 页
图15 外部中断1流程图
4.2程序
ORG 0000H
LJMP MAIN ;跳到主程序 ORG 0003H
LJMP INT0 ;跳到外部中断0 ORG 000BH
LJMP T0 ;跳到定时器0 ORG 0013H
课程设计说明书 第 17 页
LJMP INT1 ;跳到外部中断1 ORG 001BH
LJMP T1 ;跳到定时器1 ORG 0100H
MAIN: ;主函数 CLR P3.0 ;关蜂鸣器
ACALL INITIAL ;调用初始化函数 DONE:
JNB 00H,DONE1 ;是否显示时间 MOV R0,#73H ACALL CONVERT AJMP TEST DONE1:
JNB 01H,DONE2 MOV R0,#70H ACALL CONVERT AJMP TEST DONE2:
JNB 02H,DONE3 MOV R0,#63H ACALL CONVERT AJMP TEST DONE3:
MOV R0,#60H ACALL CONVERT LJMP DISP TEST: JNB 18H,TEST10 JNB P3.5,TEST7 AJMP TEST11
TEST10: JB 16H,TEST8 JB P3.5,TEST7 SETB 16H AJMP TEST7
TEST8: JB P3.5,TEST9
SETB 18H AJMP TEST7
TEST11: CLR 18H CPL 17H
MOV C,17H MOV P0.0,C CLR 16H
CLR 12H CLR TR1 CLR P3.0 CLR 13H ;显示时间
;把时间存储器转化到显示存储器 ;是否处于调整状态 ;是否显示日期 ;显示日期 ;转化
;是否处于调整状态 ;是否显示定时时间 ;显示定时时间 ;转化 ; ;显示秒表 ;转化
;跳到显示函数
;判断是否处于调整状态 ;是否按键已经按下 ;按键是否已经释放 ;判断是否有按键按下
;定时结束 ;关定时器1
;关蜂鸣器 ;
课程设计说明书 第 18 页
MOV 59H,#00H ; MOV 58H,#01H AJMP TEST7 TEST9:CLR 16H
TEST7:JNB 12H,TEST6 JB P3.4,TEST6
CLR 12H ;定时结束 CLR TR1 ;关定时器1 CLR P3.0 ;关蜂鸣器 CLR 13H ; MOV 59H,#00H ; MOV 58H,#01H ;
TEST6:JNB 01H,TEST5 ;是否处于日期状态 JB P3.4,TEST4 ;案键3是否按下 MOV 20H,#01H ; 返回时间状态 MOV 21H,#00H LJMP DISP
TEST5:JNB 02H,TEST4 ;是否处于定时时间状态 JB P3.4,TEST4 ;按键3是否按下
MOV 20H,#01H ;返回时间状态
MOV 21H,#00H LJMP DISP
TEST4: JNB 15H,DO ;闪烁标志是否有效 LJMP DISP ;无效则进入显示函数
DO: MOV A,21H ;
CJNE A,#00H,TEST2 ;是否在调整状态
LJMP DISP ;不处于调整状态则进入显示函数 TEST2: JB P3.4,TEST3
MOV 20H,#01H
MOV 21H,#00H LJMP DISP
TEST3:JNB 08H,DONE4 ;是否秒位置处于调整状态 MOV 78H,#11 ;不显示 MOV 79H,#11 ;不显示
LJMP DISP ;进入显示函数
DONE4:JNB 09H,DONE5 ;是否分位置处于调整状态 MOV 7BH,#11 ;不显示 MOV 7CH,#11 ;不显示
LJMP DISP ;进入显示函数 DONE5:MOV 7EH,#11 ;时位置不显示 MOV 7FH,#11 ;时位置不显示 LJMP DISP ;进入主函数
CONVERT: ;转化成数码管显示所对应的存储器
MOV A,@R0 ;把R0存储的地址所对应的存储器的内容转化到
秒位置的存储器
MOV B,#10 ;
课程设计说明书 第 19 页
DIV AB ;
MOV 79H,A ;高位存储? MOV 78H,B ;地位存储 INC R0 ;地址加一 MOV A,@R0 ;取数据 MOV B,#10 ; DIV AB ;
MOV 7CH,A ;高位存储 MOV 7BH,B ;低位存储 INC R0 ;地址加一 MOV A,@R0 ;取数据 MOV B,#10 ; DIV AB ;
MOV 7FH,A ;高位存储 MOV 7EH,B ;低位存储 RET INITIAL:
MOV 7FH,#1 ;数码管显示12:00:00 MOV 7EH,#2 MOV 7DH,#10 MOV 7CH,#0 MOV 7BH,#0 MOV 7AH,#10 MOV 79H,#0 MOV 78H,#0
MOV 75H,#12 ;初始化时间 12:00:00 MOV 74H,#0 MOV 73H,#0
MOV 72H,#08 ;初始化日期 08.3.20 MOV 71H,#3 MOV 70H,#20
MOV 65H,#12 ;初始化定时时间 12:00:20 MOV 64H,#0 MOV 63H,#20
MOV 62H,#00 ;初始化秒表00:00.00 MOV 61H,#00 MOV 60H,#00
MOV 50H,#100 ;1s定时100*10ms MOV 51H,#20 ;200ms闪烁计时 MOV 52H,#10 ;秒表计数器
MOV 53H,#5 ;每放一个音时延时5ms MOV 58H,#1 ;存放音乐表的指针
MOV TH0,#0D8H ;T0定义为10ms中断 MOV TL0,#0F0H
MOV TMOD,#11H ;定时器工作在方式1
课程设计说明书 第 20 页
MOV IP,#2 ;定时器0高优先级 MOV IE,#8FH ;开中断
SETB IT0 ;外部中断为边缘触发 SETB IT1 ;外部中断为边缘触发 SETB TR0 ;开定时器0 MOV 20H,#0 ;
SETB 00H ;设置成处在时间显示状态 00H为时间显示标志,01h为日期显示标志,02h为定时时间显示标志,03h秒表显示标志 ;08h为秒位置选择标志,09h为分位置选者标志,0ah为时位置选择标志 ;10h为秒表开始或暂停标志,11h为,12h为是否正在放音乐标志,13h为是否延时标志,15h为闪烁标志,16h,17h为判断定时按键标志
MOV 21H,#0 ;位存储器初始化 MOV 22H,#0 ;
SETB 17H ; 开定时器
SETB P0.0 ;开定时器指示灯 RET
DISP: ;显示函数
MOV R0,#78H ;显示第一 个位置 MOV DPTR,#TAB ;
MOV R7,#0FEH ;第一位有效 NEXT: MOV A,@R0 ;
MOVC A,@A+DPTR ;把十进制数转化成数码管对应的数据 MOV P1,A ;数据送出端口 MOV P2,R7 ;地址送出端口 ACALL DEL1MS ;延时一毫秒 MOV A,R7 ;
RL A ;地址位左移到下一位 MOV R7,A ;
INC R0 ;数据地址加1
CJNE R0,#80H,NEXT ;是否已经显示完
LJMP DONE
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,00H
;0 1 2 3 4 5 6 7 8 9 - 空
DEL1MS: ;延时1毫秒函数 MOV R6,#2
DEL1:MOV R5,#250 DJNZ R5,$ DJNZ R6,DEL1
RET
T0: ;定时器0函数 PUSH DPH PUSH DPL PUSH PSW PUSH ACC
MOV TH0,#0D8H ;定时时间设置为10毫秒
课程设计说明书 第 21 页
MOV TL0,#0F0H
DJNZ 50H,MIAO1 ;是否已经延时1秒 AJMP NEXT5 ;
MIAO1:LJMP MIAOBIAO ;一秒还没到,进入秒表 NEXT5:MOV 50H,#100 ; 重新循环100次,即一秒 INC 73H ;秒加一 MOV A,73H ;
CJNE A,#60,MIAO2 ;是否已经加到60 AJMP NEXT6 ;
MIAO2:LJMP MIAOBIAO NEXT6:MOV 73H,#0 INC 74H MOV A,74H CJNE A,#60,MIAO3 AJMP NEXT7 MIAO3:LJMP MIAOBIAO NEXT7:MOV 74H,#0 INC 75H MOV A,75H CJNE A,#24,MIAO4 AJMP NEXT8 MIAO4:LJMP MIAOBIAO NEXT8:MOV 75H,#0 INC 70H MOV A,70H CJNE A,#29,MONTH MOV A,71H CJNE A,#2,MIAO5 AJMP NEXT9 MIAO5:LJMP MIAOBIAO NEXT9:MOV 71H,#3 MOV 70H,#1 LJMP MIAOBIAO MONTH: MOV A,70H CJNE A,#31,MONTH1 MOV A,71H CJNE A,#4,MONTH6 MOV 71H,#5 MOV 70H,#1 AJMP MIAOBIAO MONTH6:MOV A,71H CJNE A,#6,MONTH9 MOV 71H,#7 MOV 70H,#1 AJMP MIAOBIAO MONTH9: MOV A,71H ;没到60,进入秒表 ;已经加到60,秒清0 ;分加一 ;
;分是否已经加到60 ;
;没到60,进入秒表 ;已经到60,分清0 ;时加1 ;
;是否已加到24 ;
;没到24则进入秒表 ;时清0 ;日加1 ;
;是否是29 ;
;是否是2月 ;
;不是2月,进入秒表 ;月份为3
;日为1 ; ;
;是否是日是31 ;
;是否是4月 ;;月份为5 ;日为1 ; ;
;是否是6月
;月份为7 ;日为1 ; ;
课程设计说明书 第 22 页
CJNE A,#9,MONTH11 ;是否是 9月 MOV 71H,#10 ;月分为10 MOV 70H,#1 ;;日为1 AJMP MIAOBIAO ;; MONTH11:MOV A,71H ;
CJNE A,#11,MIAOBIAO ;是否是11月 MOV 71H,#12 ;月份为12 MOV 70H,#1 ; 日为1 AJMP MIAOBIAO ; MONTH1: MOV A,70H CJNE A,#32,MIAOBIAO MOV A,71H CJNE A,#12,MONTH0 INC 73H MOV 70H,#1 MOV 71H,#1 AJMP MIAOBIAO MONTH0:INC 71H MOV 70H,#1 AJMP MIAOBIAO MIAOBIAO: JNB 03H,DINGSHI JNB 10H,DINGSHI DJNZ 52H,DINGSHI MOV 52H,#10 JNB P3.4,CLEAR INC 60H MOV A,60H CJNE A,#10,DINGSHI MOV 60H,#0 INC 61H MOV A,61H CJNE A,#60,DINGSHI MOV 61H,#0 INC 62H MOV A,62H CJNE A,#60,DINGSHI MOV 62H,#0 AJMP DINGSHI CLEAR:MOV 60H,#0 MOV 61H,#0 MOV 62H,#0 CLR 10H AJMP DINGSHI DINGSHI: ;
;是否日是32 ;
;是否是 12月 ;年加1 ;月为1 ;日为1 ;
;不是12月,月加1
;日为 ;
;秒表函数
;是否进入计时 ;是否开始计时
;是否100毫秒已到 ;
;按键按下时清0 ;0.1秒位加1 ;
;是否已加到10 ;0.1秒位清0 ;秒位加1 ;
;秒是否已经加到60 ;秒位清0 ;分加1 ;
;是否是60分 ;分为清0 ; ;清0 ; ;
;停止计数 ;
;定时函数
课程设计说明书 第 23 页
JB 17H,YSTART ;定时器有效 LJMP BAOSHI ;定时器无效
YSTART:JB 12H,START ;是否已经在放音乐 MOV A,63H ;
CJNE A,73H,BAO1 ;是否时已到 AJMP NEXT10 ; BAO1:LJMP BAOSHI ; NEXT10:MOV A,64H ;
CJNE A,74H,BAO2 ;是否分已到 AJMP NEXT11 BAO2:LJMP BAOSHI NEXT11:MOV A,65H CJNE A,75H,BAO3 AJMP NEXT12 BAO3:LJMP BAOSHI NEXT12:SETB 12H MOV 55H,#10H MOV 57H,#0FBH MOV 56H,#8BH SETB TR1 START:DJNZ 55H,BAO4 AJMP NEXT13 BAO4: LJMP BAOSHI NEXT13: CPL 13H JB 13H,DELAY50MS MOV A,58H INC A MOV 58H,A GETNEXT:MOV DPTR,#DAT MOVC A,@A+DPTR CJNE A,#00H,DSQ1 CLR 12H CLR TR1 CLR P3.0 CLR 13H MOV 59H,#00H MOV 58H,#01H AJMP BAOSHI DSQ1:CJNE A,#01H,DSQ2 MOV A,55H INC A INC A MOV 55H,A AJMP GETNEXT DSQ2:CJNE A,#0FFH,DSQ3 CLR TR1 ; ; ;
;是否秒已到 ; ;
;设置定时已到 ;第一个节拍
;第一个音调高位 ;第一个音调低位 ;启动定时器1 ;节拍是否已结束 ; ; ;
;进入延时50毫秒 ;
;表地址加1 ; ;
;取音调 ;是否已经结束 ;定时结束 ;关定时器1 ;关蜂鸣器 ; ; ; ; ;
; ; ; ; ;
;是否播放空音调
;关定时器1
课程设计说明书 第 24 页
CLR P3.0 ;关蜂鸣器 AJMP DSQ4 ;
DSQ3:MOV B,#20 ;把音调转化成定时器1所对应定时存储器
MUL AB ; MOV 59H,A ; MOV A,#0FFH ; SUBB A,59H ; MOV 56H,A ; MOV 59H,B MOV A,#0FFH SUBB A,59H MOV 57H,A SETB TR1 DSQ4:MOV A,58H INC A MOV 58H,A MOV DPTR,#DAT MOVC A,@A+DPTR MOV 55H,A JB P3.4,BAOSHI CLR 12H CLR TR1 CLR P3.0 CLR 13H MOV 59H,#00H MOV 58H,#01H AJMP BAOSHI DELAY50MS:CLR TR1 CLR P3.0 MOV 55H,#5 BAOSHI: JB 12H,FLASHCTRL MOV A,74H CJNE A,#0,BAO MOV A,73H CJNE A,#0,FLASHCTRL ;JNB TR1,FLASHCTRL CLR TR1 CLR P3.0 AJMP FLASHCTRL BAO:MOV A,74H CJNE A,#59,FLASHCTRL MOV A,73H CJNE A,#55,EQU56S JB TR1,FLASHCTRL ; ; ; ; ; ;
;表地址加1 ; ;
;取节拍进行延时 ;
;是否停止放 ;清标志位 ;关定时器1 ;关蜂鸣器 ; ; ; ;
;延时50毫秒 ;关蜂鸣器 ;
;整点报时函数
;如果正在定时放音乐则不整点报时 ;
;是否是0分 ;
;是否是0秒
;是否已经关定时器1 ;关定时器0 ;关蜂鸣器 ; ;
;是否是59分 ;
;是否是55秒
;是否已经在报时
课程设计说明书 第 25 页
MOV 56H,#8BH ;启动定时器1报时 MOV 57H,#0FBH ;; SETB TR1 ; AJMP FLASHCTRL ;
EQU56S: CJNE A,#56,EQU57S ;是否是56秒
JNB TR1,FLASHCTRL ;是否已经关定时器1 CLR TR1 ;关定时器1 CLR P3.0 ;关蜂鸣器 AJMP FLASHCTRL ;
EQU57S: CJNE A,#57,EQU58S JB TR1,FLASHCTRL MOV 56H,#8BH MOV 57H,#0FBH SETB TR1 AJMP FLASHCTRL EQU58S: CJNE A,#58,EQU59S JNB TR1,FLASHCTRL CLR TR1 CLR P3.0 AJMP FLASHCTRL EQU59S:CJNE A,#59,FLASHCTRL JB TR1,FLASHCTRL MOV 56H,#8BH MOV 57H,#0FEH SETB TR1 AJMP FLASHCTRL FLASHCTRL: DJNZ 51H,T0OUT MOV 51H,#20 CPL 15H AJMP T0OUT T0OUT:POP ACC POP PSW POP DPL POP DPH RETI
T1: PUSH ACC PUSH PSW MOV A,56H ORL TL1,A MOV A,57H MOV TH1,A CPL P3.0 POP PSW POP ACC RETI
;是否是57秒
;是否正在报时 ;启动定时器1报时 ; ; ;
;是否是58秒
;是否已经关定时器1 ;关定时器1 ;关蜂鸣器 ;
;是否是59秒
;是否开定时器1 ; ; ; ;
;闪烁标志控制函数
;是否已经延时200豪秒 ;
;标志位取反
;
; ; ; ; ;定时器1,产生音调所对应频率的方波
; ; ;
;存入音调所对应的定时时间 ; ;
;蜂鸣器位取反 课程设计说明书 第 26 页
;外部中断0
INT0:
PUSH PSW PUSH ACC
MOV 6FH,#30 ;延时15毫秒 DEL2:MOV 6EH,#250 ; DJNZ 6EH,$ ; DJNZ 6FH,DEL2 ;
JB P3.2,INT5 ;是否已出低电平 AJMP NEXT20 INT5:LJMP INT0OUT NEXT20:MOV A,21H CJNE A,#0,TIAO MOV A,20H RL A 状态切换
MOV 20H,A JNB 04H,INT6 AJMP NEXT21 INT6:LJMP INT0OUT NEXT21:MOV 20H,#01H MOV 60H,#0 MOV 61H,#0 MOV 62H,#0 CLR 10H LJMP INT0OUT TIAO:JNB 00H,DAY JNB 08H,MIN MOV 73H,#0 LJMP INT0OUT MIN:JNB 09H,HOUR INC 74H MOV A,74H CJNE A,#60,INT7 AJMP NEXT22 INT7:LJMP INT0OUT NEXT22:MOV 74H,#0 LJMP INT0OUT HOUR:INC 75H MOV A,75H CJNE A,#24,INT8 AJMP NEXT23 INT8:LJMP INT0OUT NEXT23:MOV 75H,#0 LJMP INT0OUT DAY:JNB 01H,TIMER ; ; ;
;是否出在调整状态 ;
;时间、日期、定时时间、秒表间的
;
;秒表状态返回时间状态 ; ; ;
;回到时间状态,秒表清0 ; ;
;秒表停止计时 ;
;是否出在时间状态 ;是否调整秒 ;秒清0 ;
;是否调整分 ;分加1 ;
;分是否60 ; ;
;分清0 ;
;时加1 ;
;时是否24 ; ;
;时清0 ;
;是否处在日期状态
课程设计说明书 第 27 页
JNB 08H,MON ;是否调整日 INC 70H ;日加1 MOV A,70H ;
CJNE A,#29,MON2 ;是否29 MOV A,71H ;
CJNE A,#2,INT0OUT ;是否2月 MOV 70H,#1 ;调为1日 AJMP INT0OUT ; MON2: MOV A,70H ;
CJNE A,#31,MON1 MOV A,71H CJNE A,#4,MON6 MOV 70H,#1 MON6:MOV A,71H CJNE A,#6,MON9 MOV 70H,#1 MON9:MOV A,71H CJNE A,#9,MON11 MOV 70H,#1 MON11:MOV A,71H CJNE A,#11,INT0OUT MOV 70H,#1 AJMP INT0OUT MON1: MOV A,70H CJNE A,#32,INT0OUT MOV 70H,#1 AJMP INT0OUT MON:JNB 09H,YEAR INC 71H MOV A,71H CJNE A,#13,INT0OUT MOV 71H,#1 AJMP INT0OUT YEAR:INC 72H MOV A,72H CJNE A,#99,INT0OUT MOV 72H,#0 AJMP INT0OUT TIMER:JNB 08H,TIMERMIN INC 63H MOV A,63H CJNE A,#60,INT0OUT MOV 63H,#0 AJMP INT0OUT TIMERMIN:JNB 09H,TIMERHOUR INC 64H ;是否31 ;
;是否四月 ;调为1 ;
; 是否6月 ; ;
;是否9月 ; ;
;是否11月 ;
; ;
;日是否32 ;调为1 ;
;是否调整月
;月加1 ;
;是否为13 ;调为1 ; ; ;
;年是否99 ;清0 ;
;是否调整定时时间秒 ;秒加1 ;
;是否是60 ;清0 ;
; 是否调整定时时间分
;分加1
课程设计说明书 第 28 页
MOV A,64H ;
CJNE A,#60,INT0OUT ;是否是60 MOV 64H,#0 ;分清0 AJMP INT0OUT ; TIMERHOUR:INC 65H ;时加1
MOV A,65H ;
CJNE A,#24,INT0OUT ;是否是24 MOV 65H,#0 ;时清0 AJMP INT0OUT ; INT0OUT:POP ACC POP PSW
RETI
INT1: ;外部中断1
PUSH PSW PUSH ACC
MOV 6FH,#30 ;延时15毫秒
DEL3:MOV 6EH,#250 ; DJNZ 6EH,$ ; DJNZ 6FH,DEL3 ;
JB P3.3,INT0OUT ;是否稳定处于底电平 JNB 03H,TIAO1 ;是否处于秒表状态 CPL 10H ;秒表 ;开始或暂停 AJMP INT1OUT ; TIAO1: MOV A,21H ;
CJNE A,#0,TIAO2 ;是否处于调整状态 SETB 08H ; AJMP INT1OUT ; TIAO2:MOV A,21H ; RL A ; MOV 21H,A ; JNB 0BH,INT1OUT ; MOV 21H,#0 ; MOV A,20H ;
RL A ;选择其他调整位 MOV 20H,A ; AJMP INT1OUT ; INT1OUT:POP ACC POP PSW RETI
DAT:DB 39H,20H,26H,20H,26H,20H,26H,20H,26H,60H DB 2BH,20H,30H,30H,2BH,10H,30H,20H,33H,20H DB 39H,80H,1CH,20H,1CH,20H,1CH,20H,1CH,20H DB 1CH,60H,20H,20H,26H,20H,20H,20H,20H,20H DB 48H,20H,26H,80H,26H,20H,1CH,20H,1CH,20H DB 20H,20H,26H,60H,2BH,20H,30H,30H,2BH,10H DB 30H,20H,33H,20H,39H,40H,4CH,40H,4CH,20H DB 30H,20H,30H,20H,33H,20H,39H,60H,26H,20H DB 2BH,30H,30H,10H,33H,20H,40H,20H,39H,80H
课程设计说明书 第 29 页
DB 4CH,20H,30H,20H,30H,20H,33H,20H,39H,60H DB 26H,20H,2BH,20H,2BH,20H,40H,20H,33H,20H DB 39H,80H,00H,00H,00H
课程设计说明书 第 30 页
总 结
电子钟是人们日常生活中常用的计时工具,时间对人们来说总是那么宝贵,工作的忙碌和复杂性容易使人忘记当前的时间,忘记了要做的事情,一旦是重要的事情,一时的耽误可能酿成大祸。电子钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、码头、剧院、广场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来很大的方便。由于数字集成电路技术的发展采用了先进的石英技术,使电子钟具有走时准确、性能稳定、携带方便而数字式电子时钟又有体积小、重量轻、走时准确、结构简单、耗电量少等优点而在生活中被广泛应用,它还用于计时,自动报时和自动控制等各个领域。因此设计了本文介绍的数字电子时钟。此次设计电子数字时钟更进一步了解电子数字钟的原理,从而学会制作电子时钟。通过它可以了解中小规模集成电路的作用及实用方法,可以更进一步学习与掌握单片机原理及应用。
课程设计说明书 第 31 页
致 谢
这次课程设计对与我来说是学习本专业再深一步了解,从设计之初的无从下手到一步一步的有条不紊的完成,在这期间遇到了诸多的问题。但在乐丽琴老师的细心指导和耐心教导下,通过翻阅课本和查阅一些资料,最终这些问题与困难都得到了解决。使我可以按时完成课程设计并使自己的专业知识有更深刻的理解,综合能力得到了相应的提高。在做课程设计过程中,老师在百忙中对我的课程设计进行了指导。感谢老师对我的课程设计不厌其烦的细心指点。从框架的完善,思路的理清和思绪的有条不紊到内容的扩充;从本文的用语到格式的规范;老师都严格要求,力求完美。而且我还从老师那里学到了严谨、务实、认真的工作态度和极强的敬业精神。真的很感谢老师的细心指导!
课程设计说明书 第 32 页
参考文献
[1]肖洪兵. 跟我学用单片机[M]. 北京:北京航空航天大学出版社,2002.8.
[2]赵晓安. MCS-51单片机原理及应用[M]. 天津:天津大学出版社,2001.3. [3]何立民. 单片机高级教程[M].第1版.北京:北京航空航天大学出版社,2001. [4]陈伟人.单片微型计算机原理与应用[M].北京:清华大学出版社, 2006.5. [5]刘雪雪,赵良法.单片机原理及实践[M].北京:高等教育出版社,2006. [6]张鑫. 单片机原理及应用[M].北京:电子工业出版社,2006.
[7]胡汉才.单片机原理及其接口技术(第二版)[M]. 北京:清华大学出版社,2004 [8]曹天汉. 单片机原理及应用[M].北京:电子工业出版社,2006.
[9]李建忠.单片机原理及应用(第二版)[M].西安:西安电子科技大学出版社,2008.
因篇幅问题不能全部显示,请点此查看更多更全内容