多功能电子钟课程设计报告文档格式.docx
《多功能电子钟课程设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《多功能电子钟课程设计报告文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
5.若高位为0,则高位可灭零显示。
二、实验效果
1.常态以时间显示
2.编程使该电子钟有4个键,分别为校正键,“十”键,切换键及显示键。
3.正常显示的状态下,“+”键和显示键无效,校正状态下切换键无效。
4.四个键的作用分别为:
①校正键,在正常的状态下,第一次按下校正键表示校正月发功能,此时显示当日的日期及月显示闪烁。
第二次按下此键表示校日的功能,显示当前日期并且日闪烁显示。
第三次按下此键表示校时的功能,此时显示当前时间并且时闪烁显示。
第四次按下校正键表示校分功能,显示当前时间并且分闪烁显示。
②“+”键,功能为当前校正的内容在每按一下此键的情况下不进位的在该闪烁的内容上加“1”。
③确定键,使校正的内容生效并且返回正常显示时间的状态下。
④切换键,表示切换当前显示的模式,如:
当前显示的是时间,则按一下切换键则切换到日期的显示状态,反之亦成立。
如在按下切换键的状态下,5秒后没任何操作则返回到正常显示时间的状态。
三.实验思路(原理)
由以上分析可知要使日期及时间显示出来,首先想到的是要将它们存放起来,然后再将其送往数码管显示出来,这里又牵涉到一个问题,怎样将它们存放起来又要存到哪儿去?
这就要我们给它们分配存储单元以备送往显示,例如准备四个存储单元30H~33H分别存储月、日、时和分,送往显示时要为其准备显示缓冲存储区,如3AH、3BH,月、时送3AH缓存,日、分送3BH缓存备送显示,接下来就是相关方式初始化为内容显示作准备,其中包括时间/日期(T/D)标志的置位,校正标志的清除及定时期/计数期工作方式及初始化。
选好工作方式及计算出初值,打开中断申请标志位允许显示及校正中断服务程序的调用,然后,设计程序将显示缓存区的内容分解成BCD码送入43H~40H并以备显示,在该状态下要检查当前状态是否处于校正状态,若不是则将其静态显示出来,若是处于校正状态下,查看2FH.3是否为0,若是则送往静态显示,若不是的话,将对应的校正内容的BCD码单元送入DAH再显示出校正状态。
校正中断服务程序设计的思路:
首先判断其是否处于校正状态,若不是处于校正状态,再检查是否有按下时间/日期显示切换键。
如果已按下该键则取反T/D显示标志位,在该情况下又要判断其标志位的状态,T/D若为1则将时间内容送入显示缓冲区以待显示,若其值为0则将日期内容送入显示缓冲区以待显示。
在没有按下显示切换键的情况下,确认是否要按下校正键,若不按下,则同样判断时间/日期显示的标志位值,若为“1”则显示时间,为“0”则显示日期。
若按下校正键,则此时切换键无效,在该情况下,若按一下校正键则校正指针SP的值相应的做加“1”操作,指向下一个要校正的内容,此后判断21H.0的值,若为0则将日期内容送入显示缓存区,若为1则将时间内容送入显示缓存区以待显示。
显示后返回先前状态,若在校正状态下按下“+”键,则校正指针相对应的校正内容单元加1,值满不进位的加1,而后同样判断20H.0的值,情况与上面相同,而在校正状态下按确定键,则清楚校正标志而置位时间/日期显示标志,将时间显示的内容送入显示缓存区以备显示。
返回到正常状态下(显示时间状态)。
4.实验流程图
(1).时间中断服务程序
5.实验程序
ORG0000H;
程序入口地址
LJMPMAIN
ORG000BH
SJMPITOP
ORG0030H
MAIN:
CLRA
MOV30H,A;
程序初始化,计数单元设初值
MOV32H,#59
MOV34H,#23
MOV36H,#01H
MOV38H,#01H
MOV66H,#03H
MOV67H,#03H
MOV40H,#00H
MOV2FH,#0AH
CLR20H.1
CLR20H.2
CLR20H.3
CLR20H.4
MOVTMOD,#01H;
设置计数器的计数方式
MOVTL0,#0B0H;
给计数器装初值
MOVTH0,#3CH
CLRPT0;
中断允许设置
SETBTR0
SETBET0
SETBEA
HERE:
SJMPHERE
ITOP:
MOVTL0,#0B0H
MOVTH0,#3CH
LCALLDISP;
调用显示子程序
DJNZ2FH,LOOP
MOV2FH,#0AH;
秒计时初值设置
CPL20H.1
JB20H.1,LOOP1
MOV40H,#0FFH
AJMPLOOP2
LOOP2:
INC30H;
计时程序
MOVA,#78H
CJNEA,30H,LOOP;
判断秒是否已到
MOV30H,#00H
INC32H
MOVA,#3CH
CJNEA,32H,LOOP;
判断分是否已到
MOV32H,#00H
INC34H
MOVA,#18H
CJNEA,34H,LOOP;
判断时是否已到
MOV34H,#00H
INC30H
MOVA,#32
判断月是否已到
MOV30H,#01H
INC37H
MOVA,#DDH
CJNEA,38H,LOOP;
判断年是否已到
MOV38H,#01H
LOOP:
RETI
DISP:
JB20H.2,LOOP3;
显示子程序
MOV62H,32H;
显示内容送显示缓冲单元,如下类似
MOV64H,34H
SJMPLOOP4
LOOP3:
MOV62H,32H
LOOP4:
MOVA,62H
MOVB,#0AH
DIVAB
MOV63H,A
MOV62H,B
MOVA,64H
DIVAB;
使进制调整,备显示
MOV65H,A
MOV64H,B
MOVR4,#64H
MOVR0,#65H
MOVSCON,#00H
SEND:
MOVA,@R0
JNEMIE00
MOVA,#10H
MIE00:
JNB20H.4,MIE0
JNB20H.3,MIE0
MIE0:
MOVDPTR,#TAB;
查找显示内容程序,用于显示
MOVCA,@A+DPTR
MOVSUBF,A
JNBTI,$
CLRTI
DECR0
JNB20H.4,MIE1;
判断显示内容
JNB20H.3,MIE1
JNB2FH.3,MIE1
MIE1:
MOVDPTR
ADDA,40H
MOVSBUF,A
DECR0
MOVA,@R0
JNEMIE11
MIE11:
JNB20H.4,MIE2
JNB20H.3,MIE2
JNB2FH.3,MIE2
MIE2:
MOVDPTR,#TAB
MOVCA,A+@DPTR
JNB20H.4,MIE3
JNB20H.3,MIE3
JNB2FH.3MIE3
MIE3:
JNBSBUF,A
RET
KEY:
MOVA,P1;
判键按下.子程序
CJNEA,#0FFH,KEYIN
LJMPEXIT
KEYIN:
LCALLDEL10MS;
.调用延时程序
MOVA,P1
CJNEA,#FFH,KEY00
KEY00:
JNBACC.4,KEY1;
.判断哪个键按下
JNBACC.5,KEY2
JNBACC.6,KEY3
JNBACC.7,KEY4
KEY1:
确定哪个键按下。
如下类似
CJNEA,#0FFH,KEY1
CPL20H.2
KEY2:
MOVA,P1
CJNEA,#0FFH,KEY2
SETB20H.4
INC66H
ANL66H,#03H
MOVA,66H
ONE:
CJNEA,#00H,TWO;
调式程序,判断该调试的内容。
CPL20H.3
SJMPEXIT
TWO:
CJNEA,#01H,THR
THR:
CJNEA,#02H,FOR
FOR:
CJNEA,#03H,ONE
KEY3:
MOVA,P1
CJNEA,#0FFH,KEY3
JNB20H。
4,EXIT
MOVA,66H
YUE:
CJNEA,#00H,RISHU;
月调试程序
INC38H
MOVA,#13
CJNEA,38H,EXIT
RISHU:
CJNEA,#01H,SHI;
日期调试子程序
INC36H
MOVA,#32H
CJNEA,36H,EXIT
MOV36H,#01H
SHI:
CJNEA,,#02H,FEN;
时调试子程序
CJNEA,#34H,EXIT
FEN:
CJNEA,#03H,YUE
CJNEA,3H,EXIT
KEY4:
CJNEA,#0FFH,KEY4
MOV66H,#03H
EXIT:
RET
DEL10MS:
MOVR7,#0AH;
延时10MS子程序
DL:
MOVR6,#077H
DL1:
DJNZR6,#0FFH
DJNZR7,DL
TAB:
DB09H7DH07H15H71H91H81H
DB3DH01H11H21H09H8BH
DB45H83H0A3H0FFH0F7H
六.实验心得
通过本次实验发现自己很多的不足,也就在这次实验中学到了很多东西,包括一些基本的编程,比如延时,显示等等,也更加熟悉了程序的基本结构,子程序的调用和中断程序的使用,在本次实验中实验还是有一点误差,主要原因是在设计程序时,在计时过程中,没有考虑到指令执行所用的时间造成计时的误差。