推荐下载电子钟.docx
《推荐下载电子钟.docx》由会员分享,可在线阅读,更多相关《推荐下载电子钟.docx(18页珍藏版)》请在冰豆网上搜索。
![推荐下载电子钟.docx](https://file1.bdocx.com/fileroot1/2022-12/18/8f1e21b4-bb6e-4df8-8aba-81d1f4c001dd/8f1e21b4-bb6e-4df8-8aba-81d1f4c001dd1.gif)
推荐下载电子钟
(完整word版)电子钟
编辑整理:
尊敬的读者朋友们:
这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整word版)电子钟)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整word版)电子钟的全部内容。
《单片机原理及应用》课程三级项目
项目名称:
基于单片机的智能电子钟系统仿真设计
班级:
通信工程2班
姓名:
姜敏敏张丹
李文婷朱贺
任雁飞宋亚
指导教师:
闫盛楠
日期:
2015年10月
●摘要
数字时钟在日常生活中很常见,应用也很广泛。
本系统设计以AT89C51芯片为核心,辅以必要的外围电路,设计了一个结构简单功能齐全的电子时钟。
本系统由单片机的时钟信号实现计时功能,将其时间数据经单片机输出,利用显示器显示出来,同时通过按键可以进行校时、定时等功能。
利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点以满足人们不同的需要。
关键词:
电子时钟;单片机;LED数码管显示
●前言
数字钟是采用数字电路实现对时、分、秒、数字显示的计时装置,广泛用于人们生产生活的各个方面,钟表的数字化给人们带来了极大的方便,而且大大地扩展了钟表原先的报时功能.
随着科技的发展,人们对电子产品的应用要求越来越高,数字电子钟不但可以显示当前的时间,而且可以显示日期、农历、以及星期等,另外数字钟还具备秒表和闹钟功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。
高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校。
数字式电子钟用集成电路计时时,译码代替机械式传动,用LCD显示器代替指针进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。
本设计利用软件编程借助于定时器/计数器0实现间隔为1s的定时功能,格式为秒,分,时,在其中断服务程序中实现对小时、分钟、秒单元数值的调整。
在这次设计中,我们采用LED数码管显示时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示,用12MHz的晶振产生振荡脉冲,定时器计数。
利用嵌套在调时子程序中的显示子程序实现上下午指示和半秒闪烁。
该数字钟既可以显示当前时间,同时具有调时、闹钟等功能,满足了不同人的需要。
●正文
一、系统整体设计思想
1、基本原理
利用软件编程借助于定时器/计数器0实现间隔为1s的定时功能,格式为秒,分,时,在其中断服务程序中实现对小时、分钟、秒单元数值的调整。
主程序通过不断循环调用调时子程序,实现整个功能。
利用嵌套在调时子程序中的显示子程序实现上下午指示和半秒闪烁。
2、所用元器件
报警、电源、AT89C51单片机、六片数码管显示屏、LED灯指示(上下午、半秒)、按键(k1~k4)、电阻、喇叭、三极管
3、方案设计
通过定时器/计数器0实现1s的计时,将它设计成内部中断,即每计满1s产生中断信号,主程序转去执行定时器0的中断服务程序,按照时间规则改变相应RAM存储单元的数值。
在主程序里首先不断检测是否有按键按下,如果没有,则不断调用显示子程序,否则,根据按下的是哪个键可以转去执行相应的程序段,分别实现小时和分钟的加和减以及闹钟定时,而每次执行结束都会调用显示子程序,保证数码管的稳定显示,同时也可以实时根据存储单元数值的不同显示。
而闹钟的倒计时则利用定时器/计数器1的计时来实现,同样为1s计时,只不过是在中断服务程序中实现对存储单元的按规则递减,同样的即使显示就可以实现倒计时功能,到达00:
00:
00时就可以调用报警子程序,实现报警.
4、整体电路
5、仿真结果
二.控制电路
1、基本原理
P0口控制LED显示屏,P2口控制时间显示,P3口分别控制半秒提示和上下午,P1口分别控制四个按键和蜂鸣器。
2、相关工具
AT89C51,LED数码管,K建按钮
3、电路原理图
4、方案设计及实现结果
时间显示:
采用六个数码管显示当前时间:
小时、分钟、秒。
上下午指示:
采用两个发光二极管来指示上下午。
半秒提示:
采用两个发光二极管,每隔半秒闪烁。
按下K1键,开始调小时,同时2个小时数码管闪烁。
按下K2键,小时加;按下K3键,小时减.
小时调整好后,再按下K1键,开始调分钟,同时分钟数码管闪烁。
按下K2键,分钟加;按下K3键,分钟减.
整好分钟后,再按下K1键,调时结束。
按下K4键,开始调小时,同时2个小时数码管闪烁.
按下K2键,小时加;按下K3键,小时减。
小时调整好后,再按下K4键,开始调分钟,同时分钟数码管闪烁。
按下K2键,分钟加;按下K3键,分钟减。
调整好分钟后,再按下K4键,定闹结束。
闹钟定时的时间到后,蜂鸣器/扬声器发出提示音;用户需按K2-k4键来取消闹钟警告。
三、定时模块设计
1、基本原理
计时器T1的倒计时同样是1s的倒计时,只是在中断程序里实现对计时单元的减1,但在减1之前检测是否为0,如果是就调用报警子程序,如果不是则按照规则减1,注意的同样是数值的调整。
调整结束后返回ADJUST程序,继续检测,这样就可以实现连续调节。
由单片机芯片中引脚输出的信号来控制蜂鸣器的开和关在报警子程序里要求不断调用显示子程序,这样数码管可以在时间到达之后稳定显示00:
00:
00。
2、所用元器件
蜂鸣器、三极管2N2907
3、方案设计
P1.3为设定闹铃状态,按P1。
3实现时分秒转换,P1.2加1,P1。
1减一,再按P1。
3调闹钟结束。
引脚P1.7输出高电平时,三极管截止,蜂鸣器不发声;输出低电平时,三极管导通,蜂鸣器发出声音。
改变单片机P1。
7引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生不同的音色、音调的声音;改变其占空比,则可以控制蜂鸣器声音的大小。
4、电路设计图
四、LED显示模块设计
1、基本原理
P0。
0~P0。
7接数码管的片选码)P2.0~P2。
5接数码管的段选码,时间显示采用六个数码管显示两位的小时,分钟,秒.半秒提示采用两个发光二极管,每隔半秒闪烁。
上下午指示采用两个发光二极管来指示上下午。
2、所用元器件
7SEG-MPX6-CA—BLUE六位LED液晶显示屏、发光二极管、AT89C51
3、方案设计
(1)时间显示:
动态显示的核心在于依次选中一块数码管,并在此之前将相应数码管要显示的数字的段码送到端口,进行相应的延时后关闭数码管选通信号。
不断执行上述过程就可以实现较为稳定的动态显示。
每次进入主程序都首先判断是否到了1s,到了则继续执行,否则,返回中断。
为了在显示完秒之后还能继续显示小时的十位,必须有一个用来计数的单元,用以区分当前显示的是小时还是分钟,还是秒,并以此作为仅次于显示次数N的循环.对每一个单元(30H~32H)的两位BCD码的显示,用一位(21H).0来指示即将显示的是十位还是各位,据此控制刚才所说的单元指示数值是否用该加一或者重新初始化.由此在DISPLAY子程序中有3重循环。
调用入口参数为30H~32H单元的数值。
(2)半秒提示:
采用两个发光二极管,每隔半秒闪烁.中断5次就是半秒,并在相应的分支里设置P3.6和P3。
7,保证二者同时取反即可。
这可以放在显示子程序内部,保证时间显示和半秒闪烁的同步,同时可以节约计数器。
(3)上下午指示:
采用两个发光二极管来指示上下午。
只要判断30H单元的内容与11H相比较就可以知道是上午还是下午了,在分支语句里控制相应的灯亮了就行。
如上所述,将它放置在显示子程序里较为方便。
4、电路设计图
5、仿真结果
五、按键模块设计
1、基本原理
通过控制四个开关按钮,控制8951的P1口输入,通过编写程序控制实现该设计所要求的小时分钟的调时功能,由按键控制调小时还是调分钟并控制数值的加一或减一.
2、所用元器件
按钮开关
3、设计方案
ADJUST的主体部分就是检测是否有按键按下,如果没有只是调用显示子程序,而有的话转去执行相应的分支语句。
为了防止干扰,我们便写了一个延时5ms左右的子程序,若是经过延时后,按键信号依然有效,则认定是有效信号,否则为干扰,返回程序起始点重新检测。
在K2\K3的分支语句里实现指针所指向单元的加一或者减一,但是注意要按照时间规则来,对加一或者减一结果进行调整,否则可能出错。
对单元的加一或者减一直接反映到显示子程序和定时器计数器0或者1的16位计数单元里,所以,每次更改后的值就相当于对时间确定调节,并从该处继续计时,这样就实现了调时功能。
K4的分支语句要求实现定闹,它与K1分支语句的不同之处是更改当前计数器为1,关闭0,在计数器1的中断服务程序里可以实现倒计时功能。
4、电路设计图
5、仿真结果
按下K1键,开始调小时,同时2个小时数码管闪烁。
按下K2键,小时减;按下K3键,小时加.小时调整好后,再按下K1键,开始调分钟,同时分钟数码管闪烁。
按下K2键,分钟减;按下K3键,分钟加。
调整好分钟后,再按下K1键,调时结束。
六、参考文献
【1】何立民,单片机系统设计[M],北京:
北京航空大学出版社.1993
【2】付家才,单片机控制工程实践技术[M],北京:
北京化学工业出版社2004
【3】李光才,单片机课程设计实力指导[M],北京:
北京航空大学出版社。
2004
【4】朱定华,单片机原理机接口技术实验[M],北京:
北方交通大学出版社2002
●结论
本次课程设计是用AT89C51单片机设计一个数字时钟,经过一个星期的调试,结果满足部分设计要求,验证无误。
通过单片机硬件电路的调试,实现了预先设定的功能,设计主要用到的元件不多,最主要的是程序也比较长比较麻烦,同时也遇到了大量困难,尤其是关于校时模块的设计实现。
关于显示模块,我们也遇到了不少的麻烦,程序的错误,对于元件了解不够深刻都是主要原因.学以致用,将从书本上学到的知识应用于实践,学会了初步的电子电路仿真设计,虽然过程中遇到了一些困难,但是在解决这些问题的过程无疑也是对自己自身专业素质的一种提高。
当最终调试成功的时候也是对自己的一种肯定。
此次的设计作业不仅增强了自己在专业设计方面的信心,鼓舞了自己,更是一次兴趣的培养,为自己以后的学习方向的明确了重点。
另外在这次实验中我们遇到了不少的问题针对不同的问题我们采取不同的解决方法,最终一一解决设计中遇到的问题。
在我们曾经遇到不懂的问题时,利用网上的资源,搜索查找得到需要的信息。
方案中仍存在不少的问题,接下来我们会继续对其进行调试修改,也希望老师能给出我们相关的意见和建议。
●项目分工
一起做,平均
●附录
ORG0000H
LJMPMAIN
ORG000BH
LJMPIT0P
ORG001BH
LJMPIT1P
ORG0100H
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;0-9的共阳极显示段码
ORG1000H
MAIN:
SETBP3.0;6亮,绿灯
CLRP3。
1
MOVTMOD,#01H;设T0方式1,定时,T1为方式1,计数
SETBIT0;外部中断0为跳沿方式有效
SETBIT1;外部中断1为跳沿方式有效
SETBPX0;外部中断0为高优先级中断
SETBPX1;外部中断1为高优先级中断
CLRPT0;定时器0为低优先级中断
CLRPT1;计数器1为低优先级中断
MOV20H,#0AH;中断10次为1s,中断计数单元为20H
MOV19H,#05H
MOV29H,#55H;01010101B,不断左移位,相当于最高两位的0和1转换
MOV18H,#05H;DISPLAY子程序执行这么多次后结束
CLRA;A清零
MOV30H,A;“时”单元清零
MOV31H,A;“分”单元清零
MOV32H,A;“秒”单元清零
SETBET0;允许中断
SETBET1
SETBEX0
SETBEX1
SETBEA;CPU开中断
MOVTH0,#3CH;给T0装入计数初值,可计时100ms
MOVTL0,#0B0H;
MOVTH1,#3CH;给T1装入计数初值
MOVTL1,#0B0H
SETBTR0;启动计数
SETBTR1
MOVR1,#31H
HERE:
NOP;允许被中断
LCALLADJUST
AJMPHERE;反复调用显示子程序
ADJUST:
MOVR3,#00H
A1:
LCALLDISPLAY
MOVP1,#0FFH
JNBP1.2,K3
JNBP1。
1,K2
JNBP1。
0,K1
JNBP1.3,K4
LJMPA1;如果没有键按下重新检测
LJMPJ3;等待按键抬起来
J3:
JBP1.2,A1
LCALLDISPLAY
LJMPJ3
J2:
JBP1.1,A1
LCALLDISPLAY
LJMPJ2
J1:
JBP1.0,A1
LCALLDISPLAY
LJMPJ1
J4:
JBP1.3,A1
LCALLDISPLAY
LJMPJ4
K3:
LCALLDELAY
JBP1。
2,A1;确实有键按下,进入下面处理,否则严重干扰,重测
MOVA,@R1
ANLA,#0FH
CJNEA,#09H,M1
MOVA,@R1
ADDA,#10H
ANLA,#0F0H
MOV@R1,A
JMPM2
M1:
INC@R1
M2:
LCALLDISPLAY
LJMPJ3;等按键弹起来,按一次,只加一次
K2:
LCALLDELAY
JBP1.1,A1
MOVA,@R1
ANLA,#0FH
JNZNONBOUND
MOVA,@R1
CLRC
SUBBA,#06H
MOV@R1,A
NONBOUND:
DEC@R1
LCALLDISPLAY
LJMPJ2
K1:
LCALLDELAY
JBP1。
0,A1
INCR3
CJNER3,#01H,TWICE1
MOVR1,#30H
JMPS1
TWICE1:
CJNER3,#02H,DONE
MOVR1,#31H
S1:
LCALLDISPLAY
LJMPJ1
K4:
LCALLDELAY
JBP1。
3,N1
JMPN2
N1:
LJMPA1
N2:
CLRTR0
SETBTR1
INCR3
CJNER3,#01H,TWICE2
MOVR1,#30H
JMPS2
TWICE2:
CJNER3,#02H,DONE
MOVR1,#31H
S2:
LCALLDISPLAY
LJMPJ4
DONE:
NOP
RET
IT0P:
PUSHAcc;保护现场
PUSHPSW
CLREA
MOVTH0,#3CH;重新装入计数初值
MOVTL0,#0B0H
DJNZ19H,HALF;半秒
MOV19H,#05H
MOVA,29H
RLA
MOV29H,A
HALF:
DJNZ20H,RETURN;1s还没有到,那么就返回继续计数100s
CPLP2.0
MOV20H,#0AH;否则,重新装入中断次数计数值
MOVA,32H;
ADDA,#01H;秒单元增1
DAA;将二进制的秒数转换成BCD码,以便显示
MOV32H,A;返回到秒单元保存
CJNEA,#60,RETURN;如果不满60s,继续下一个1s的计时
MOV32H,#00H;否则,秒单元就要清零
MOVA,31H
ADDA,#01H;针对分单元加1
DAA
MOV31H,A
CJNEA,#60,RETURN;如果不满60分钟,则继续下一个1s的计数
MOV31H,#00H;否则分单元清零
MOVA,30H
ADDA,#01H;针对时单元加1
DAA
MOV30H,A
CJNEA,#24,RETURN;如果不满24小时,则继续计数,否则,全部清零
MOV30H,#00H;时单元清零
RETURN:
SETBEA
POPPSW
POPAcc
RETI
DISPLAY:
CLREA
PUSHAcc
PUSHPSW
PUSH01H
LOOP0:
DJNZ18H,START
LJMPFINISH
START:
MOVDPTR,#0100H
MOVC,(29H).7;29H的最高两位每隔半秒互调一次,只要不断调用显示程序,输出就会每隔半秒变化一次
MOVP3。
7,C
MOVC,(29H)。
6
MOVP3.6,C
MOVA,#11H
CJNEA,30H,NEXT1;若是12小于小时数,则Cy被置位,否则清零
NEXT1:
JCNIGHT;C为0,是早上
SETBP3.0;6亮,绿灯
CLRP3.1
JMPMOON
NIGHT:
SETBP3.1;C为1,是晚上
CLRP3.0;7亮,黄灯
MOON:
NOP
NOP
MOV10H,#01H;存放片选码
MOVR0,#30H;寄存器间接寻址
SETB(21H).0;指示将要显示的是十位还是个位,1表示十位,0表示个位
LOOP1:
MOVA,@R0;A中是待显示的两位数BCD码
JNB(21H)。
0,NEXT;若将要显示个位则直接相与取位
SWAPA;否则,十位与个位交换再取位
NEXT:
CPL(21H)。
0;指示位取反,为下次显示做准备
ANLA,#0FH;取得待显示的一位BCD码
MOVCA,@A+DPTR;取得待显示段码
MOVP0,A;准备显示
MOVP2,10H;片选,亮了
NOP
NOP
NOP
MOVP0,#0FFH;关闭数码管
MOVA,10H
RLA;为下次显示做准备
MOV10H,A
JNB(21H)。
0,LOOP1;若将显示个位,则R0不变
INCR0;否则,加一
CJNER0,#33H,LOOP1;若刚才显示的是秒并且是个位,也就是显示结束,那么重新置数
AJMPLOOP0;否则,继续显示
FINISH:
MOV18H,#05H
POP01H
POPPSW
POPAcc
SETBEA
RET
EINT0:
PUSHPSW;它本来就是高优先级中断,所以不会再被打断
PUSHAcc
INC@R1
MOVA,@R1
DAA
MOV@R1,A
POPAcc
POPPSW
RETI;INT1中断服务程序
EINT1:
PUSHPSW
PUSHAcc
DEC@R1
MOVA,@R1
DAA
CLRC
SUBBA,#0CH
MOV@R1,A
POPAcc
POPPSW
RETI;T1中断服务程序;K4按钮第一次按下,转到T1的中断程序这里
IT1P:
NOP
PUSHAcc;保护现场
PUSHPSW
CLREA
MOVTH1,#3CH;给T1装入计数初值
MOVTL1,#0B0H
DJNZ19H,HALF1;半秒
MOV19H,#2AH
MOVA,29H
RLA
MOV29H,A
HALF1:
DJNZ20H,RETURN1;1s还没有到,那么就返回继续计数100s
MOV20H,#4AH;否则,重新装入中断次数计数值
MOVA,30H;
CJNEA,#00H,B0
MOVA,31H
CJNEA,#00H,B0
MOVA,32H
CJNEA,#00H,B0
LJMPSPEAKER
B0:
MOVA,32H
CJNEA,#00H,W0
LJMPY0
W0:
DECA
MOV32H,A
ANLA,#0FH
JNZQ0
MOVA,32H
CLRC
SUBBA,#06H
MOV32H,A
Q0:
DEC32H
LJMPRETURN1
Y0:
MOV32H,#59H
MOVA,31H
CJNEA,#00H,W1
LJMPY1
W1:
DECA
MOV31H,A
ANLA,#0FH
JNZQ1
MOVA,31H
CLRC
SUBBA,#06H
MOV31H,A
Q1:
DEC31H
LJMPRETURN1
Y1:
MOV31H,#59H
MOVA,30H
CJNEA,#00H,W2
LJMPY2
W2:
DECA
MOV30H,A
ANLA,#0FH
JNZQ2
MOVA,30H
CLRC
SUBBA,#06H
MOV30H,A
Q2:
DEC30H
LJMPRETURN1
Y2:
LJMPRETURN1
RETURN1:
SETBEA
POPPSW
POPAcc
RETI
SPEAKER:
NOP
NOP
SS:
CPLP1.7
LCALLDISPLAY
NOP
NOP
NOP
NOP
JMPSS
RET;延时子程序5ms
DELAY:
MOVR6,#5
D1:
MOVR7,#250
D0:
NOP
NOP
DJNZR7,D0
DJNZR6,D1
RET
END