可以看看時鐘程序是怎么樣設(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 0040H
START:
MOV SP,#60H
LCALL INIT8279;初始化8279
MOV R3,#0H ;時
MOV R2,#0H ;分
MOV R1,#0H ;秒
MOV R6,#0H ;標志
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 ;恢復現(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 ;恢復現(xiàn)場
POP DPL
POP DPH
RET
DELAY: ;延時子程序
PUSH 0 ;保存現(xiàn)場
PUSH 1
MOV 0,#0H
DELAY1: MOV 1,#0H
DJNZ 1,$
DJNZ 0,DELAY1
POP 1 ;恢復現(xiàn)場
POP 0
RET
INT_T1: ;INT_T1中斷服務(wù)子程序
PUSH DPH ;保護現(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 ;置秒標志
CJNE R1,#59H,SECOND ;判斷秒=59
MOV R1,#99H
CJNE R2,#59H,MINUTE ;判斷分=59
MOV R2,#99H
CJNE R3,#23H,HOUR ;判斷時=23
MOV R3,#99H
HOUR:
MOV A,R3
ADD A,#1 ;時加1
DA A
MOV R3,A
MINUTE:
MOV A,R2
ADD A,#1 ;分加1
DA A
MOV R2,A
SECOND:
MOV A,R1
ADD A,#1 ;秒加1
DA A
MOV R1,A
EXIT:
POP PSW ;恢復現(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