1、5 若高位为0,则高位可灭零显示。二、 实验效果1 常态以时间显示2 编程使该电子钟有4个键,分别为校正键,“十”键,切换键及显示键。3 正常显示的状态下,“+”键和显示键无效,校正状态下切换键无效。4 四个键的作用分别为:校正键,在正常的状态下,第一次按下校正键表示校正月发功能,此时显示当日的日期及月显示闪烁。第二次按下此键表示校日的功能,显示当前日期并且日闪烁显示。第三次按下此键表示校时的功能,此时显示当前时间并且时闪烁显示。第四次按下校正键表示校分功能,显示当前时间并且分闪烁显示。“+”键,功能为当前校正的内容在每按一下此键的情况下不进位的在该闪烁的内容上加“1”。确定键,使校正的内容生
2、效并且返回正常显示时间的状态下。切换键,表示切换当前显示的模式,如:当前显示的是时间,则按一下切换键则切换到日期的显示状态,反之亦成立。如在按下切换键的状态下,5秒后没任何操作则返回到正常显示时间的状态。三实验思路(原理)由以上分析可知要使日期及时间显示出来, 首先想到的是要将它们存放起来,然后再将其送往数码管显示出来,这里又牵涉到一个问题,怎样将它们存放起来又要存到哪儿去?这就要我们给它们分配存储单元以备送往显示,例如准备四个存储单元30H33H分别存储月、日、时和分,送往显示时要为其准备显示缓冲存储区,如3AH、3BH,月、时送3AH缓存,日、分送3BH缓存备送显示,接下来就是相关方式初始
3、化为内容显示作准备,其中包括时间/日期(T/D)标志的置位,校正标志的清除及定时期/计数期工作方式及初始化。选好工作方式及计算出初值,打开中断申请标志位允许显示及校正中断服务程序的调用,然后,设计程序将显示缓存区的内容分解成BCD码送入43H40H并以备显示,在该状态下要检查当前状态是否处于校正状态,若不是则将其静态显示出来,若是处于校正状态下,查看2FH.3是否为0,若是则送往静态显示,若不是的话,将对应的校正内容的BCD码单元送入DAH再显示出校正状态。校正中断服务程序设计的思路:首先判断其是否处于校正状态,若不是处于校正状态,再检查是否有按下时间/日期显示切换键。如果已按下该键则取反T/
4、D显示标志位,在该情况下又要判断其标志位的状态,T/D若为1则将时间内容送入显示缓冲区以待显示,若其值为0则将日期内容送入显示缓冲区以待显示。在没有按下显示切换键的情况下,确认是否要按下校正键,若不按下,则同样判断时间/日期显示的标志位值,若为“1”则显示时间,为“0”则显示日期。若按下校正键,则此时切换键无效,在该情况下,若按一下校正键则校正指针SP的值相应的做加“1”操作,指向下一个要校正的内容,此后判断21H.0的值,若为0则将日期内容送入显示缓存区,若为1则将时间内容送入显示缓存区以待显示。显示后返回先前状态,若在校正状态下按下“+”键,则校正指针相对应的校正内容单元加1,值满不进位的
5、加1,而后同样判断20H.0的值,情况与上面相同,而在校正状态下按确定键,则清楚校正标志而置位时间/日期显示标志,将时间显示的内容送入显示缓存区以备显示。返回到正常状态下(显示时间状态)。4实验流程图(1).时间中断服务程序5 实验程序 ORG 0000H ;程序入口地址 LJMP MAIN ORG 000BH SJMP ITOP ORG 0030HMAIN:CLR A MOV 30H,A ;程序初始化,计数单元设初值 MOV 32H,#59 MOV 34H,#23 MOV 36H,#01H MOV 38H,#01H MOV 66H,#03H MOV 67H,#03H MOV 40H,#00H
6、 MOV 2FH,#0AH CLR 20H.1 CLR 20H.2 CLR 20H.3 CLR 20H.4 MOV TMOD,#01H ;设置计数器的计数方式 MOV TL0,#0B0H ;给计数器装初值 MOV TH0,#3CH CLR PT0 ;中断允许设置 SETB TR0 SETB ET0 SETB EAHERE: SJMP HEREITOP: MOV TL0,#0B0H MOV TH0,#3CH LCALL DISP ;调用显示子程序 DJNZ 2FH,LOOP MOV 2FH,#0AH ;秒计时初值设置 CPL 20H.1 JB 20H.1,LOOP1 MOV 40H,#0FFH
7、AJMP LOOP2LOOP2: INC 30H ;计时程序 MOV A,#78H CJNE A,30H,LOOP ;判断秒是否已到 MOV 30H,#00H INC 32H MOV A,#3CH CJNE A,32H,LOOP ;判断分是否已到 MOV 32H,#00H INC 34H MOV A,#18H CJNE A,34H,LOOP ;判断时是否已到 MOV 34H,#00H INC 30H MOV A,#32判断月是否已到 MOV 30H,#01H INC 37H MOV A,#DDH CJNE A,38H,LOOP ;判断年是否已到 MOV 38H,#01HLOOP: RETIDI
8、SP: JB 20H.2,LOOP3 ;显示子程序 MOV 62H,32H ;显示内容送显示缓冲单元,如下类似 MOV 64H,34H SJMP LOOP4LOOP3: MOV 62H,32HLOOP4: MOV A,62H MOV B,#0AH DIV AB MOV 63H,A MOV 62H,B MOV A,64H DIV AB ;使进制调整,备显示 MOV 65H,A MOV 64H,B MOV R4,#64H MOV R0,#65H MOV SCON,#00HSEND: MOV A,R0 JNE MIE00 MOV A,#10HMIE00:JNB 20H.4,MIE0 JNB 20H.
9、3,MIE0MIE0:MOV DPTR,#TAB ;查找显示内容程序,用于显示 MOVC A,A+DPTR MOV SUBF,A JNB TI,$ CLR TI DEC R0 JNB 20H.4,MIE1 ;判断显示内容 JNB 20H.3,MIE1 JNB 2FH.3,MIE1MIE1:MOV DPTR ADD A,40H MOV SBUF,A DEC R0 MOV A,R0 JNE MIE11MIE11:JNB 20H.4,MIE2 JNB 20H.3,MIE2 JNB 2FH.3,MIE2MIE2:MOV DPTR,#TAB MOVC A,A+DPTR JNB 20H.4,MIE3 JN
10、B 20H.3,MIE3 JNB 2FH.3MIE3MIE3: JNB SBUF,A RETKEY:MOV A,P1 ;判键按下.子程序 CJNE A,#0FFH,KEYIN LJMP EXITKEYIN: LCALL DEL10MS ;.调用延时程序 MOV A,P1 CJNE A,#FFH,KEY00KEY00:JNB ACC.4,KEY1 ;.判断哪个键按下 JNB ACC.5,KEY2 JNB ACC.6,KEY3 JNB ACC.7,KEY4KEY1:确定哪个键按下。如下类似 CJNE A,#0FFH,KEY1 CPL 20H.2KEY2:MOV A,P1 CJNE A,#0FFH,
11、KEY2 SETB 20H.4 INC 66H ANL 66H,#03H MOV A,66HONE:CJNE A,#00H,TWO ;调式程序,判断该调试的内容。 CPL 20H.3 SJMP EXITTWO:CJNE A,#01H,THRTHR:CJNE A,#02H,FORFOR:CJNE A,#03H,ONEKEY3: MOV A,P1 CJNE A,#0FFH,KEY3 JNB 20H。4,EXIT MOV A,66HYUE:CJNE A,#00H,RISHU ;月调试程序 INC 38H MOV A,#13 CJNE A,38H,EXITRISHU:CJNE A,#01H,SHI ;
12、日期调试子程序 INC 36H MOV A,#32H CJNE A,36H,EXIT MOV 36H,#01HSHI:CJNE A,#02H,FEN ;时调试子程序 CJNE A,#34H,EXITFEN:CJNE A,#03H,YUE CJNE A,3H,EXITKEY4: CJNE A,#0FFH,KEY4 MOV 66H,#03HEXIT:RETDEL10MS:MOV R7,#0AH ;延时10MS子程序DL:MOV R6,#077HDL1:DJNZ R6,#0FFH DJNZ R7,DLTAB:DB 09H 7DH 07H 15H 71H 91H 81H DB 3DH 01H 11H 21H 09H 8BH DB 45H 83H 0A3H 0FFH 0F7H六实验心得 通过本次实验发现自己很多的不足,也就在这次实验中学到了很多东西,包括一些基本的编程,比如延时,显示等等,也更加熟悉了程序的基本结构,子程序的调用和中断程序的使用,在本次实验中实验还是有一点误差,主要原因是在设计程序时,在计时过程中,没有考虑到指令执行所用的时间造成计时的误差。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1