单片机课程设计新颖60秒LED旋转电子钟.docx
- 文档编号:10430273
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:33
- 大小:1.40MB
单片机课程设计新颖60秒LED旋转电子钟.docx
《单片机课程设计新颖60秒LED旋转电子钟.docx》由会员分享,可在线阅读,更多相关《单片机课程设计新颖60秒LED旋转电子钟.docx(33页珍藏版)》请在冰豆网上搜索。
单片机课程设计新颖60秒LED旋转电子钟
单片机课程设计1
新颖的60秒旋转电子钟
余
水
宝
数理与信息工程学院
2006年5月
新颖的60秒旋转电子钟
任务书
一、任务
设计一款基于AT89C2051单片机的电子钟。
二、设计要求
1、基本要求
⑴用4只LED数码管输出显示时和分。
⑵可通过按键设置闹钟功能,且停闹无须手工操作。
⑶可通过按键设置分校时。
⑷月计时误差小于45秒。
⑸写出详细的设计报告。
⑹给出全部电路和源程序。
2、发挥部分
⑴用60只LED发光管旋转显示,模拟“秒针”的行走。
⑵模拟“秒针”行走的“嘀哒”声。
⑶增加室温检测和显示功能(可与时间交替显示)。
⑷增加停(掉)电保护功能。
⑸提高计时精度,使年计时误差小于30秒。
⑹增加日自动校准功能,使得该电子钟“永无误差”。
⑺增加红黄绿三色变色装饰。
⑻可通过按键设置一天两闹(比如早晨、中午各一次)。
新颖的60秒旋转电子钟
目前市场上提供的无论是机械钟还是石英钟在晚上无照明的情况下都是不可见的。
要知道当前的时间,必须先开灯,故较为不便。
现在市场上也出现了一些电子钟,它以六只LED数码管来显示时分秒,与传统的以指针显示秒的方式不同,违背了人们传统的习惯与理念,而且这类电子钟一般是采用大型显示器件,适用于银行、车站等公共场所,且外观设计欠美观,很少进入百姓家庭。
此外,无论是机械钟、石英钟还是电子钟,都存在着共同的问题:
时间误差。
针对以上存在的问题,我们设计了一款采用LED显示器件显示的电子时钟,有效克服了时钟存在的误差问题,并能在夜间不必其它照明就能看到时间,且以60只发光管实现秒显示,接近于传统的秒针来显示秒的形式,用户容易接受,而且美观大方。
另加七只装饰用的LED灯,使整个时钟显的相当美观新颖,故还可作为室内装饰用。
1系统主要功能
电子钟的外观如图1所示。
周边60只发光管顺时旋转来显示秒,中间四只LED数码管用于显示时间,中下方的七只LED灯顺时旋转,供装饰用。
其主要功能有:
整点报时;四只LED数码管显示当前时分;每隔一秒钟周边的60只LED发光管旋转一格,装饰用的LED每隔一秒旋转一次。
当发生停电事件时,由后备电池供电,系统进入低功耗状态,所有显示部件停止显示,这样即延长了电池的寿命,同时又保证了CPU继续计数,不至于因停电而时钟停止运行。
当恢复供电后,系统自动恢复工作状态,不影响计时。
图1多功能电子钟外观图
2系统的硬件构成及功能
电脑钟的原理框图如图2所示。
它由以下几个部件组成:
单片机89C2051、电源、时分显示部件、60秒旋转译码驱动电路。
时分显示采用动态扫描,以降低对单片机端口数的要求,同时也降低系统的功耗。
时分显示模块、60秒旋转译码驱动电路以及显示驱动都通过89C2051的I/O口控制。
电源部分:
电源部分有二部分组成。
一部分是由220V的市电通过变压、整流稳压来得到+5V电压,维持系统的正常工作;另一部分是由3V的电池供电,以保证停电时正常走时。
正常情况下电池是不提供电能的,以保证电池的寿命。
具体电路参见“新颖的60秒旋转电子钟参考电路原理图”。
图2电子钟系统原理框图
2.1AT89C2051单片机及其引脚说明
AT89C2051单片机是51系列单片机的一个成员,是8051单片机的简化版。
内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与IntelMCS-51系列单片机的指令和输出管脚相兼容。
由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。
AT89C2051是一个有20个引脚的芯片,引脚配置如图3所示。
与8051相比,AT89C2051减少了两个对外端口(即P0、P2口),使它最大可能地减少了对外引脚下,因而芯片尺寸有所减小。
AT89C2051芯片的20个引脚功能为:
图3AT89C2051引脚配置图4CD4017引脚图
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口特殊功能
P3口引脚
特殊功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
(外部中断0)
P3.3
(外部中断1)
P3.4
T0(定时器0外部输入)
P3.5
T1(定时器1外部输入)
2.260秒旋转译码驱动原理
按常规传统设计,需60进制译码驱动电路才能实现60秒旋转译码驱动,若用六片十进制计数译码器构成六十进制计数译码电路,则电路连线多(需要120根连线),硬件电路庞大,开销大。
为此,我们巧妙地采用了两片CD4017进行六十进制计数译码,实现60秒旋转译码驱动。
既减少了电路的复杂程度又可降低了成本。
图4为CD4017功能引脚图,图5为其时序图。
图5CD4017时序图
CD4017集成电路是十进制计数/时序译码器,共有10个译码输出Q0~Q9;每个译码输出通常处于低电平,且在时钟脉冲由低到高的上升沿输出高电平;每个高电平输出维持1个时钟周期;每输入10个时钟脉冲,输出一个进位脉冲,因此进位输出信号可作为下一级计数器的时钟信号。
在清零输入端(R)加高电平或正脉冲时,只有输出端Q0为高电平,其余各输出端均为低电平“0”。
为实现对发光二极管的驱动,将每一个译码输出端口接一只发光二极管,并将二极管串联限流电阻后接地。
当译码端口Q0~Q9中任一端口为高电平,则对应的发光二极管点亮,如图6(左)所示。
仔细考查CD4017的功能,可发现其10个输出的高电平是相互排斥的,即任一时刻只有一只发光二极管点亮,因此可将图6(左)电路进一步简化为如图6(右)所示,从而简化电路设计。
图6CD4017控制发光二极管原理图
在本电子钟设计中,每秒点亮一个发光二极管,循环点亮一周共需60个发光二极管,若用上述的6片CD4017实现驱动,显然电路复杂。
为此我们选用两片CD4017和一片6反相器,采用“纵横双译码”技术,巧妙地实现60秒旋转译码驱动,其中一片接成10进制,一片接成6进制,实现6×10=60的功能,具体连接方法如图7所示。
图7发光二极管“纵横双译码”循环点亮LED原理图
将周期为1秒的输入脉冲作为其中一片CD4017的时钟脉冲,而此片的级联进位输出端(QC)作为另一片的时钟输入,并将Q6与复位端相连。
在两片译码输出端交叉点上接入发光二极管,构成6×10矩阵。
根据CD4017时序特点,在初始状态,作为高位(纵)的CD4017译码器输出端口Q0处于高平,经反相器反相后为低电平。
当作为低位(横)的CD4017译码器输出端口Q0~Q9依次输出高电平后,则对应的二极管LD1~LD10依次点亮;此后由于QC端的进位,高位CD4017译码输出端口Q1输出高电平,反相后输出低电平,当低位的CD4017译码输出端口Q0~Q9依次输出高电平后,二极管LD11~LD20依次点亮。
如此往复,直至高位Q6向复位端输入高电平,CD4017复位,60秒循环点亮重新开始。
2.3时分显示部件
由于系统要显示的内容较简单,显示量不多,所以选用数码管既方便又经济。
LED有共阴极和共阳极两种。
如图8所示。
二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压。
一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个小数点为dp发光二极管。
当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗。
为了保护各段LED不被损坏,需外加限流电阻。
图8LED数码管结构原理图
众所周知,LED显示数码管通常由硬件7段译码集成电路,完成从数字到显示码的译码驱动。
本系统采用软件译码,以减小体积,降低成本和功耗,软件译码的另一优势还在于比硬件译码有更大的灵活性。
所谓软件译码,即由单片机软件完成从数字到显示码的转换。
从LED数码管结构原理可知,为了显示字符,要为LED显示数码管提供显示段码,组成一个“8”字形字符的7段,再加上1个小数点位,共计8段,因此提供给LED数码管的显示段码为1个字节。
各段码位与显示段的对应关系如表2。
表2各段码位的对应关系
段码位
D7
D6
D5
D4
D3
D2
D1
D0
显示段
dp
g
f
e
d
c
b
a
需说明的是当用数据口连接LED数码管a~dp引脚时,不同的连接方法,各段码位与显示段有不同的对应关系。
通常数据口的D0位与a段连接,D1位与b段连接,……D7位与dp段连接,如表2所示,表3为用于LED数码管显示的十六进制数和空白字符与P的显示段码。
表3LED显示段码
字型
共阳极段码
共阴极段码
字型
共阳极段码
共阴极段码
0
C0H
3FH
9
90H
6FH
1
F9H
06H
A
88H
77H
2
A4H
5BH
B
83H
7CH
3
BOH
4FH
C
C6H
39H
4
99H
66H
D
A1H
5EH
5
92H
6DH
E
86H
79H
6
82H
7DH
F
84H
71H
7
F8H
07H
空白
FFH
00H
8
80H
7FH
P
8CH
73H
注:
(1)本表所列各字符的显示段码均为小数点不亮的情况。
(2)“空白”字符即没有任何显示。
根据AT89C2051单片机灌电流能力强,拉电流能力弱的特点,我们选用共阳数码管。
将AT89C2051的P1.0~P1.7分别与共阳数码管的a~g及dp相连,高电平的位对应的LED数码管的段暗,低电平的位对应的LED数码管的段亮,这样,当P0口输出不同的段码,就可以控制数码管显示不同的字符。
例如:
当P0口输出的段码为11000000,数码管显示的字符为0。
数码管显示器有二种工作方式,即静态显示方式和动态扫描显示方式。
为节省端口及降低功耗,本系统采用动态扫描显示方式。
动态扫描显示方式需解决多位1LED数码管的“段控”和“位控”问题,本电路的“段控”(即要显示的段码的控制)通过P0口实现;而每一位的公共端,即LED数码管的“位控”,则由P3口控制。
这种连接方式由于多位字段线连在一起,因此,要想显示不同的内容,必然要采取轮流显示的方式,即在某一瞬间,只让其中的某一位的字位线处于选通状态,其它各位的字位线处于断开状态,同时字段线上输出这一位相应要显示字符的字段码。
在这一瞬时,只有这一位在显示,其他几位则暗。
在本系统中,字位线的选通与否是通过PNP三极管的导通与截止来控制,即三极管处于“开关”状态。
系统的时分显示部件由4只7段共阳LED数码管构成,前两只用于时的显示,后两只用于分的显示。
值得一提的是,在设计中需要实现时与分之间的两个闪烁点,为此,将第三只LED数码管倒置摆放,这样就形成了两个很自然的闪烁点。
与此同时,为了能使两点显示能够形象的表示时钟“秒”的变化,设计时,将两个点由P1.7单独控制,每隔一秒使P1.7发送一个正脉冲,从而实现了两个点的闪烁显示,闪烁周期为一秒。
3系统的软件构成及功能
本系统的软件系统主要可分为主程序和定时器中断程序两大模块。
在程序过程中,加入了抗干扰措施。
下面对部分模块作介绍。
3.1系统主程序设计
主程序的功能是完成系统的初始化,在显示时间之前,对系统是否停电状态进行检测;若停电,将系统进入低功耗状态,用电池电压维持单片机计时工作,但此时不显示时间,用节省用电;若不停电,则将时分发送显示。
程序流程如图9所示。
3.2中断程序设计
中断程序(如图10所示)完成时间计数,时间调整,误差消除等功能。
中断采用AT89C2051内部T0中断实现,定时时间为125ms,当时间到达125ms×8,即1分钟时,分计数缓冲器MINBUFFER增加1,到达1小时,则时计数缓冲器HOURBUFFER增加1,并将分、时的个位、十位放入显示缓冲器。
当分计数缓冲器和时计数缓冲器分别到达60min、24h时,则对它们清零,以便从新计数。
在中断设计中,还通过软件实现了累计误差消除功能,使整个系统时间的精确度得到保证。
图9系统主程序流程图
图10定时中断程序
4结束语
上述电子钟,无论在外观上还是功能上都实现了较为完善的设计。
特别值得一提的是本系统在精度上的设计,突破传统的方法,对可能产生的积累误差采用“抵消法”,从而有效地降低了时间误差。
由于计数时产生的积累误差所导致的时间误差,是所有的电子计时系统共同存在的问题。
但在目前市场上的电子时钟产品,如计算机中的时钟,手机中的时钟等并没有有效的采取消除误差的措施。
本系统设计的消除积累误差来减少时间误差的软件方法,并不需要任何的硬件,因此在不增加成本的情况下,可以普遍用于所有的电子时钟产品。
新颖60秒旋转电子钟材料清单
名称
型号
数量
单片机
AT89C2051
1
数字集成芯片
CD4017
2
数字集成芯片
CD4069
1
超高亮数码管
共阳尺寸0.5inch
4
高亮发光二极管
3红、透明
13
高亮发光二极管
3绿、透明
50
普通二极管
IN4001
4
普通二极管
IN4148
2
稳压二极管
C4V7(4.7V)
1
三极管
9012
5
三极管
9013
1
轻触按键
小(尺寸6×6mm×5.5)
3
蜂鸣器
5V
1
晶振
6M(小体积)
1
底座
14脚
1
底座
16脚
2
底座
20脚
1
底座
40脚
1
电阻
220欧姆,1/8瓦
8
电阻
4.7K,1/8瓦
5
电阻
100欧姆,1/8瓦
1
电阻
10k,1/8瓦
4
电阻
270欧姆,1/8瓦
1
电容
100微法/25伏
2
电容
220微法/25伏
1
电容
30P瓷片
3
电容
104(0.1微法)
3
变压器
5V/100MA
1
电源线
150cm
1
固定脚
铜
3套
PCB线路板
直径11.5
1
新颖的60秒旋转电子钟参考电路原理图
电子钟PCB实物图
仪器设备:
①单片机仿真器(带AT89C2051仿真头);
②焊接实验工具箱一套;
③5V电源(有变压器时可不用);
④制板设备(厂家制板时可不用)。
电子钟整体实物图
60秒旋转电子钟部分参考程序清单
ALARMHBUFF2EQU77H;闹铃时间的时十位计时绶冲
ALARMHBUFF1EQU76H;闹铃时间的时个位计时绶冲
ALARMMBUFF2EQU75H;闹铃时间的分十位计时绶冲
ALARMMBUFF1EQU74H;闹铃时间的分个位计时绶冲
HBUFF2EQU73H;时十位计时绶冲
HBUFF1EQU72H;时个位计时绶冲
MBUFF2EQU71H;分十位计时绶冲
MBUFF1EQU70H;分个位计时绶冲
DPEQU6FH;控制数码管点的亮暗
NUMEQU78H;前四秒还是后四秒计数
SBUFFEQU79H;秒十进制计时绶冲(低四位对应个位,高四位对应十位)
MBUFFEQU7AH;分十进制计时绶冲
HBUFFEQU7BH;时十进制计时绶冲
ALARMMBUFFEQU7CH;闹铃时间的分十进制计时绶冲
ALARMHBUFFEQU7DH;闹铃时间的时十进制计时绶冲
NUMT1EQU67H;用于控制时间调整时按键p3.2一次按下时,计数器T1中断的次数
NUMT2EQU68H;用于控制时间调整时按键p3.3一次按下时,计数器T1中断的次数
KEYNUMT1EQU69H;用于存储NUMT1已经计数到第几个半秒
KEYNUMT2EQU6AH;用于存储NUMT1已经计数到第几个半秒
STOREKEYNUMT2EQU6BH;用于存储当前KEYNUMT1的值,以和下次做比较,看是否有变化
STOREKEYNUMT1EQU6CH;用于存储当前KEYNUMT2的值,以和下次做比较,看是否有变化
ORG0000H
AJMPSTART
ORG000BH
MOVTH0,#0BH;设置计数初值,R4用来存储低位的初值
MOVTL0,R4
AJMPINTERT0
ORG001BH
AJMPINTERT1
ORG0040H
START:
MOVNUMT1,#00H
MOVNUMT2,#00H
MOVKEYNUMT1,#00H
MOVKEYNUMT2,#00H
MOVSTOREKEYNUMT2,#00H
MOVSTOREKEYNUMT1,#00H
MOVNUM,#8
MOVDPTR,#TAB
MOVALARMHBUFF,#18H;置闹铃时间初始值为18:
55
MOVALARMMBUFF,#55H
MOVALARMHBUFF2,#01H
MOVALARMHBUFF1,#08H
MOVALARMMBUFF2,#05H
MOVALARMMBUFF1,#05H
MOVHBUFF2,#01H;置闹钟时间为18:
53
MOVHBUFF1,#08H
MOVMBUFF2,#05H
MOVMBUFF1,#03H
MOVHBUFF,#18H
MOVMBUFF,#53H
MOVSBUFF,#3CH;置初始秒为60,计时时减
MOVTCON,#05H;下降沿触发
MOVTMOD,#11H;初始化定时器,T0,T116位计时
MOVTH0,#0BH;设置计数初值,125ms计时
MOVTL0,#0DBH
MOVTH1,#3CH;T1置初值,进行100ms计时,用于调整时间
MOVTL1,#0B0H
MOVIE,#82H;开T0中断
SETBPT0;T0中断优先级最高
SETBTR0;允许T0计数
SETBP3.2
SETBP3.3
START1:
MOVA,HBUFF;显示时,7点以前及21点以后亮度调暗
SUBBA,#7H
JCSTART2
MOVA,HBUFF
SUBBA,#21H
JNCSTART2
ACALLDISPLAY
ACALLZDBS
AJMPSTART3
START2:
ACALLNIGHTDISPLAY
START3:
MOVA,ALARMHBUFF;检测是否是定闹时间
CJNEA,HBUFF,START4
MOVA,ALARMMBUFF
CJNEA,MBUFF,START4
MOVC,DP;若是定闹时间,则利用dp的值来决定蜂鸣
MOVP3.2,C
MOVA,SBUFF
JNZSTART1;若还没到1分钟,则继续蜂鸣
SETBP3.2
START4:
JNBP3.2,ADJUSTTIME1;循环等待中断,并检测是否键按下,若是,则进入相应程序
JNBP3.3,ADJUSTTIME2
AJMPSTART1
AJMPSTART1
;****************
;*int0中断子程序*
;****************
ADJUSTTIME1:
NOP
MOVKEYNUMT1,#00H
MOVTH1,#3CH;T1置初值,进行100ms计时,用于调整时间
MOVTL1,#0B0H
SETBET1;开T1中断
SETBPT1;设T1中断优先级最高
SETBTR1;允许T1计时
MOVSTOREKEYNUMT1,KEYNUMT1;存储当前次KEYNUMT1的值
TIME1_1:
ACALLDISPLAY
MOVA,KEYNUMT1
CJNEA,STOREKEYNUMT1,TIME1_2;若当前KEYNUMT1的值与上一次的值不等,则时间加1分,否则继续循环,等等至半分钟
AJMPTIME1_3
TIME1_2:
MOVSTOREKEYNUMT1,KEYNUMT1;加1后存储当前的KEYNUMT1的值
ACALLADDBUFF0;分加1
TIME1_3:
JNBP3.2,TIME1_1;若p3.2已关,则退出增时,否则继续循环
CLRET1
CLRPT1
CLRTR1
AJMPSTART1
;********************
;*****时间增1分******
;********************
ADDBUFF0:
MOVA,MBUFF;若按键小于1s,则分增1
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,HBUFF;时增1
ADDA,#1
DAA
MOVHBUFF,A
ANLA,#0FH
MOVHBUFF1,A
MOVA,HBUFF
SWAPA
ANLA,#0FH
MOVHBUFF2,A
MOVA,HBUFF
CJNEA,#
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 新颖 60 LED 旋转 电子钟