|
可以看看時鐘程序是怎么樣設(shè)計的。

Z8279 EQU 08701H ;8279 狀態(tài)/命令口地址 D8279 EQU 08700H ;8279 數(shù)據(jù)口地址 LEDMOD EQU 00H ;左邊輸入 八位字符顯示 ;外部譯碼鍵掃描方式,雙鍵互鎖 LEDFEQ EQU 2FH ;掃描速率 LEDCLS EQU 0C1H ;清除顯示 RAM LEDWR0 EQU 80H ;設(shè)定的將要寫入的顯示RAM地址 ORG 0000H AJMP START ORG 001BH ;INT T1 入口地址 AJMP INT_T1 ORG 0040HSTART: MOV SP,#60H LCALL INIT8279 ;初始化8279 MOV R3,#0H ;時 MOV R2,#0H ;分 MOV R1,#0H ;秒 MOV R6,#0H ;標(biāo)志 MOV TMOD,#10H MOV TL1,#00H ;50 MS 的時間常數(shù) MOV TH1,#04CH MOV R0,#20 SETB TR1 SETB ET1 SETB EA ;允許中斷WAIT: CJNE R6,#0FFH,WAIT LCALL DISPLAY MOV R6,#0 SJMP WAIT INIT8279: ;8279初始化子程序 PUSH DPH ;保存現(xiàn)場 PUSH DPL PUSH ACC LCALL DELAY ;延時 MOV DPTR ,#Z8279 MOV A,#LEDMOD ;置8279工作方式 MOVX @DPTR,A MOV A,#LEDFEQ ;置鍵盤掃描速率 MOVX @DPTR,A MOV A,#LEDCLS ;清除 LED 顯示 MOVX @DPTR,A LCALL DELAY ;延時 POP ACC ;恢復(fù)現(xiàn)場 POP DPL POP DPH RET ;顯示字符子程序 ;輸入R4,位置 R5,值DISLED: PUSH DPH ;保存現(xiàn)場 PUSH DPL PUSH ACC MOV A,#LEDWR0 ;置顯示起始地址 ADD A,R4 ;加位置偏移量 MOV DPTR,#Z8279 MOVX @DPTR,A ;設(shè)定顯示位置 MOV DPTR,#LEDSEG ;置顯示常數(shù)表起始位置 MOV A,R5 MOVC A,@A+DPTR ;查表 MOV DPTR,#D8279 MOVX @DPTR,A ;顯示數(shù)據(jù) POP ACC ;恢復(fù)現(xiàn)場 POP DPL POP DPH RETDELAY: ;延時子程序 PUSH 0 ;保存現(xiàn)場 PUSH 1 MOV 0,#0HDELAY1: MOV 1,#0H DJNZ 1,$ DJNZ 0,DELAY1 POP 1 ;恢復(fù)現(xiàn)場 POP 0 RET INT_T1: ;INT_T1中斷服務(wù)子程序 PUSH DPH ;保護(hù)現(xiàn)場 PUSH DPL PUSH ACC PUSH PSW CLR TR1 MOV TL1,#00H ;50MS 定時常數(shù) MOV TH1,#4CH SETB TR1 DJNZ R0,EXIT ;判斷毫秒=0 MOV R0,#20 ;DELAY 1 SECOND MOV R6,#0FFH ;置秒標(biāo)志 CJNE R1,#59H,SECOND;判斷秒=59 MOV R1,#99H CJNE R2,#59H,MINUTE;判斷分=59 MOV R2,#99H CJNE R3,#23H,HOUR ;判斷時=23 MOV R3,#99HHOUR: MOV A,R3 ADD A,#1 ;時加1 DA A MOV R3,AMINUTE: MOV A,R2 ADD A,#1 ;分加1 DA A MOV R2,ASECOND: MOV A,R1 ADD A,#1 ;秒加1 DA A MOV R1,AEXIT: POP PSW ;恢復(fù)現(xiàn)場 POP ACC POP DPL POP DPH RETI ;中斷返回DISPLAY: MOV A,R3 ANL A,#0FH MOV R5,A MOV R4,#6 LCALL DISLED ;顯示小時低位 MOV A,R3 SWAP A ANL A,#0FH MOV R5,A MOV R4,#7 LCALL DISLED ;顯示小時高位 MOV A,R2 ANL A,#0FH MOV R5,A MOV R4,#3 LCALL DISLED ;顯示分鐘低位 MOV A,R2 SWAP A ANL A,#0FH MOV R5,A MOV R4,#4 LCALL DISLED ;顯示分鐘高位 MOV A,R1 ANL A,#0FH MOV R5,A MOV R4,#0 LCALL DISLED ;顯示秒低位 MOV A,R1 SWAP A ANL A,#0FH MOV R5,A MOV R4,#1 LCALL DISLED ;顯示秒高位 RET LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H;'0,1,2,3,4,5,6,7' DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H;'8,9,A,B,C,D,E,F' DB 6DH,02H,08H,00H,59H,0FH,76H;'U,-,_, ,I,O,P, ' END |