KEYBZ EQU 31H;按鍵標誌
LED1 EQU 32H
LED2 EQU 33H
LED3 EQU 34H
B20MS EQU 35H;20ms標誌
;主程序
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0DS
ORG 0100H
MAIN: CLR TR0;關中斷
MOV SP,#60H
LCALL DLY20MS
LCALL START;初始化
MOV P1,#0C0H;開始顯示000
MOV P2,#0C0H
MOV P3,#0C0H
LCALL KEY1;按下第壹次,啟動
LOP: MOV R7,BZ
CJNE R7,#5AH,LOP;0.1秒刷屏壹次
LCALL LEDDW;顯示數值
; MOV BZ,#00H
MOV R6,KEYBZ;判斷是否第三次按下
CJNE R6,#83H,LOP
KEYLOP: SETB P0.1
JB P0.1,KEYLOP
LCALL DLY20MS
JB P0.1,KEYLOP
KEYLOP1:SETB P0.1
JNB P0.1,KEYLOP1
LCALL DLY20MS
JNB P0.1,KEYLOP1
MOV KEYBZ,#00H
LJMP MAIN;調回起始000
;初始化
START: MOV LED1,#00H;秒的初值
MOV LED2,#00H
MOV LED3,#00H
MOV KEYBZ,#00H
MOV B20MS,#00
MOV BZ,#00H
MOV TMOD,#01H;定時器的初始化
MOV TH0,#0B1H;送20MS的初值
MOV TL0,#0E0H
SETB ET0
SETB EA
RET
;顯示程序
LEDDW: MOV R5,LED1
CJNE R5,#0AH,XIANSHI
MOV LED1,#00H
INC LED2
MOV R5,LED2
CJNE R5,#0AH,XIANSHI
MOV LED2,#00H
INC LED3
MOV R5,LED3
CJNE R5,#0AH,XIANSHI
LJMP MAIN
RET
XIANSHI:MOV DPTR,#LEDTAB
MOV A,LED1
MOVC A,@A+DPTR
MOV P1,A;顯示個位
MOV A,LED2
MOVC A,@A+DPTR
MOV P2,A;顯示十位
MOV A,LED3
MOVC A,@A+DPTR
MOV P3,A;顯示百位
RET
;定時器T0
T0DS: PUSH ACC;保護現場
PUSH PSW
; MOV BZ,#00H
MOV TH0,#0B1H;送20MS的初值
MOV TL0,#0E0H
INC B20MS
MOV R6,B20MS
CJNE R6,#5,T0DS1;每20MS檢測壹次鍵盤,每0.1S刷屏壹次
MOV B20MS,#0
MOV BZ,#5AH;標誌的賦值
INC LED1;秒加壹
T0DS1: LCALL KEY;跳到按鍵程序
LOOP: POP PSW
POP ACC
RETI
;按鍵子程序
KEY: SETB P0.1
JB P0.1,LOP2
LCALL DLY20MS
JB P0.1,LOP2
LOP3: SETB P0.1
JNB P0.1,LOP3
LCALL DLY20MS
JNB P0.1,LOP3
MOV KEYBZ,#83H
CLR TR0
LOP2: RETI
KEY1: SETB P0.1
JB P0.1,KEY1
LCALL DLY20MS
JB P0.1,KEY1
KEY2: SETB P0.1
JNB P0.1,KEY2
LCALL DLY20MS
JNB P0.1,KEY2
SETB TR0
RET
;延時20MS子程序
DLY20MS:MOV R7,#2;延時20MS
DLY4: MOV R6,#20
DLY3: MOV R5,#250
DJNZ R5,$
DJNZ R6,DLY3
DJNZ R7,DLY4
RET
;數值表
LEDTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END