1、60秒旋转电子钟60秒旋转电子钟任 务 书一、 任务设计一款基于AT89C2051单片机的电子钟。二、设计要求1、 基本要求 用4只LED数码管输出显示时和分。 可通过按键设置闹钟功能,且停闹无须手工操作。 可通过按键设置分校时。 月计时误差小于45秒。 写出详细的设计报告。 给出全部电路和源程序。(7)给出proteus仿真电路。2、 发挥部分 用60只LED发光管旋转显示,模拟“秒针”的行走。 模拟“秒针”行走的“嘀哒”声。(3) 增加停(掉)电保护功能。(4) 增加日自动校准功能,使得该电子钟“永无误差”。(5) 增加红黄绿三色变色装饰。(6) 可通过按键设置一天两闹(比如早晨、中午各一
2、次)。一引言电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而电子钟得到广泛应用。随着人们生活环境的不断改善和美化,在许多场合可以看到数字电子钟。1 要完成的任务要求该电路具有显示日期、时间、的基本功能,还可以通过按键实现对它们的调整,并且能够显示星期。2 系统主要功能周边60只发光管顺时旋转来显示秒,中间四只LED数码管用于显示时间,中下方的七只LED灯顺时旋转,供装饰用。其主要功能有:整点报时;四只LED数码管显示当前时分;每隔一秒钟周边的60只LED发光管旋转一格,装饰用的LED每隔一秒旋转一次。当发生停电事件时,
3、由后备电池供电,系统进入低功耗状态,所有显示部件停止显示,这样即延长了电池的寿命,同时又保证了CPU继续计数,不至于因停电而时钟停止运行。当恢复供电后,系统自动恢复工作状态,不影响计时。二 . 系统的硬件设计1 系统的硬件构成及功能电脑钟的原理框图如图2所示。它由以下几个部件组成:单片机89C2051、电源、时分显示部件、60秒旋转译码驱动电路。时分显示采用动态扫描,以降低对单片机端口数的要求,同时也降低系统的功耗。时分显示模块、60秒旋转译码驱动电路以及显示驱动都通过89C2051的I/O口控制。电源部分:电源部分有二部分组成。一部分是由220V的市电通过变压、整流稳压来得到+5V电压,维持
4、系统的正常工作;另一部分是由3V的电池供电,以保证停电时正常走时。正常情况下电池是不提供电能的,以保证电池的寿命。具体电路参见“新颖的60秒旋转电子钟参考电路原理图”。图2 电子钟系统原理框图2 AT89C2051单片机及其引脚说明AT89C2051单片机是51系列单片机的一个成员,是8051单片机的简化版。内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与Intel MCS-51系列单片机的指令和输出管脚相兼容。由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部
5、的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。AT89C2051是一个有20个引脚的芯片,引脚配置如图3所示。与8051相比,AT89C2051减少了两个对外端口(即P0、P2口),使它最大可能地减少了对外引脚下,因而芯片尺寸有所减小。AT89C2051芯片的20个引脚功能为:图3 AT89C2051引脚配置VCC 电源电压。GND 接地。RST 复位输入。当RST变为高电平并保持2个机器周期时,所有I/O引脚复位至“1”。XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2 来自反向振荡放大器的输出。P1口 8位双向I/O口。引脚P1.2P1.7
6、提供内部上拉,当作为输入并被外部下拉为低电平时,它们将输出电流,这是因内部上拉的缘故。P1.0和P1.1需要外部上拉,可用作片内精确模拟比较器的正向输入(AIN0)和反向输入(AIN1),P1口输出缓冲器能接收20mA电流,并能直接驱动LED显示器;P1口引脚写入“1” 后,可用作输入。在闪速编程与编程校验期间,P1口也可接收编码数据。P3口 引脚P3.0P3.5与P3.7为7个带内部上拉的双向I/0引脚。P3.6在内部已与片内比较器输出相连,不能作为通用I/O引脚访问。P3口的输出缓冲器能接收20mA的灌电流;P3口写入“1”后,内部上拉,可用输入。P3口也可用作特殊功能口,其功能见表1。P
7、3口同时也可为闪速存储器编程和编程校验接收控制信号。表1 P3口特殊功能三 . 软件系统的设计1 系统的软件构成及功能本系统的软件系统主要可分为主程序和定时器中断程序两大模块。在程序过程中,加入了抗干扰措施。下面对部分模块作介绍。系统主程序流程图2 序设计思想主程序的功能是完成系统的初始化,在显示时间之前,对系统是否停电状态进行检测;若停电,将系统进入低功耗状态,用电池电压维持单片机计时工作,但此时不显示时间,用节省用电;若不停电,则将时分发送显示。3 中断程序设计中断程序完成时间计数,时间调整,误差消除等功能。中断采用AT89C2051内部T0中断实现,定时时间为125ms,当时间到达125
8、ms8,即1分钟时,分计数缓冲器MINBUFFER增加1,到达1小时,则时计数缓冲器HOURBUFFER增加1,并将分、时的个位、十位放入显示缓冲器。当分计数缓冲器和时计数缓冲器分别到达60min、24h时,则对它们清零,以便从新计数。在中断设计中,还通过软件实现了累计误差消除功能,使整个系统时间的精确度得到保证。中断图4 应用说明第一,通过USB接口给单片机上电,打开单片机开关,首先观察单片机电源指示灯是否亮。按照如上步骤,我们的电子钟电源灯是亮的,这说明系统能够正常供电。第二,显示电路的调试检查它与单片机的连线:设计是RS接的P07口,要保证它为高电平。EN接口接单片机的P05端,也要保证
9、它为高电平;读写信号低电平有效;编写一段显示程序,烧录到单片机看是否能正常显示。很遗憾的是我们的单片机打开开关后还是只有电源指示灯亮,后来我们发现是我们代码编写错误。60秒旋转电子钟部分参考程序清单ALARMHBUFF2 EQU 77HALARMHBUFF1 EQU 76HALARMMBUFF2 EQU 75HALARMMBUFF1 EQU 74HHBUFF2 EQU 73HHBUFF1 EQU 72HMBUFF2 EQU 71HMBUFF1 EQU 70HDP EQU 6FHNUM EQU 78HSBUFF EQU 79HMBUFF EQU 7AHHBUFF EQU 7BHALARMMBUF
10、F EQU 7CHALARMHBUFF EQU 7DHNUMT1 EQU 67HNUMT2 EQU 68HKEYNUMT1 EQU 69HKEYNUMT2 EQU 6AHSTOREKEYNUMT2 EQU 6BHSTOREKEYNUMT1 EQU 6CHORG 0000HAJMP STARTORG 000BHMOV TH0 , #0BH MOV TL0 , R4AJMP INTERT0ORG 001BHAJMP INTERT1ORG 0040HSTART: MOV NUMT1 , #00HMOV NUMT2 , #00HMOV KEYNUMT1 , #00H MOV KEYNUMT2 , #0
11、0HMOV STOREKEYNUMT2 , #00H MOV STOREKEYNUMT1 , #00H MOV NUM , #8MOV DPTR , #TABMOV ALARMHBUFF , #18H MOV ALARMMBUFF , #55H MOV ALARMHBUFF2, #01H MOV ALARMHBUFF1, #08H MOV ALARMMBUFF2 , #05H MOV ALARMMBUFF1 , #05HMOV HBUFF2, #01H MOV HBUFF1, #08HMOV MBUFF2 , #05HMOV MBUFF1 , #03HMOV HBUFF , #18HMOV M
12、BUFF , #53HMOV SBUFF , #3CH MOV TCON , #05H MOV TMOD , #11H MOV TH0 , #0BH MOV TL0 , #0DBHMOV TH1 , #3CH MOV TL1 , #0B0HMOV IE , #82H SETB PT0 SETB TR0 SETB P3.2SETB P3.3START1: MOV A , HBUFFSUBB A , #7HJC START2MOV A , HBUFFSUBB A , #21HJNC START2ACALL DISPLAYACALL ZDBSAJMP START3START2: ACALL NIGH
13、TDISPLAYSTART3: MOV A ,ALARMHBUFF CJNE A , HBUFF , START4MOV A , ALARMMBUFFCJNE A , MBUFF ,START4MOV C, DPMOV P3.2, CMOV A , SBUFFJNZ START1SETB P3.2START4: JNB P3.2,ADJUSTTIME1JNB P3.3,ADJUSTTIME2AJMP START1AJMP START1;*;*int0中断子程序*;*ADJUSTTIME1:NOPMOV KEYNUMT1 ,#00HMOV TH1 , #3CH MOV TL1 , #0B0HSE
14、TB ET1 SETB PT1 SETB TR1 MOV STOREKEYNUMT1 , KEYNUMT1 TIME1_1:ACALL DISPLAYMOV A , KEYNUMT1CJNE A , STOREKEYNUMT1,TIME1_2 AJMP TIME1_3TIME1_2:MOV STOREKEYNUMT1 , KEYNUMT1 ACALL ADDBUFF0 TIME1_3:JNB P3.2,TIME1_1CLR ET1CLR PT1CLR TR1AJMP START1;*;*时间增1分*;*ADDBUFF0:MOV A , MBUFFADD A , #1DA AMOV MBUFF
15、, AANL A , #0FHMOV MBUFF1 , AMOV A , MBUFFSWAP AANL A , #0FHMOV MBUFF2 , AMOV A , MBUFFCJNE A , #60H , ADDBUFF1MOV MBUFF , #00HMOV MBUFF2 , #00HMOV MBUFF1 , #00HMOV A , HBUFF ADD A , #1DA AMOV HBUFF , AANL A , #0FHMOV HBUFF1 , AMOV A , HBUFFSWAP AANL A , #0FHMOV HBUFF2 , AMOV A , HBUFFCJNE A , #24H
16、, ADDBUFF1 MOV HBUFF , #00HMOV HBUFF2 , #00HMOV HBUFF1 , #00HADDBUFF1:RET;*;*int1中断子程序*;*ADJUSTTIME2: NOPACALL DL100MSMOV C , P3.3JC TIME2_6MOV KEYNUMT2 , #00HMOV STOREKEYNUMT2 , KEYNUMT2TIME2_1:NOPMOV TH1 , #3CHMOV TL1 , #0B0HSETB ET1SETB PT1SETB TR1TIME2_2:ACALL ALARMDISPLAYMOV A , KEYNUMT2CJNE A
17、, STOREKEYNUMT2 ,TIME2_3AJMP TIME2_4TIME2_3: MOV STOREKEYNUMT2 , KEYNUMT2MOV A , ALARMMBUFF ADD A , #1DA AMOV ALARMMBUFF , AANL A , #0FHMOV ALARMMBUFF1 , AMOV A , ALARMMBUFFSWAP AANL A , #0FHMOV ALARMMBUFF2 , AMOV A , ALARMMBUFFCJNE A , #60H , TIME2_4MOV ALARMMBUFF , #00HMOV ALARMMBUFF2 , #00HMOV AL
18、ARMMBUFF1 , #00HMOV A , ALARMHBUFF ADD A , #1DA AMOV ALARMHBUFF , AANL A , #0FHMOV ALARMHBUFF1 , AMOV A , ALARMHBUFFSWAP AANL A , #0FHMOV ALARMHBUFF2 , AMOV A , ALARMHBUFFCJNE A , #24H , TIME2_4MOV ALARMHBUFF , #00HMOV ALARMHBUFF2 , #00HMOV ALARMHBUFF1 , #00HTIME2_4:NOPJNB P3.3,TIME2_2 CLR ET1CLR TR
19、1MOV KEYNUMT2 , #00HMOV NUMT2 , #00HMOV R2 , #10TIME2_7:MOV R1 , #200 TIME2_5:ACALL ALARMDISPLAYACALL DL1MSJNB P3.3 , TIME2_1DJNZ R1 , TIME2_5DJNZ R2 , TIME2_7TIME2_6:CLR ET1CLR PT1CLR TR1LJMP START1;*;*T1中断子程序*;*INTERT1:NOPMOV TH1 , #3CHMOV TL1 , #0B0HPUSH ACCPUSH PSWCLR ET0CLR ET1MOV A , NUMT1INC
20、AMOV NUMT1 , ACJNE A , #5 , INTERT1NEXT MOV A ,KEYNUMT1INC AMOV KEYNUMT1 , AMOV NUMT1 , #00HINTERT1NEXT:NOPMOV A , NUMT2INC AMOV NUMT2 , ACJNE A, #5,ENDINTERT1MOV A , KEYNUMT2INC AMOV KEYNUMT2 , AMOV NUMT2 , #00HENDINTERT1: SETB ET1SETB ET0POP ACCPOP PSWRETI;*;* 整点报时 *;*ZDBS: MOV A , MBUFF JNZ ZDBSE
21、NDMOV A , SBUFFCJNE A , #3CH , ZDBSENDCLR P3.2ACALL DL0FIVESETB P3.2ZDBSEND:RET;*;*定闹显示子程序*;*ALARMDISPLAY: MOV P1 ,#0FFH MOV A , ALARMHBUFF2MOVC A , A+DPTRSETB ACC.7MOV P1 , ACLR P3.0ACALL DL1MSSETB P3.0MOV A , ALARMHBUFF1 MOVC A , A+DPTRMOV C , DPMOV ACC.7 , CMOV P1 , ACLR P3.1ACALL DL1MSSETB P3.1M
22、OV A ,ALARMMBUFF2 MOVC A , A+DPTRMOV C , DPMOV ACC.7 , CMOV P1 , ACLR P3.4ACALL DL1MSSETB P3.4MOV A , ALARMMBUFF1 MOVC A , A+DPTRSETB ACC.7MOV P1,ACLR P3.5ACALL DL1MSSETB P3.5RET;* ;*晚上显示子程序* ;* NIGHTDISPLAY: NOPMOV P1 ,#0FFHMOV A , HBUFF2MOVC A , A+DPTRSETB ACC.7MOV P1 , ACLR P3.0ACALL DL1MS SETB P
23、3.0ACALL DL1MSACALL DL1MS MOV A , HBUFF1MOVC A , A+DPTRMOV C , DPMOV ACC.7 , CMOV P1 , ACLR P3.1ACALL DL1MSSETB P3.1ACALL DL1MSACALL DL1MS MOV A ,MBUFF2 MOVC A , A+DPTR MOV C , DP MOV ACC.7 , C MOV P1 , A CLR P3.4 ACALL DL1MSSETB P3.4ACALL DL1MS ACALL DL1MSMOV A , MBUFF1 MOVC A , A+DPTR SETB ACC.7 M
24、OV P1,A CLR P3.5 ACALL DL1MS SETB P3.5 ACALL DL1MS ACALL DL1MS RET;* ;*显示子程序* ;* DISPLAY: MOV P1 ,#0FFH MOV A , HBUFF2 MOVC A , A+DPTR SETB ACC.7 MOV P1 , A CLR P3.0 ACALL DL1MS SETB P3.0MOV A , HBUFF1 MOVC A , A+DPTR MOV C , DP MOV ACC.7 , C MOV P1 , A CLR P3.1 ACALL DL1MS SETB P3.1MOV A ,MBUFF2MOV
25、C A , A+DPTRMOV C , DPMOV ACC.7 , CMOV P1 , ACLR P3.4ACALL DL1MSSETB P3.4MOV A , MBUFF1MOVC A , A+DPTRSETB ACC.7MOV P1,ACLR P3.5ACALL DL1MSSETB P3.5RETTAB: DB 88H,0BBH,94H,91H,0A3H ; 0 1 2 3 4 DB 0C1H,0C0H,9BH,80H,81H ; 5 6 7 8 9;*;*延时程序*;*DL1MS: MOV R6 , #20 DL11: MOV R7 , #25DL12: DJNZ R7 , DL12DJ
26、NZ R6 , DL11RETDL100MS:MOV R6 , #200 DL100MS1:MOV R7 , #250DL100MS2:DJNZ R7 , DL100MS2DJNZ R6 , DL100MS1RETDL11S: MOV R5 , #10DL1S0: MOV R6 , #200 DL1S1: MOV R7 , #250DL1S2: DJNZ R7 , DL1S2DJNZ R6 , DL1S1DJNZ R5 , DL1S0RETDL0FIVE:MOV R5 , #5DL0: MOV R6 , #100 ;DL1: MOV R7 , #250DL2: DJNZ R7 , DL2DJN
27、Z R6 , DL1DJNZ R5 , DL0RET;*;*T0中断子程序*;*INTERT0:PUSH ACCPUSH PSWCLR ET0 MOV A , SBUFFCJNE A ,#028H, SET1MOV R4 , #0DCH SET1: DJNZ NUM , ENDINTT0 MOV NUM , #8 CPL DPDJNZ SBUFF , ENDINTT0 MOV SBUFF , #03CHMOV R4 , #0DBHACALL ADDBUFF0ENDINTT0: MOV A , NUMCJNE A , #04H , ENDT0OUT CPL DPENDT0OUT:POP PSWP
28、OP ACCSETB ET0RETIEND总结在本次设计中,我们最终完成本次课程设计的基本要求及功能,将年月日以及时间在LCD上显示出来,并且能够通过按键对显示的时间进行调整控制等功能。但由于时间仓促和我们自身水平有限,对于在掉电模式下,不让电子钟时间恢复默认值,而是让电子钟的时间继续走,我们没有完成按键对其的控制和调整,很遗憾。并且对于电路的可靠性,稳定性等参数还未做过详细的测试。并在此基础了对系统功能作出星期设置的扩展。在设计开始前老师先给我们动员,并且教会我们通过软件绘制电路图,对各个模块进行了详细的分析和设计准备工作,设计过程中,并且在老师的指导下,在实验室几位同学耐心的帮助下,我们组
29、的成员相互协调,我焊接了一部分电路,并且在同学帮助下,从参考文献中参考了本分代码,积极参与完成各个技术实现的难点,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和具体的使用方法。通过本次设计,我们对单片机有了更深刻的认识,也从实践的例子中去感受到了单片机设计给我们设计带来的改变与进步。我们不仅掌握Keil uVision3软件的使用,与此同时,我们还对电子设计的思路有了更多的认识。这次对电子钟的设计与制作,让我了解设计电路的程序,也了解了关于电子钟的原理与设计理念。在此次的电子钟设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和具体的使用方法。这为自己今后进一步深化学习,积累了一定宝贵经验,撰写设计的过程也是专业知识
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1