60秒旋转电子钟.docx

上传人:b****5 文档编号:6508363 上传时间:2023-01-07 格式:DOCX 页数:18 大小:118.43KB
下载 相关 举报
60秒旋转电子钟.docx_第1页
第1页 / 共18页
60秒旋转电子钟.docx_第2页
第2页 / 共18页
60秒旋转电子钟.docx_第3页
第3页 / 共18页
60秒旋转电子钟.docx_第4页
第4页 / 共18页
60秒旋转电子钟.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

60秒旋转电子钟.docx

《60秒旋转电子钟.docx》由会员分享,可在线阅读,更多相关《60秒旋转电子钟.docx(18页珍藏版)》请在冰豆网上搜索。

60秒旋转电子钟.docx

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软件的使用,与此同时,我们还对电子设计的思路有了更多的认识。

这次对电子钟的设计与制作,让我了解设计电路的程序,也了解了关于电子钟的原理与设计理念。

在此次的电子钟设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和具体的使用方法。

这为自己今后进一步深化学习,积累了一定宝贵经验,撰写设计的过程也是专业知识

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

当前位置:首页 > 医药卫生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1