60秒旋转电子钟.docx
- 文档编号:28427995
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:22
- 大小:118.37KB
60秒旋转电子钟.docx
《60秒旋转电子钟.docx》由会员分享,可在线阅读,更多相关《60秒旋转电子钟.docx(22页珍藏版)》请在冰豆网上搜索。
60秒旋转电子钟
60秒旋转电子钟
任务书
一、任务
设计一款基于AT89C2051单片机的电子钟。
二、设计要求
1、基本要求
⑴用4只LED数码管输出显示时和分。
⑵可通过按键设置闹钟功能,且停闹无须手工操作。
⑶可通过按键设置分校时。
⑷月计时误差小于45秒。
⑸写出详细的设计报告。
⑹给出全部电路和源程序。
(7)给出proteus仿真电路。
2、发挥部分
⑴用60只LED发光管旋转显示,模拟“秒针”的行走。
⑵模拟“秒针”行走的“嘀哒”声。
(3)增加停(掉)电保护功能。
(4)增加日自动校准功能,使得该电子钟“永无误差”。
(5)增加红黄绿三色变色装饰。
(6)可通过按键设置一天两闹(比如早晨、中午各一次)。
一.引言
电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而电子钟得到广泛应用。
随着人们生活环境的不断改善和美化,在许多场合可以看到数字电子钟。
1要完成的任务
要求该电路具有显示日期、时间、的基本功能,还可以通过按键实现对它们的调整,并且能够显示星期。
2系统主要功能
周边60只发光管顺时旋转来显示秒,中间四只LED数码管用于显示时间,中下方的七只LED灯顺时旋转,供装饰用。
其主要功能有:
整点报时;四只LED数码管显示当前时分;每隔一秒钟周边的60只LED发光管旋转一格,装饰用的LED每隔一秒旋转一次。
当发生停电事件时,由后备电池供电,系统进入低功耗状态,所有显示部件停止显示,这样即延长了电池的寿命,同时又保证了CPU继续计数,不至于因停电而时钟停止运行。
当恢复供电后,系统自动恢复工作状态,不影响计时。
二.系统的硬件设计
1系统的硬件构成及功能
电脑钟的原理框图如图2所示。
它由以下几个部件组成:
单片机89C2051、电源、时分显示部件、60秒旋转译码驱动电路。
时分显示采用动态扫描,以降低对单片机端口数的要求,同时也降低系统的功耗。
时分显示模块、60秒旋转译码驱动电路以及显示驱动都通过89C2051的I/O口控制。
电源部分:
电源部分有二部分组成。
一部分是由220V的市电通过变压、整流稳压来得到+5V电压,维持系统的正常工作;另一部分是由3V的电池供电,以保证停电时正常走时。
正常情况下电池是不提供电能的,以保证电池的寿命。
具体电路参见“新颖的60秒旋转电子钟参考电路原理图”。
图2电子钟系统原理框图
2AT89C2051单片机及其引脚说明
AT89C2051单片机是51系列单片机的一个成员,是8051单片机的简化版。
内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与IntelMCS-51系列单片机的指令和输出管脚相兼容。
由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口
器件,减少了硬件开销,节省了成本,提高了系统的性价比。
AT89C2051是一个有20个引脚的芯片,引脚配置如图3所示。
与8051相比,AT89C2051减少了两个对外端口(即P0、P2口),使它最大可能地减少了对外引脚下,因而芯片尺寸有所减小。
AT89C2051芯片的20个引脚功能为:
图3AT89C2051引脚配置
VCC电源电压。
GND接地。
RST复位输入。
当RST变为高电平并保持2个机器周期时,所有I/O引脚复位至“1”。
XTAL1反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2来自反向振荡放大器的输出。
P1口8位双向I/O口。
引脚P1.2~P1.7提供内部上拉,当作为输入并被外部下拉为低电平时,它们将输出电流,这是因内部上拉的缘故。
P1.0和P1.1
需要外部上拉,可用作片内精确模拟比较器的正向输入(AIN0)和反向输入(AIN1),P1口输出缓冲器能接收20mA电流,并能直接驱动LED显示器;P1口引脚写入“1”后,可用作输入。
在闪速编程与编程校验期间,P1口也可接收编码数据。
P3口引脚P3.0~P3.5与P3.7为7个带内部上拉的双向I/0引脚。
P3.6在内部已与片内比较器输出相连,不能作为通用I/O引脚访问。
P3口的输出缓冲器能接收20mA的灌电流;P3口写入“1”后,内部上拉,可用输入。
P3口也可用作特殊功能口,其功能见表1。
P3口同时也可为闪速存储器编程和编程校验接收控制信号。
表1P3口特殊功能
三.软件系统的设计
1系统的软件构成及功能
本系统的软件系统主要可分为主程序和定时器中断程序两大模块。
在程序过程中,加入了抗干扰措施。
下面对部分模块作介绍。
系统主程序流程图
2序设计思想
主程序的功能是完成系统的初始化,在显示时间之前,对系统是否停电状态进行检测;若停电,将系统进入低功耗状态,用电池电压维持单片机计时工作,但此时不显示时间,用节省用电;若不停电,则将时分发送显示。
3中断程序设计
中断程序完成时间计数,时间调整,误差消除等功能。
中断采用AT89C2051内部T0中断实现,定时时间为125ms,当时间到达125ms×8,即1分钟时,分计数缓冲器MINBUFFER增加1,到达1小时,则时计数缓冲器HOURBUFFER增加1,并将分、时的个位、十位放入显示缓冲器。
当分计数缓冲器和时计数缓冲器分别到达60min、24h时,则对它们清零,以便从新计数。
在中断设计中,还通过软件实现了累计误差消除功能,使整个系统时间的精确度得到保证。
中断图
4应用说明
第一,通过USB接口给单片机上电,打开单片机开关,首先观察单片机电源指示灯是否亮。
按照如上步骤,我们的电子钟电源灯是亮的,这说明系统能够正常供电。
第二,显示电路的调试检查它与单片机的连线:
设计是RS接的P07口,要保证它为高电平。
EN接口接单片机的P05端,也要保证它为高电平;读写信号低电平有效;编写一段显示程序,烧录到单片机看是否能正常显示。
很遗憾的是我们的单片机打开开关后还是只有电源指示灯亮,后来我们发现是我们代码编写错误。
60秒旋转电子钟部分参考程序清单
ALARMHBUFF2EQU77H
ALARMHBUFF1EQU76H
ALARMMBUFF2EQU75H
ALARMMBUFF1EQU74H
HBUFF2EQU73H
HBUFF1EQU72H
MBUFF2EQU71H
MBUFF1EQU70H
DPEQU6FH
NUMEQU78H
SBUFFEQU79H
MBUFFEQU7AH
HBUFFEQU7BH
ALARMMBUFFEQU7CH
ALARMHBUFFEQU7DH
NUMT1EQU67H
NUMT2EQU68H
KEYNUMT1EQU69H
KEYNUMT2EQU6AH
STOREKEYNUMT2EQU6BH
STOREKEYNUMT1EQU6CH
ORG0000H
AJMPSTART
ORG000BH
MOVTH0,#0BHMOVTL0,R4
AJMPINTERT0
ORG001BH
AJMPINTERT1
ORG0040H
START:
MOVNUMT1,#00H
MOVNUMT2,#00H
MOVKEYNUMT1,#00HMOVKEYNUMT2,#00H
MOVSTOREKEYNUMT2,#00HMOVSTOREKEYNUMT1,#00HMOVNUM,#8
MOVDPTR,#TAB
MOVALARMHBUFF,#18HMOVALARMMBUFF,#55HMOVALARMHBUFF2,#01HMOVALARMHBUFF1,#08HMOVALARMMBUFF2,#05HMOVALARMMBUFF1,#05H
MOVHBUFF2,#01HMOVHBUFF1,#08H
MOVMBUFF2,#05H
MOVMBUFF1,#03H
MOVHBUFF,#18H
MOVMBUFF,#53H
MOVSBUFF,#3CHMOVTCON,#05HMOVTMOD,#11HMOVTH0,#0BHMOVTL0,#0DBH
MOVTH1,#3CHMOVTL1,#0B0H
MOVIE,#82HSETBPT0SETBTR0SETBP3.2
SETBP3.3
START1:
MOVA,HBUFF
SUBBA,#7H
JCSTART2
MOVA,HBUFF
SUBBA,#21H
JNCSTART2
ACALLDISPLAY
ACALLZDBS
AJMPSTART3
START2:
ACALLNIGHTDISPLAY
START3:
MOVA,ALARMHBUFFCJNEA,HBUFF,START4
MOVA,ALARMMBUFF
CJNEA,MBUFF,START4
MOVC,DP
MOVP3.2,C
MOVA,SBUFF
JNZSTART1
SETBP3.2
START4:
JNBP3.2,ADJUSTTIME1
JNBP3.3,ADJUSTTIME2
AJMPSTART1
AJMPSTART1
;****************
;*int0中断子程序*
;****************
ADJUSTTIME1:
NOP
MOVKEYNUMT1,#00H
MOVTH1,#3CHMOVTL1,#0B0H
SETBET1SETBPT1SETBTR1MOVSTOREKEYNUMT1,KEYNUMT1TIME1_1:
ACALLDISPLAY
MOVA,KEYNUMT1
CJNEA,STOREKEYNUMT1,TIME1_2AJMPTIME1_3
TIME1_2:
MOVSTOREKEYNUMT1,KEYNUMT1ACALLADDBUFF0TIME1_3:
JNBP3.2,TIME1_1
CLRET1
CLRPT1
CLRTR1
AJMPSTART1
;********************
;*****时间增1分******
;********************
ADDBUFF0:
MOVA,MBUFF
ADDA,#1
DAA
MOVMBUFF,A
ANLA,#0FH
MOVMBUFF1,A
MOVA,MBUFF
SWAPA
ANLA,#0FH
MOVMBUFF2,A
MOVA,MBUFF
CJNEA,#60H,ADDBUFF1
MOVMBUFF,#00H
MOVMBUFF2,#00H
MOVMBUFF1,#00H
MOVA,HBUFFADDA,#1
DAA
MOVHBUFF,A
ANLA,#0FH
MOVHBUFF1,A
MOVA,HBUFF
SWAPA
ANLA,#0FH
MOVHBUFF2,A
MOVA,HBUFF
CJNEA,#24H,ADDBUFF1MOVHBUFF,#00H
MOVHBUFF2,#00H
MOVHBUFF1,#00H
ADDBUFF1:
RET
;*********************************
;*int1中断子程序******************
;*********************************
ADJUSTTIME2:
NOP
ACALLDL100MS
MOVC,P3.3
JCTIME2_6
MOVKEYNUMT2,#00H
MOVSTOREKEYNUMT2,KEYNUMT2
TIME2_1:
NOP
MOVTH1,#3CH
MOVTL1,#0B0H
SETBET1
SETBPT1
SETBTR1
TIME2_2:
ACALLALARMDISPLAY
MOVA,KEYNUMT2
CJNEA,STOREKEYNUMT2,TIME2_3
AJMPTIME2_4
TIME2_3:
MOVSTOREKEYNUMT2,KEYNUMT2
MOVA,ALARMMBUFFADDA,#1
DAA
MOVALARMMBUFF,A
ANLA,#0FH
MOVALARMMBUFF1,A
MOVA,ALARMMBUFF
SWAPA
ANLA,#0FH
MOVALARMMBUFF2,A
MOVA,ALARMMBUFF
CJNEA,#60H,TIME2_4
MOVALARMMBUFF,#00H
MOVALARMMBUFF2,#00H
MOVALARMMBUFF1,#00H
MOVA,ALARMHBUFFADDA,#1
DAA
MOVALARMHBUFF,A
ANLA,#0FH
MOVALARMHBUFF1,A
MOVA,ALARMHBUFF
SWAPA
ANLA,#0FH
MOVALARMHBUFF2,A
MOVA,ALARMHBUFF
CJNEA,#24H,TIME2_4
MOVALARMHBUFF,#00H
MOVALARMHBUFF2,#00H
MOVALARMHBUFF1,#00H
TIME2_4:
NOP
JNBP3.3,TIME2_2CLRET1
CLRTR1
MOVKEYNUMT2,#00H
MOVNUMT2,#00H
MOVR2,#10
TIME2_7:
MOVR1,#200TIME2_5:
ACALLALARMDISPLAY
ACALLDL1MS
JNBP3.3,TIME2_1
DJNZR1,TIME2_5
DJNZR2,TIME2_7
TIME2_6:
CLRET1
CLRPT1
CLRTR1
LJMPSTART1
;***********************************
;**T1中断子程序*********************
;***********************************
INTERT1:
NOP
MOVTH1,#3CH
MOVTL1,#0B0H
PUSHACC
PUSHPSW
CLRET0
CLRET1
MOVA,NUMT1
INCA
MOVNUMT1,A
CJNEA,#5,INTERT1NEXTMOVA,KEYNUMT1
INCA
MOVKEYNUMT1,A
MOVNUMT1,#00H
INTERT1NEXT:
NOP
MOVA,NUMT2
INCA
MOVNUMT2,A
CJNEA,#5,ENDINTERT1
MOVA,KEYNUMT2
INCA
MOVKEYNUMT2,A
MOVNUMT2,#00H
ENDINTERT1:
SETBET1
SETBET0
POPACC
POPPSW
RETI
;**************
;**整点报时**
;**************
ZDBS:
MOVA,MBUFFJNZZDBSEND
MOVA,SBUFF
CJNEA,#3CH,ZDBSEND
CLRP3.2
ACALLDL0FIVE
SETBP3.2
ZDBSEND:
RET
;**************
;**定闹显示子程序**
;**************
ALARMDISPLAY:
MOVP1,#0FFHMOVA,ALARMHBUFF2
MOVCA,@A+DPTR
SETBACC.7
MOVP1,A
CLRP3.0
ACALLDL1MS
SETBP3.0
MOVA,ALARMHBUFF1MOVCA,@A+DPTR
MOVC,DP
MOVACC.7,C
MOVP1,A
CLRP3.1
ACALLDL1MS
SETBP3.1
MOVA,ALARMMBUFF2MOVCA,@A+DPTR
MOVC,DP
MOVACC.7,C
MOVP1,A
CLRP3.4
ACALLDL1MS
SETBP3.4
MOVA,ALARMMBUFF1MOVCA,@A+DPTR
SETBACC.7
MOVP1,A
CLRP3.5
ACALLDL1MS
SETBP3.5
RET
;********************************;**晚上显示子程序****************;********************************NIGHTDISPLAY:
NOP
MOVP1,#0FFH
MOVA,HBUFF2
MOVCA,@A+DPTR
SETBACC.7
MOVP1,A
CLRP3.0
ACALLDL1MSSETBP3.0
ACALLDL1MS
ACALLDL1MSMOVA,HBUFF1
MOVCA,@A+DPTR
MOVC,DP
MOVACC.7,C
MOVP1,A
CLRP3.1
ACALLDL1MS
SETBP3.1
ACALLDL1MS
ACALLDL1MSMOVA,MBUFF2MOVCA,@A+DPTRMOVC,DPMOVACC.7,CMOVP1,ACLRP3.4ACALLDL1MS
SETBP3.4
ACALLDL1MSACALLDL1MS
MOVA,MBUFF1MOVCA,@A+DPTRSETBACC.7MOVP1,ACLRP3.5ACALLDL1MSSETBP3.5ACALLDL1MSACALLDL1MSRET
;**************;**显示子程序**;**************DISPLAY:
MOVP1,#0FFHMOVA,HBUFF2MOVCA,@A+DPTRSETBACC.7MOVP1,ACLRP3.0ACALLDL1MSSETBP3.0
MOVA,HBUFF1MOVCA,@A+DPTRMOVC,DPMOVACC.7,CMOVP1,ACLRP3.1ACALLDL1MSSETBP3.1
MOVA,MBUFF2
MOVCA,@A+DPTR
MOVC,DP
MOVACC.7,C
MOVP1,A
CLRP3.4
ACALLDL1MS
SETBP3.4
MOVA,MBUFF1
MOVCA,@A+DPTR
SETBACC.7
MOVP1,A
CLRP3.5
ACALLDL1MS
SETBP3.5
RET
TAB:
DB88H,0BBH,94H,91H,0A3H;01234DB0C1H,0C0H,9BH,80H,81H;56789
;**************
;***延时程序***
;**************
DL1MS:
MOVR6,#20DL11:
MOVR7,#25
DL12:
DJNZR7,DL12
DJNZR6,DL11
RET
DL100MS:
MOVR6,#200DL100MS1:
MOVR7,#250
DL100MS2:
DJNZR7,DL100MS2
DJNZR6,DL100MS1
RET
DL11S:
MOVR5,#10
DL1S0:
MOVR6,#200DL1S1:
MOVR7,#250
DL1S2:
DJNZR7,DL1S2
DJNZR6,DL1S1
DJNZR5,DL1S0
RET
DL0FIVE:
MOVR5,#5
DL0:
MOVR6,#100;DL1:
MOVR7,#250
DL2:
DJNZR7,DL2
DJNZR6,DL1
DJNZR5,DL0
RET
;**************
;*T0中断子程序*
;**************
INTERT0:
PUSHACC
PUSHPSW
CLRET0MOVA,SBUFF
CJNEA,#028H,SET1
MOVR4,#0DCHSET1:
DJNZNUM,ENDINTT0MOVNUM,#8CPLDP
DJNZSBUFF,ENDINTT0MOVSBUFF,#03CH
MOVR4,#0DBH
ACALLADDBUFF0
ENDINTT0:
MOVA,NUM
CJNEA,#04H,ENDT0OUTCPLDP
ENDT0OUT:
POPPSW
POPACC
SETBET0
RETI
END
总结
在本次设计中,我们最终完成本次课程设计的基本要求及功能,将年月日以及时间在LCD上显示出来,并且能够通过按键对显示的时间进行调整控制等功能。
但由于时间仓促和我们自身水平有限,对于在掉电模式下,不让电子钟时间恢复默认值,而是让电子钟的时间继续走,我们没有完成按键对其的控制和调整,很遗憾。
并且对于电路的可靠性,稳定性等参数还未做过详细的测试。
并在此基础了对系统功能作出星期设置的扩展。
在设计开始前老师先给我们动员,并且教会我们通过软件绘制电路图,对各个模块进行了详细的分析和设计准备工作,设计过程中,并且在老师的指导下,在实验室几位同学耐心的帮助下,我们组的成员相互协调,我焊接了一部分电路,并且在同学帮助下,从参考文献中参考了本分代码,积极参与完成各个技术实现的难点,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和具体的使用方法。
通过本次设计,我们对单片机有了更深刻的认识,也从实践的例子中去感受到了单片机设计给我们设计带来的改变与进步。
我们不仅掌握KeiluVision3软件的使用,与此同时,我们还对电子设计的思路有了更多的认识。
这次对电子钟的设计与制作,让我了解设计电路的程序,也了解了关于电子钟的原理与设计理念。
在此次的电子钟设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和具体的使用方法。
这为自己今后进一步深化学习,积累了一定宝贵经验,撰写设计的过程也是专业知识
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 60 旋转 电子钟
![提示](https://static.bdocx.com/images/bang_tan.gif)