电子钟专周报告Word格式文档下载.docx
《电子钟专周报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《电子钟专周报告Word格式文档下载.docx(26页珍藏版)》请在冰豆网上搜索。
1.整体设计
此次设计主要是应用单片机来设计电子时钟,硬件部分主要分以下电路模块:
显示电路用8个共阴数码管分别显示,小时、分钟和秒,通过动态扫描进行显示,从而避免了译码器的使用,同时节约了I/0端口,使电路更加简单。
单片机采用AT89S51系列,这种单片机应用简单,适合电子钟设计。
电路的总体设计框架如下:
2.分块设计
模块电路主要分为:
输入部分、输出部分,复位。
2.1输入部分
输入信号主要是各种模式选择和调整信号,由按键开关提供。
以下为输入部分样:
在本实验中主要用用P3口输入按键信号,还用到了特殊的P0口。
对于P0口,由于其存在高阻状态,为了实现开关功能,给其添加上拉电阻,具体如下图所示:
2.2输出部分
本电路的输出信号为7段数码管的位选和段选信号,闹铃脉冲信号,提示灯信号。
本实验的数码管是共阴的,为了防止段选信号不能驱动数码管,故在P1口连接上拉电阻后,再送段选信号,以提高驱动,位选信号直接从P2口接入,如下图:
闹铃由P1.0端输出,模块如下:
各模块拼接组合,电路总体设计图如下:
B.程序设计
B.1程序总体设计
本实验用汇编程序完成.
NO
YES
结合电路图,程序设计的整体思路为:
接通电源,数码管显示时,分,秒。
并且走时显示LED灯每隔1秒改变一次明暗,此为正常工作模式。
以下为在该工作方式下模式选择的按键方式:
1.按4开始计时,秒表开始,停止
2.按1调整秒,按4继续计时
3.按2调整分,按4继续计时
4.按3调整时,按4继续计时
5.按5设置闹钟时间,再按5回复原有时间,闹铃声停止
6.按6所有设置清零
B.2程序主要模块
B.2.1不加扩展功能
主程序开始
显示时间
按1
按
2
按3
按4
5
6
调秒
调分
调时
开始
暂停、继续
清零
按5
是否有调
主程序
程序清单:
;
12M晶振20100114调试完成0315修改20110303注释
STRTEQUP2.6
STPEQUP2.7
CLRREQUP3.0
SECEQUP3.5
MINEQUP3.6
HOUREQUP3.7
ORG00H
SJMPMAIN
ORG0BH
AJMPT0INT0
ORG30H
MAIN:
MOVSP,#60H
MOVR4,#20
MOVTMOD,#01H
MOVTH0,#03CH;
#9EH12M晶振时定时初值取#3CB0H,还可细调,如TL=#0B7H,可以更准
MOVTL0,#0B0H;
#58H
SETBET0
SETBEA
;
MOV28H,#12
kS:
LCALLDISP;
秒调整按键
JBSEC,KM
LCALLDISP
JNBSEC,$-3
AJMPSINC
kM:
JBMIN,KH;
分调整按键
JNBMIN,$-3
AJMPMINC
KH:
JBHOUR,K1;
时调整按键
JNBHOUR,$-3
AJMPHINC
SINC:
INC26H;
秒调整
MOVA,26H
CJNEA,#60,SINC0
MOV26H,#0
SINC0:
AJMPKS
MINC:
INC27H;
分调整
MOVA,27H
CJNEA,#60,MINC0
MOV27H,#0
MINC0:
AJMPKM
HINC:
INC28H;
时调整
MOVA,28H
CJNEA,#24,HINC0
MOV28H,#0
HINC0:
AJMPKH
k1:
开始键
JBSTRT,K2
JNBSTRT,$-3
AJMPSTART
k2:
JBSTP,K3;
暂停键
JNBSTP,STOP
K3:
JBCLRR,KS
JNBCLRR,CLEAR;
清零键
START:
SETBTR0;
AJMPK1
STOP:
CLRTR0;
暂停
AJMPK2
CLEAR:
MOVA,#0
MOV26H,A
MOV27H,A
MOV28H,A
DISP:
MOVB,#10
DIVAB
MOV20H,B;
余数(秒个位数)
MOV21H,A;
商(秒十位数)
MOV22H,B;
余数(分个位数)
MOV23H,A;
商(分十位数)
MOV24H,B;
余数(时个位数)
MOV25H,A;
商(时十位数)
MOVA,20H;
秒个位
ACALLSEG7
MOVP0,A
CLRP2.0
ACALLDLY
SETBP2.0
MOVA,21H;
秒十位
CLRP2.1
SETBP2.1
MOVA,22H;
分个位
SETBP0.7
CLRP2.2
SETBP2.2
MOVA,23H;
分十位
ACALLSEG7
CLRP2.3
SETBP2.3
MOVA,24H;
时个位
CLRP2.4
SETBP2.4
MOVA,25H;
时十位
CLRP2.5
SETBP2.5
RET
T0INT0:
MOVTH0,#03CH;
#9EH;
定时中断子程序。
重装定时常数
MOVTL0,#0B0H;
#58H
DJNZR4,T0INTR;
50msX20=1S,未满20次,跳出中断子程序
1S,秒存储单元内数+1
CJNEA,#60,T0INTR;
未满60S,跳出中断。
MOV26H,#0;
满60S,秒单元清零
分+1
CJNEA,#60,T0INTR
INC28H
CJNEA,#24,T0INTR
T0INTR:
RETI
DLY10:
MOVR3,#30
D0:
DJNZR3,D0
RET
DLY:
MOVR7,#2
D1:
MOVR6,#40
DJNZR6,$
DJNZR7,D1
SEG7:
INCA
MOVCA,@A+PC
DB03FH;
0共阴
DB006H;
1
DB05BH;
DB04FH;
3
DB066H;
4
DB06DH;
DB07DH;
DB007H;
7
DB07FH;
8
DB06FH;
9
END
总体电路图:
加上整点提醒,响1S,闹铃响3S,定时整点总程序如下:
STRTEQUP2.6
STPEQUP2.7
CLRREQUP3.0
SECEQUP3.5
MINEQUP3.6
HOUREQUP3.7
ORG00H
AJMPMAIN
ORG0BH
AJMPT0INT
ORG1BH
AJMPT1INT
ORG30H
MOVSP,#60H
MOVR4,#20
MOVTMOD,#11H
MOVTH0,#03CH;
#9EH定时初值取#3CB0H,还可细调如TL=#0B7H,可以更准
MOVTL0,#0B0H;
MOVTH1,#0FEH
MOVTL1,#0CH
SETBEA
SETBET0
SETBET1
ACALLDISP
ACALLALARM
JBSEC,KM;
JNBSEC,$-2
AJMPSINC
JBMIN,KH;
JNBMIN,$-2
AJMPMINC
JBHOUR,K1;
JNBHOUR,$-2
AJMPHINC
JB7FH,SINC_A
INC26H;
MOVA,26H
CJNEA,#60,SINC0
MOV26H,#0
AJMPSINC0
SINC_A:
INC36H;
闹秒调整
MOVA,36H
MOV36H,#0
JB7FH,MINC_A
INC27H;
MOVA,27H
CJNEA,#60,MINC0
MOV27H,#0
MINC_A:
INC37H;
闹分调整
MOVA,37H
MOV37H,#0
AJMPKM
JB7FH,HINC_A
INC28H;
MOVA,28H
CJNEA,#24,HINC0
MOV28H,#0
HINC_A:
INC38H;
闹时调整
MOVA,38H
MOV38H,#0
AJMPKH
ACALLDISP;
JBSTRT,K2
JNBSTRT,$-2
AJMPSTART
JBSTP,K3;
JNBSTP,$-2
AJMPCL_AL
JBCLRR,KS0
JNBCLRR,CLEAR;
KS0:
AJMPKS
CPLTR0;
开始/暂停
SETB7DH;
7DH为开始键按下标志,此作为允许闹铃标志
AJMPK1
CL_AL:
CPL7FH;
7FH作时钟和闹铃标志位
AJMPK2
CLRTR0;
MOVA,#0
MOV26H,A
MOV27H,A
MOV28H,A
MOV36H,A
MOV37H,A
MOV38H,A
JB7FH,DISP_A
MOV29H,26H;
秒送秒显示缓存
MOV2AH,27H
MOV2BH,28H
AJMPDISP1
DISP_A:
MOV29H,36H
MOV2AH,37H
MOV2BH,38H
DISP1:
MOVA,29H
MOVB,#10
DIVAB
MOV20H,B;
MOV21H,A;
MOVA,2AH
MOV22H,B;
MOV23H,A;
MOVA,2BH
MOV24H,B;
MOV25H,A;
MOVA,20H;
ACALLSEG7
MOVP0,A
CLRP2.0
ACALLDLY
SETBP2.0
MOVA,21H;
CLRP2.1
SETBP2.1
MOVA,22H;
SETBP0.7
CLRP2.2
SETBP2.2
MOVA,23H;
ACALLSEG7
CLRP2.3
SETBP2.3
MOVA,24H;
CLRP2.4
SETBP2.4
MOVA,25H;
CLRP2.5
SETBP2.5
RET
ALARM:
JNB7DH,RT;
开始键未按下跳出
MOVA,28H;
开机时,时分秒都为0,跳出
JZAL0M
AJMPALARM1
AL0M:
JZAL0S
AL0S:
JZRT
ALARM1:
比较小时
CJNEA,38H,AL;
不等返回,相等,转分钟比较
MOVA,27H;
比较分钟?
CJNEA,37H,AL
MOVA,26H;
比较秒
CJNEA,36H,AL
AJMPALARM2;
转闹铃
AL:
整点提醒
JZRT;
小时不是00,判分是不是00
JNZRT;
分不是00,跳出
JNZRT
AJMPALARM3;
秒不为00,跳出。
为00,整点提醒
ALARM2:
闹铃3S
SETBTR1
MOVR0,#0
AJMPRT
ALARM3:
整点提醒1S
SETBTR1
MOVR0,#2
RT:
T0INT:
MOVTL0,#0B0H
DJNZR4,T0INTR;
INCR0;
响铃时间
CJNEA,#60,T0INTR;
MOV26H,#0;
CJNEA,#60,T0INTR
INC28H
CJNEA,#24,T0INTR
RETI
T1INT:
CPLP1.0
CJNER0,#3,T1RTI;
闹铃时间设为5秒
CLRTR1;
关闹铃
T1RTI:
MOVR7,#20
MOVR6,#25
DJNZR6,$
DJNZR7,$-4
INCA
MOVCA,@A+PC
DB03FH;
DB006H;
DB05BH;
DB04FH;
DB066H;
DB06DH;
DB07DH;
DB007H;
DB07FH;
DB06FH;
END
C.程序调试及仿真
2利用Proteus仿真实验过程截图:
普通时间显示模式仿真图,表示:
2点过2分11
设置闹钟2分钟
整点报时
五.实验总结及感想
一分耕耘,一分收获。
只有亲自用实践来验证这句话,在能得其要领。
经过这次单片机课程设计,我从一个单片机实践的门外汉,已经越升为略知一二的新手。
虽然还有很多有关单片机的应用有待学习,但万变不离其宗,只要深入了解单片的原理,全部知识点,各个细节,一切设计皆有可能。
刚开始的时候完全不知道怎么做,毕竟我们学单片机的时间不长,这学期开的课我在整体思路模糊的情况下,在网上大量收集资料,各种与电子时钟相关的文章,我阅读了不少。
从中找到了不少对我有帮助,以及在老师的帮助下慢慢的思路开始清晰。
通过和同组同学细心的推敲下,慢慢的对设计有了信心。
对资料有了一定的积累后我们开始了我们的设计,一点点的写程序修改再修改,慢慢的错误减少直到正确。
然后开始画图,慢慢的修改,直到仿真成功。
成功的那时候真的很开心。
实验中遇到了不少问题,接下来总结一下,共同探讨。
1.开始写程序时由于对汇编语言有的指令不熟悉导致很多错误,经过老师指导及翻书查询把错误找出来,对症下药。
感觉到自己知识学得不牢靠,再以后的学习中严格要求自己。
2.按键问题。
我们的设计中,功能选择是通过按键开关实现的。
在仿真中发现,调整数值时,有时按键反应太快,按一次,跳了几下,使设置时间,。
但是仿真多了之后,找到了按键(实际上是按鼠标)的节奏,对按键的掌控力提高了不少。
3.P0口开关问题。
P0口比较特殊,它存在高阻态,要使其输入不是高电平就是低电平,就要接上拉电阻,给其高电平输入。
4.对画电路图有一定的难度。
主要是对元件不熟,不知道该选什么。
还有就是对元件的英文不知道,有的只有慢慢一个个找。
比如在选择的过程中,第一次没注意显示屏是共阴还是共阳,选了个共阳的没仿真出来,经过查找原因换了个共阴的就可以了。
以上就是实验中遇到的主要问题,基本上都找到了相应的解决之道。
整个实验的过程就是一个解决问题的过程,每天都解决一些问题,我的实验也就解决了,当然结果不重要,功利化的追求结果,会使人浮躁,还是享受那份疑难迎刃而解的快感吧!
附件:
A.Proteus电路图