?? clock.a51
字號:
ORG 0000H
AJMP MAIN
ORG 000BH
LJMP TIM0
ORG 001BH ;用來閃爍定時
LJMP TIM1
ORG 0100H
MAIN: MOV SP,#50H ;設置棧指針
MOV R2,#00H ;閃爍標記位清零
MOV R7,#00H ;調整標記位清亮?
MOV 28H,#00H ;T0定時中斷次數
MOV 29H,#00H ;T1定時中斷次數
MOV 21H,#00H ;秒單元清零
MOV 22H,#00H ;分單元清零
MOV 23H,#00H ;時單元清零
SETB ET0 ;開T0中斷
SETB ET1
SETB EA ;開中斷
MOV TMOD,#01H ;定時器初始化
MOV TL0,#0B0H ;賦定時初值
MOV TH0,#3CH
MOV TL1,#0B0H
MOV TH1,#3CH
SETB TR0 ;T0開始定時
CLR TR1 ;使T1可靠停止
NEXT: LCALL DISP ;調用顯示處理子程序
LCALL SCAN ;調用掃描子程序
LCALL KEY ;調用按鍵處理子程序
SJMP NEXT
;******************************************
;TO定時中斷處理子程序:
;******************************************
TIM0: PUSH ACC
PUSH PSW
MOV TL0,#0B0H
MOV TH0,#3CH
INC 28H ;中斷計數
MOV A,28H
CJNE A,#0AH,ETI0
MOV 28H,#00H ;一秒時間到
MOV A,21H
ADD A,#01H ;秒單元加一
DA A
MOV 21H,A
CJNE R7,#00H,J1
MOV 30H,A ;把秒單元數送入顯示緩沖單元
J1: CJNE A,#59H,ETI0
MOV 21H,#00H ;一分鐘時間到
MOV A,22H
ADD A,#01H ;分單元加一
DA A
MOV 22H,A
CJNE R7,#00H,J2
MOV 31H,A
J2: CJNE A,#59H,ETI0
MOV 22H,#00H ;一小時到
MOV A,23H
ADD A,#01H ;時單元加一
DA A
MOV 23H,A
CJNE R7,#00H,J3
MOV 32H,A
J3: CJNE A,#23H,ETI0
MOV 23H,#00H ;時單元清零
ETI0: POP PSW
POP Acc
RETI
;*******************************************
;T1定時中斷處理程序
;*******************************************
TIM1: PUSH ACC
PUSH PSW
MOV TL1,#0B0H
MOV TH1,#3CH
INC 29H ;中斷計數
MOV A,29H
CJNE A,#05H,ETI1 ;0.3秒時間到,用來閃爍延時
MOV 29H,#00H
MOV A,R2
CJNE A,#01H,LOOP1 ;R2為01秒閃爍
MOV 3EH,#0FDH ;使時位選能夠正常掃描
MOV 3FH,#0FEH
XRL 3AH,#20H ;使秒原來正常掃描的位選關閉,原來關閉的能夠正常掃描
XRL 3BH,#10H
AJMP ETI1
LOOP1: CJNE A,#02H,LOOP2 ;R2為02分閃爍
MOV 3AH,#0DFH ;使秒位選能夠正常掃描
MOV 3BH,#0EFH
XRL 3CH,#08H ;使分原來正常掃描的位選關閉,原來關閉的能夠正常掃描
XRL 3DH,#04H
AJMP ETI1
LOOP2: CJNE A,#03H,ETI1 ;R2為03時閃爍
MOV 3CH,#0F7H ;使分位選能夠正常掃描
MOV 3DH,#0FBH
XRL 3EH,#02H ;使時原來正常掃描的位選關閉,原來關閉的能夠正常掃描
XRL 3FH,#01H
ETI1: POP PSW
POP ACC
RETI
;*******************************************
;顯示處理子程序:
;*******************************************
DISP: MOV R1,#2AH ;秒個位顯示寄存器
MOV A,30H ;將秒顯示緩沖單元內容送入A
MOV B,#10H
DIV AB
MOV @R1,B ;秒個位存入2AH單元
INC R1
MOV @R1,A ;秒十位存入2BH單元
INC R1
MOV A,31H ;將分顯示緩沖單元內容送入A
MOV B,#10H
DIV AB
MOV @R1,B ;分個位存入2CH單元
INC R1
MOV @R1,A ;分十位存入2DH單元
INC R1
MOV A,32H ;將時顯示緩沖單元內容送入A
MOV B,#10H
DIV AB
MOV @R1,B ;時個位存入2EH單元
INC R1
MOV @R1,A ;時十位存入2FH單元
MOV A,R2
CJNE A,#00,JK ;有閃爍跳JK,位選由T1中斷處理給出
MOV 3AH,#0DFH ;將秒個位選碼送入掃描緩沖單元
MOV 3BH,#0EFH ;將秒十位選碼送入掃描緩沖單元
MOV 3CH,#0F7H ;將分個位選碼送入掃描緩沖單元
MOV 3DH,#0FBH ;將分十位選碼送入掃描緩沖單元
MOV 3EH,#0FDH ;將時個位選碼送入掃描緩沖單元
MOV 3FH,#0FEH ;將時十位選碼送入掃描緩沖單元
JK: RET
;*********************************
;掃描子程序:
;*********************************
SCAN: MOV R0,#2AH ;秒個位掃描緩沖單元地址存入R0
MOV R3,#06 ;掃描長度
MOV DPTR,#TABLE ;段碼首地址
MOV R1,#3AH ;第一個LED位選碼
LOOP: MOV A,@R0
MOVC A,@A+DPTR
MOV P1,A
MOV A,@R1
MOV P2,A
MOV R6,#0D0H ;延時使其不閃爍
DJNZ R6,$
MOV 27H,#12
MOV P2,#0FFH ;消影
DJNZ 27H,$
INC R0
INC R1
DJNZ R3,LOOP
RET
;********************************
;按鍵判斷處理子程序:
;********************************
KEY: MOV P0,#0FFH
JNB p0.0,A1 ;K1鍵沒有按下,返回
LJMP RETX
A1: LCALL DISP ;消抖
LCALL SCAN
JNB P0.0,A2 ;再一次判斷K1是否按下
LJMP RETX
A2: JNB P0.0,$ ;等待按鍵釋放
MOV R7,#01H
QL: MOV 30H,#00H ;秒單元清零
MOV 31H,#00H ;分單元清零
MOV 32H,#00H ;時單元清零
LCALL DISP ;顯示秒,分,時都為零
LCALL SCAN
JNB P0.1,B1 ;K2鍵沒有按下跳M3
LJMP M3
B1: JNB P0.1,$ ;等待按鍵釋放
MS: SETB TR1
MOV R2,#01H ;R2為閃爍標記位,01H位秒閃爍
LCALL DISP
LCALL SCAN
JB P0.2,K1 ;K3鍵沒有按下跳K1
JNB P0.2,$
MJ: MOV A,30H ;K3鍵按下秒單元加一
ADD A,#01H
DA A
MOV 30H,A
CJNE A,#60H,F1
MOV 30H,#00H ;秒單元到60
INC 31H ;分單元加一
F1: JB P0.2,K1 ;K3鍵沒有按下跳K1
JNB P0.2,$
AJMP MJ ;秒繼續加
K1: JNB P0.1,B2 ;K2鍵沒有按下
LJMP M1
B2: JNB P0.1,$
FS: MOV R2,#02H ;R2為02時分閃爍
LCALL DISP
LCALL SCAN
JB P0.2,K2
JNB P0.2,$
FJ: MOV A,31H
ADD A,#01H
DA A
MOV 31H,A
CJNE A,#60H,F2
MOV 31H,#00H
INC 32H
F2: JB P0.2,K2
JNB P0.2,$
AJMP FJ
K2: JB P0.1,M2
JNB P0.1,$
SS: MOV R2,#03H ;R2為03H位時閃爍
LCALL DISP
LCALL SCAN
JB P0.2,K3
JNB P0.2,$
SJ: MOV A,32H
ADD A,#01H
DA A
MOV 32H,A
CJNE A,#24H,F3
MOV 32H,#00H
F3: JB P0.2,K3
JNB P0.2,$
AJMP SJ
K3: JB P0.1,L1
JNB P0.1,$
LJMP MS
L1: JB P0.0,L2
JNB P0.0,$
LJMP BBF
L2: JB P0.3,SS
JNB P0.3,$
BF: MOV 21H,30H
MOV 22H,31H
MOV 23H,32H
BBF: CLR TR1
MOV R2,#00H
MOV R7,#00H
MOV 30H,21H
MOV 31H,22H
MOV 32H,23H
AJMP RETX
M2: JB P0.0,L3
JNB P0.0,$
AJMP BBF
L3: JNB P0.3,C1
LJMP FS
C1: JNB P0.3,$
AJMP BF
M1: JB P0.0,L4
JNB P0.0,$
AJMP BBF
L4: JNB P0.3,C2
LJMP MS
C2: JNB P0.3,$
AJMP BF
M3: JB P0.0,L5
JNB P0.0,$
AJMP BBF
L5: JNB P0.3,C3
LJMP QL
C3: JNB P0.3,$
AJMP BF
RETX: RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -