?? szpb.asm
字號:
ORG 0000H ;六位數碼管顯示時間與跑表,用p3.2,p3.3,p3.4,p3.5控制。
AJMP MAIN
ORG 000BH
AJMP TIME
ORG 001BH
LJMP TIME2
ORG 0300H
MAIN:
mov 20h,#00h
MOV 21H,#00H
MOV 22H,#00H
MOV 23H,#00H
MOV IP,#02H ;IP,IE初始化
MOV IE,#8AH
MOV TMOD,#11H ;設定定時器工作方式
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR0 ;啟動定時
MOV SP,#55H ;重設堆棧指針
NEXT: LCALL DISP ;調用顯示子程序
LCALL KEY ;調用時間按鍵檢測子程序(A鍵被按下即進入調時模式)
JZ NEXT ;
LCALL ANKEY2 ;調用跑表按鍵檢測程序(B鍵被按下即進入跑表模式)
LCALL ANKEY ;調用按鍵處理子程序
SJMP NEXT ;重新循環
ANKEY2: ;(ACC.4=B鍵)
MOV A,R6
JB ACC.4,PB
RET
PB: ;跑表程序初始化
MOV TH1,#0D8H
MOV TL1,#0F0H ;10ms定時
MOV 41H,#00H
MOV 42H,#00H
MOV 43H,#00H
NEXT2:
LCALL DISP2
LCALL KEY
JB ACC.4,RET2
JB ACC.3,CPL2
JB ACC.2,CLR2
SJMP NEXT2
RET2:
CLR TR1
RET
CPL2:
CPL TR1
SJMP NEXT2
CLR2:
MOV 41H,#00H
MOV 42H,#00H
SJMP NEXT2
TIME2:
PUSH ACC
PUSH PSW
MOV TH1,#0D8H
MOV TL1,#0F0H ;10ms定時
MOV A,41H
ADD A,#01H
DA A
MOV 41H,A
CJNE A,#99H,RETI2
MOV 41H,#00H
MOV A,42H
ADD A,#01H
DA A
MOV 42H,A
CJNE A,#60H,RETI2
MOV 42H,#00H
MOV A,43H
ADD A,#01H
DA A
MOV 43H,A
CJNE A,#60H,RETI2
MOV 43H,#00H
RETI2:POP PSW
POP ACC
RETI
DISP2:
MOV A,41H
ANL A,#0FH
MOV 4FH,A
MOV A,41H
ANL A,#0F0H
SWAP A
MOV 4EH,A
MOV A,42H
ANL A,#0FH
ORL A,#10H
MOV 4DH,A
MOV A,42H
ANL A,#0F0H
SWAP A
MOV 4CH,A
MOV A,43H
ANL A,#0FH
ORL A,#10H
MOV 4BH,A
MOV A,43H
ANL A,0F0H
SWAP A
MOV 4AH,A
MOV R1,#4FH ;顯示偏移量
MOV R7,#06H
MOV DPTR,#TABLE2
MOV A,#10111111B
LOOP8: MOV B,A ;
MOV P0,A
MOV A,@R1
MOVC A,@A+DPTR
MOV P2,A ;送顯示
MOV R6,#80H ;延時
DJNZ R6,$
DEC R1
MOV A,B
RR A
DJNZ R7,LOOP8;循環顯示
RET
TABLE2:
DB 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8H,80H ,90H;不帶小數點
DB 00h,00,00,00,00,00
DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H ;帶小數點
;定時中斷處理程序:
TIME: PUSH ACC ;保護現場
PUSH PSW
MOV TL0,#0B0H ;賦定時初值
MOV TH0,#3CH
INC 20H ;
MOV A,20H
CJNE A,#20,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 ;到時間達到24小時,清零.
RETI1: POP PSW ;恢復現場
POP ACC
RETI ;中斷返回?
;顯示子程序
DISP: ANL 2FH,#10H
MOV A,21H ;處理秒21H-->2DH,2EH
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 ;處理分鐘22H-->2CH,2DH
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 ;處理小時23H-->2AH,2BH
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,#0BFH
LOOP1: MOV B,A ;
MOV P0,A
MOV A,@R0
MOVC A,@A+DPTR
MOV P2,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,82h,0F8H,80H ,90H;不帶小數點
DB 00h,00,00,00,00,00
DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H ;帶小數點
;按鍵判斷程序
KEY: MOV P3,#0FFH ;
MOV A,P3
CPL A
ANL A,#18H
JZ RETX ;無鍵按下則返回
LCALL DISP ;
LCALL DISP
MOV A,P3
CPL A
ANL A,#18H
JZ RETX ;鍵盤去抖動。
MOV R6,A ;將鍵值存入R6。
LOOP2: LCALL DISP ;
MOV A,P3
CPL A
ANL A,#18H
JNZ LOOP2 ;等待鍵釋放
MOV A,R6
RETX: RET
;按鍵處理子程序
ANKEY: CLR EA ;關中斷
LX: MOV A,R6
JB ACC.3,L1 ;是功能鍵轉L1
JB ACC.4,L2 ;是確認鍵轉L2
JB ACC.5,L3 ;是減1鍵轉L3
JNB ACC.2,L4 ;是增1鍵轉L4
L4:JB 2BH.4,L6 ;判斷使哪一位(時、分、秒)的值加1
JB 2DH.4,L8
JB 2FH.4,L9
AJMP L12
L12: LCALL DISP
LCALL DISP
LCALL KEY ;判斷有無鍵按下。
JZ L12
LJMP LX
L2: MOV 25H,#00H ;確認鍵處理程序
CLR 2BH.4
CLR 2DH.4
CLR 2FH.4
SETB EA
RET
L3: JB 2BH.4,L61 ;增一鍵處理程序
JB 2DH.4,L81
JB 2FH.4,L91
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單元是標志位,(25H)=01H調節時單元的值
SETB 2BH.4
CLR 2DH.4
CLR 2FH.4
AJMP L12
LB3: MOV 25H,#04H ;25H單元是標志位,(25H)=01H調節秒單元的值
SETB 2FH.4
CLR 2DH.4
CLR 2BH.4
AJMP L12
LB2: MOV 25H,#02H ;25H單元是標志位,(25H)=01H調節分單元的值
SETB 2DH.4
CLR 2BH.4
CLR 2FH.4
AJMP L12
L61: AJMP L611 ;
L81: AJMP L811 ;
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,#99H,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
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -