📄 miaobiao.asm
字号:
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIMER
ORG 0030H
MAIN: MOV DPTR,#TABLE
MOV SP,#50H
MOV TMOD, #01H
MOV IE,#82H
CLR TR0
CALL CLEAR
LOOP: CALL SCANKEY
CALL DISP
MOV A,42H
CJNE A,#09,E3
MOV A,41H
CJNE A,#05,E3
MOV A,40H
CJNE A,#09,E3
MOV A,3FH
CJNE A,#09,E3
CLR TR0
CALL CLEAR
E3:AJMP LOOP
SCANKEY: PUSH A
JB P3.0, KEYEND ;有键按下吗?
CALL DELAY_10MS ;延时消抖
JNB P3.0,$ ;按键释放了吗?
INC R7
MOV A, R7
CJNE A,#01,STOP;如果R1中的数为1则表示第1次按键,启动定时器。
SETB TR0
AJMP KEYEND
STOP: CJNE A,#02,RESET;如果A中的数为2则表示第2次按键,关闭定时器。
CLR TR0
AJMP KEYEND
RESET: CJNE A,#03,KEYEND
CALL CLEAR
KEYEND: POP A
RET
DISP: CLR A
MOV R0,#3FH
MOV R2,#08H
MOV R3,#04
E1: MOV A,@R0 ;读存放秒的个位、十位、百位数据的单元的值。
MOVC A,@A+DPTR ;根据读取数值查表得跟这个数据值对应得显示段码。
MOV P2,#00H
MOV P1,A
MOV A,R2
MOV P2,A
MOV R6,#255
DJNZ R6,$
INC R0
RR A
MOV R2,A
DJNZ R3,E1
RET
TIMER: PUSH A
MOV TH0,#3CH
MOV TL0,#0B0H
INC 43H
MOV A, 43H
CJNE A,#2, END_TIME
MOV 43H,#00H
INC 3FH
MOV A,3FH
CJNE A,#10,END_TIME
MOV 3FH,#00H
INC 40H
MOV A,40H
CJNE A,#10,END_TIME
MOV 40H,#00H
INC 41H
MOV A,41H
CJNE A,#06,END_TIME
MOV 41H,#00H
INC 42H
END_TIME: POP A
RETI
CLEAR: MOV A,#00H
MOV R1,#3FH
E2: MOV @R1,A
INC R1
CJNE R1,#43H,E2
MOV R7,#00H
RET
DELAY_10MS:MOV R5,#50
D1: MOV R4, #100
DJNZ R4,$
DJNZ R5,D1
RET
TABLE:DB 3FH,06H,05BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -