?? time.asm
字號:
;實(shí)用單片機(jī)電子鐘的制作
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIME
ORG 046H
MAIN: MOV 20H,#00H ;計時的0.1秒、秒、時和分單元清0
MOV 21H,#00H ;秒
MOV 22H,#00H ;分
MOV 23H,#00H ;時
MOV IP,#02H ;設(shè)置T0中斷優(yōu)先
MOV IE,#82H ;T0充許中斷
MOV TMOD,#01H ;定時器的初始化
MOV TL0,#00H ;定時0.1秒
MOV TH0,#0DCH
SETB TR0 ;啟動定時器工作
MOV SP,#40H ;堆棧指針設(shè)為40H
NEXT: LCALL DISP ;調(diào)用顯示子程序
LCALL KEY ;調(diào)按鍵判斷子程序
JZ NEXT ;無鍵按下轉(zhuǎn)NEXT
LCALL ANKEY ;有鍵按下轉(zhuǎn)按鍵處理子程序
SJMP NEXT ;按鍵處理完轉(zhuǎn)NEXT
NOP
NOP
NOP
;定時中斷處理程序:
TIME: PUSH ACC ;現(xiàn)場保護(hù)
PUSH PSW
MOV TL0,#00H ;重置初值
MOV TH0,#0DCH
INC 20H ;計時處理
MOV A,20H
CJNE A,#100,RETI1
MOV 20H,#00H
MOV A,21H
ADD A,#01H
DA A
MOV 21H,A
CJNE A,#60H,RETI1
MOV 21H,#00H
MOV A,22H
ADD A,#01H
DA A
MOV 22H,A
CJNE A,#60H,RETI1
MOV 22H,#00H
MOV A,23H
ADD A,#01H
DA A
MOV 23H,A
CJNE A,#24H,RETI1
MOV 23H,#00H
RETI1: POP PSW ;恢復(fù)現(xiàn)場
POP ACC
RETI ;中斷返回
NOP
NOP
; 顯示子程序
DISP: ANL 2FH,#10H ;拆字,注意小數(shù)點(diǎn)的顯示
MOV A,21H
ANL A,#0FH
ORL A,2FH
MOV 2FH,A
MOV A,21H
ANL A,#0F0H
SWAP A
MOV 2EH,A
ANL 2DH,#10H
MOV A,22H
ANL A,#0FH
ORL A,2DH
MOV 2DH,A
MOV A,22H
ANL A,#0F0H
SWAP A
MOV 2CH,A
ANL 2BH,#10H
MOV A,23H
ANL A,#0FH
ORL A,2BH
MOV 2BH,A
MOV A,23H
ANL A,#0F0H
SWAP A
MOV 2AH,A
MOV R0,#2FH
MOV R3,#06H
MOV DPTR,#TABLE
MOV A,#0DFH
LOOP1: MOV B,A ;送位控制字與段控制字
MOV P2,A
MOV A,@R0
MOVC A,@A+DPTR
MOV P1,A
MOV R2,#80H ;延時
DJNZ R2,$
DEC R0
MOV A,B
RR A
DJNZ R3,LOOP1
RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H ;小數(shù)點(diǎn)不亮的代碼
DB 82H,0F8H,80H,90H,00,00,00,00,00,00
DB 40H,79H,24H,30H,19H,12H,02H,78H ;小數(shù)點(diǎn)亮的顯示代碼
DB 00H,10H,00,00,00,00,00,00
NOP
NOP
;按鍵判斷程序
KEY: MOV P0,#0FFH ;讀按鍵狀態(tài)
MOV A,P0
CPL A
ANL A,#0FH
JZ RETX ;無鍵按下返回,有鍵按下延時去抖動
LCALL DISP
LCALL DISP
MOV A,P0
CPL A
ANL A,#0FH
JZ RETX ;是抖動則返回主程序,否則讀按鍵狀態(tài)存入R6及A中
MOV R6,A
LOOP2: LCALL DISP ;等待按鍵的釋放
MOV A,P0
CPL A
ANL A,#0FH
JNZ LOOP2
MOV A,R6
RETX: RET
NOP
NOP
;按鍵處理子程序
ANKEY: CLR EA ;關(guān)中斷
LX: MOV A,R6
JB ACC.0,L1 ;是功能鍵轉(zhuǎn)L1
JB ACC.1,L2 ;是確認(rèn)鍵轉(zhuǎn)L2
JB ACC.2,L3 ;是增1鍵轉(zhuǎn)L3
JNB ACC.3,L12 ;不是減1鍵,轉(zhuǎn)L12
JB 2BH.4,L61 ;判斷使哪一位(時、分、秒)的值減1
JB 2DH.4,L81
JB 2FH.4,L91
L12: LCALL DISP
LCALL DISP
LCALL KEY
JZ L12
LJMP LX
L2: MOV 25H,#00H ;是確認(rèn)鍵,處理完畢返回
CLR 2BH.4
CLR 2DH.4
CLR 2FH.4
SETB EA
RET
L3: JB 2BH.4,L6
JB 2DH.4,L8
JB 2FH.4,L9
AJMP L12
L1: MOV A,25H
JZ LB1
JB ACC.0,LB2
JB ACC.1,LB3
JNB ACC.2,L12
LB1: MOV 25H,#01H ;25H單元是標(biāo)志位,(25H)=01H調(diào)節(jié)時單元的值
SETB 2BH.4
CLR 2DH.4
CLR 2FH.4
AJMP L12
LB3: MOV 25H,#04H ;(25H)=04H調(diào)節(jié)秒單元的值
SETB 2FH.4
CLR 2DH.4
CLR 2BH.4
AJMP L12
LB2: MOV 25H,#02H ;(25H)=02H,調(diào)節(jié)分單元的值
SETB 2DH.4
CLR 2BH.4
CLR 2FH.4
AJMP L12
L61: AJMP L611 ;調(diào)節(jié)時間時注意使用的是十進(jìn)制,而且注意
L81: AJMP L811 ;分和秒都是60進(jìn)制,時是24進(jìn)制
L91: AJMP L911
L6: MOV A,23H
ADD A,#01H
DA A
MOV 23H,A
CJNE A,#24H,L15
L15: JC L112
MOV 23H,#00H
L112: AJMP L12
L8: MOV A,22H
ADD A,#01H
DA A
MOV 22H,A
CJNE A,#60H,L16
L16: JC L112
MOV 22H,#00H
AJMP L12
L9: MOV A,21H
ADD A,#01H
DA A
MOV 21H,A
CJNE A,#60H,L17
L17: JC L112
MOV 21H,#00H
AJMP L12
L611: MOV A,23H
ADD A,#99H
DA A
MOV 23H,A
CJNE A,#0H,L112
MOV 23H,#23H
AJMP L12
L811: MOV A,22H
ADD A,#99H
DA A
MOV 22H,A
CJNE A,#99H,L112
MOV 22H,#59H
AJMP L12
L911: MOV A,21H
ADD A,#99H
DA A
MOV 21H,A
CJNE A,#99H,L112
MOV 21H,#59H
AJMP L12
NOP
NOP
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -