ORG 0030H
MAIN:MOV SP,#60H
MOV P2,#0FFH
MOV P0,#0CH ;輸出P.
ACALL DL
;AJMP LOOP
;下面實現(xiàn)按鍵功能,P1.0啟動,P1.1暫停,P1.2清零
FIRST:ACALL KEY
S0: JNB ACC.0,S1 ;啟動鍵
ACALL DIR
AJMP LOOP
S1: JNB ACC.1,S2 ;暫停鍵
ACALL DIR
AJMP FIRST
S2: JNB ACC.2,FIRST ;清零鍵
MOV R0,#00H
MOV R1,#00H
MOV R2,#00H
MOV R3,#00H
MOV R4,#00H
MOV R5,#00H
MOV R6,#00H
ACALL DIR
AJMP FIRST
KS: ;MOV 20H,A
;ACALL DIR
MOV A,P1
CPL A
ANL A,#07H ;屏蔽高五位
RET
KEY: ACALL KS
JNZ AGAIN ;有鍵閉合則轉(zhuǎn)向再次判斷
MOV A,20H
AJMP EXTI ;無鍵閉合則轉(zhuǎn)向 ,暫時保留不寫
AGAIN:MOV 20H,A
ACALL DIR ;延時六毫秒
ACALL KS
JNZ LKP ;兩次判斷有鍵閉合,則轉(zhuǎn)向按鍵鍵值判斷
MOV A,20H
AJMP EXTI ;第二次判斷無鍵閉合,則轉(zhuǎn)向,暫時保留不寫
LKP:PUSH ACC
LK: ACALL DIR
ACALL KS
JNZ LK
POP ACC
EXTI:RET
LOOP: ;計數(shù)器
MOV R3,25H ;個位數(shù)
CJNE R3,#0AH,LOOP1
TEN: MOV R3,#00H
INC R4 ;秒位
CJNE R4,#0AH,LOOP1
HUNDRED:
MOV R4,#00H
INC R5 ;十秒位
CJNE R5,#06H,LOOP1
THOUSAND: ;分位
MOV R5,#00H
INC R6
CJNE R6,#0AH,LOOP1
TEN_THOUSAND:
MOV R6,#00H ;十分位
INC R7
CJNE R7,#06H,LOOP1
MOV R7,#00H
LOOP1:ACALL DIR
ACALL DELAY
ACALL DIR
ACALL DELAY
MOV A,25H
CJNE A,#0AH,LOOP2
MOV 25H,#00H
LOOP2:INC 25H
AJMP FIRST
DIR: MOV P2,#80H ;位控制
MOV A,R3 ;取個位數(shù)
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0 ,A ;輸出段控碼
;SJMP $
ACALL DL ;延時1毫秒
MOV A,P2
RR A
MOV P2,A
MOV P0,#0BFH ;輸出橫杠線
ACALL DL
MOV A,P2
RR A
MOV P2,A
MOV A,R4 ;取十位數(shù)
MOVC A,@A+DPTR
MOV P0,A
ACALL DL
MOV A,P2
RR A
MOV P2,A
MOV A,R5 ;取百位數(shù)
MOVC A,@A+DPTR
MOV P0,A
ACALL DL
MOV A,P2
RR A
MOV P2,A
MOV P0,#0BFH ;輸出橫杠線
ACALL DL
MOV A,P2
RR A
MOV P2,A
MOV A,R6 ;取千位數(shù)
MOVC A,@A+DPTR
MOV P0,A
ACALL DL
MOV A,P2
RR A
MOV P2,A
MOV A,R7 ;取萬位數(shù)
MOVC A,@A+DPTR
MOV P0,A
ACALL DL
RET
;延時一毫秒函數(shù)
DL: MOV IE,#00H
MOV TMOD,#10H ;工作方式1,
MOV TH1,#0FCH ;延時程序 延時一毫秒
MOV TL1,#18H
SETB TR1
STEP1:JBC TF1,STEP2
AJMP STEP1
STEP2:CLR TR1
RET
;延時47毫秒
DELAY:MOV IE,#00H
MOV TMOD,#10H ;工作方式1,
MOV TH1,#068H ;延時程序 計數(shù)初值6868貌似很準確
MOV TL1,#68H
SETB TR1
ST1:JBC TF1,ST2
AJMP ST1
ST2:CLR TR1
RET
TAB: DB 0C0H ;段碼表 共陽
DB 0F9H
DB 0A4H
DB 0B0H
DB 99H
DB 92H
DB 82H
DB 0F8H
DB 80H
DB 90H
END
|