简易时钟单片机.docx
《简易时钟单片机.docx》由会员分享,可在线阅读,更多相关《简易时钟单片机.docx(9页珍藏版)》请在冰豆网上搜索。
简易时钟单片机
简易电子时钟设计
一,设计要求:
1,P1.3行接地
2,设P1.3行上从左到右4个键依次为:
启动/停止键、切换键、加1键、清零键
3,开机后处于走时或不走时状态,显示预定的分秒值,不走时时分单元或秒单元对应小数点亮,走时时所有小数点不亮
4,启动/停止键的功能:
不走时时按下该键后从当前显示时间开始走时,分和秒单元均在00-59之间变化,走时按下该键后停止走时,显示当前时间
5,切换键的功能:
每按1次小数点亮的单元在分单元和秒单元之间切换
6,加1键的功能:
按1次小数点亮对应的单元加1,分和秒单元均在00-59之间变化
7,清零键的功能:
按下后分和秒显示的数值均为00
8,不走时状态时启动/停止键、切换键、加1键和清零键4个键均有效
9,走时状态时启动/停止键有效,其他3个键无效
二、硬件电路原理图:
三、设计思路
1、总体设计原理:
开始
设定分秒值
设秒的计数值=16
设为不走时状态
开启定时中断
指向秒单元
开启定时器
等待
开始读键
重赋定时器初值是否有键按下?
RETI
是否走时状态?
是启动键?
读键是切换键?
是否有键按下?
是否停止键?
是加1键?
秒计数值-1=0?
进入不走时状态是清零键?
改变分秒值RETI
显示分秒单元清零
RETI指针单元加一
改变指针
RETI进入运行状态
2、局部设计原理:
(1);读键
设定70H初值为0FFH
给P1送初值0FFH
P1的值送A
70H和A的值相等?
RETI
A值送回70H
Acc.4是否为0按下为启动/停止键
Acc.5是否为0按下为切换键
Acc,6是否为0按下为加一键
Acc,7是否为0按下为清零键
RETI
(2);改变分秒值
秒单元的值送AA值十进制调整
A值加一A值送回分单元
A值十进制调整A是否为60显示
A值送回秒单元分单元清零
A值是否为60显示RETI
秒单元清零
分单元送A
A值加一
四、程序编写调试过程回顾:
(1);十进制调整
调试时发现,按加一键时,分或秒会从零到九,又从零到五,之后又从零到九,从零到五如此重复变化,这是按照十六进制变化,返回程序查看时,发现加一键的程序设计中的分单元或秒单元中的值未进行十进制调整。
(2);分或秒单元清零
调试时发现,按加一键时,分或秒加到59时,再按一下会出现乱码,这是在加一键的程序设计中未对分或秒单元设置满60时清零分或秒单元。
(3);小数点
调试时发现,在走或不走时分或秒单元的小数点都会亮,不符合程序设计要求:
走时小数点不亮。
这是小数点的程序设计中为设置走时不亮的限制条件。
五、原程序:
ORG0000H
LJMPMAIN
ORG000BH
LJMPIT0P
ORG1000H
MAIN:
MOV43H,#00H
MOV42H,#00H
MOV41H,#00H
MOV40H,#00H
MOV70H,#0FFH
MOV33H,#00H
MOV34H,#00H
MOVR3,#16
CLR20H.0
SETB20H.1
MOVTMOD,#01H
MOVTL0,#0DDH
MOVTH0,#85H
SETBTR0
SETBET0
SETBEA
JMP$
IT0P:
MOVTL0,#0DDH
MOVTH0,#85H
JNB20H.0,NZ
MOVP1,#0FFH
MOVA,P1
CJNEA,70H,LOOP
DJNZR3,XIANSHI
MOVR3,#16
MOVA,#01H
ADDA,34H
DAA
MOV34H,A
CJNEA,#60H,XIANSHI
MOV34H,#00H
MOVA,#01H
ADDA,33H
DAA
MOV33H,A
CJNEA,#60H,XIANSHI
MOV33H,#00H
LCALLXIANSHI
RETI
NZ:
MOVP1,#0FFH
MOVA,P1
CJNEA,70H,LOOP1
RETI
LOOP1:
MOV70H,A
JNBACC.4,QD
JNBACC.5,ZH
JNBACC.6,JY
JNBACC.7,Q0
RETI
QD:
SETB20H.0
RETI
ZH:
CPL20H.1
LCALLXIANSHI
RETI
JY:
JNB20H.1,FDG
MOVA,#01H
ADDA,34H
DAA
MOV34H,A
CJNEA,#60H,XIANSHI
MOV34H,#00H
LCALLXIANSHI
RETI
FDG:
MOVA,#01H
ADDA,33H
DAA
MOV33H,A
CJNEA,#60H,XIANSHI
MOV33H,#00H
LCALLXIANSHI
RETI
Q0:
MOV33H,#00H
MOV34H,#00H
LCALLXIANSHI
RETI
LOOP:
MOV70H,A
JNBACC.4,NEXT
JNBACC.5,NEXT1
JNBACC.6,NEXT1
JNBACC.7,NEXT1
RETI
XIANSHI:
MOVDPTR,#TAB
MOVA,#0FH
ANLA,34H
MOVCA,@A+DPTR
MOV40H,A
MOVDPTR,#TAB1
MOVA,#0F0H
ANLA,34H
SWAPA
MOVCA,@A+DPTR
MOV41H,A
MOVDPTR,#TAB
MOVA,#0FH
ANLA,33H
MOVCA,@A+DPTR
MOV42H,A
MOVDPTR,#TAB1
MOVA,#0F0H
ANLA,33H
SWAPA
MOVCA,@A+DPTR
MOV43H,A
JB20H.0,LOOP3
JNB20H.1,FD
MOVA,40H
CLRC
MOVACC.0,C
MOV40H,A
LOOP3:
MOVSBUF,43H
JNBTI,$
CLRTI
MOVSBUF,42H
JNBTI,$
CLRTI
MOVSBUF,41H
JNBTI,$
CLRTI
MOVSBUF,40H
JNBTI,$
CLRTI
RETI
FD:
MOVA,42H
CLRC
MOVACC.0,C
MOV42H,A
LJMPLOOP3
RETI
NEXT:
CLR20H.0
LCALLXIANSHI
RETI
NEXT1:
RETI
TAB:
DB9H,7DH,07H,15H,71H,91H,81H,3DH,01H,11H
TAB1:
DB09H,7DH,07H,15H,71H,91H
END
六、心得体会:
在本次实验中,受益良多,在课本学习的本模糊不清的理论知识,通过本次实验都有了清晰的了解和比较熟练的掌握。
比如对定时器的使用、中断的使用和显示、查表、循环与分支程序设计等。
我也体会到了只是掌握了理论,而不会应用到实践中去,那就不是自己的知识。