📄 可数字设置定时的数字钟3.asm
字号:
SECOND EQU 30H
MINITE EQU 31H
HOUR EQU 32H
KEYBUF EQU 30H
DISPBUF EQU 40H
DISPBIT EQU 48H
T2SCNTA EQU 49H
T2SCNTB EQU 4AH
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0
START: MOV KEYBUF,#0
MOV SECOND,#00H
MOV MINITE,#00H
MOV HOUR,#12
MOV DISPBIT,#00H
MOV T2SCNTA,#00H
MOV T2SCNTB,#00H
LCALL DISP
MOV TMOD,#01H
MOV TH0,#(65536-1000)/256
MOV TL0,#(65536-1000)%256
SETB TR0
SETB ET0
SETB EA
WAIT: MOV P2,#0FFH
CLR P2.4
MOV A,P2
ANL A,#0FH
XRL A,#0FH
JZ NOKEY1
LCALL DELY10MS
MOV A,P2
ANL A,#0FH
XRL A,#0FH
JZ NOKEY1
MOV A,P2
ANL A,#0FH
CJNE A,#0EH,NK1
MOV KEYBUF,#1
LJMP DK1
NK1: CJNE A,#0DH,NK2
MOV KEYBUF,#2
LJMP DK1
NK2: CJNE A,#0BH,NK3
MOV KEYBUF,#3
LJMP DK1
NK3: CJNE A,#07H,NK4
MOV KEYBUF,#10 ;A=up
LJMP DK1
NK4: NOP
DK1: MOV A,KEYBUF
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
DK1A: MOV A,P2
ANL A,#0FH
XRL A,#0FH
JNZ DK1A
NOKEY1:MOV P2,#0FFH
CLR P2.5
MOV A,P2
ANL A,#0FH
XRL A,#0FH
JZ NOKEY2
LCALL DELY10MS
MOV A,P2
ANL A,#0FH
XRL A,#0FH
JZ NOKEY2
MOV A,P2
ANL A,#0FH
CJNE A,#0EH,NK5
MOV KEYBUF,#4
LJMP DK2
NK5: CJNE A,#0DH,NK6
MOV KEYBUF,#5
LJMP DK2
NK6: CJNE A,#0BH,NK7
MOV KEYBUF,#6
LJMP DK2
NK7: CJNE A,#07H,NK8
MOV KEYBUF,#11 ;B=down
LJMP DK2
NK8: NOP
DK2: MOV A,KEYBUF
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
DK2A: MOV A,P2
ANL A,#0FH
XRL A,#0FH
JNZ DK2A
NOKEY2:MOV P2,#0FFH
CLR P2.6
MOV A,P2
ANL A,#0FH
XRL A,#0FH
JZ NOKEY3
LCALL DELY10MS
MOV A,P2
ANL A,#0FH
XRL A,#0FH
JZ NOKEY3
MOV A,P2
ANL A,#0FH
CJNE A,#0EH,NK9
MOV KEYBUF,#7
LJMP DK3
NK9: CJNE A,#0DH,NK10
MOV KEYBUF,#8
LJMP DK3
NK10: CJNE A,#0BH,NK11
MOV KEYBUF,#9
LJMP DK3
NK11: CJNE A,#07H,NK12
MOV KEYBUF,#12 ;C=2ND
LJMP DK3
NK12: NOP
DK3: MOV A,KEYBUF
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
DK3A: MOV A,P2
ANL A,#0FH
XRL A,#0FH
JNZ DK3A
NOKEY3:MOV P2,#0FFH
CLR P2.7
MOV A,P2
ANL A,#0FH
XRL A,#0FH
JZ NOKEY4
LCALL DELY10MS
MOV A,P2
ANL A,#0FH
XRL A,#0FH
JZ NOKEY4
MOV A,P2
ANL A,#0FH
CJNE A,#0EH,NK13
MOV KEYBUF,#15 ;F=clear
LJMP DK4
NK13: CJNE A,#0DH,NK14
MOV KEYBUF,#0
LJMP DK4
NK14: CJNE A,#0BH,NK15
MOV KEYBUF,#14 ;E=help
LJMP DK4
NK15: CJNE A,#07H,NK16
MOV KEYBUF,#13 ;D=enter
LJMP DK4
NK16: NOP
DK4: MOV A,KEYBUF
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
DK4A: MOV A,P2
ANL A,#0FH
XRL A,#0FH
JNZ DK4A
NOKEY4:LJMP WAIT
DELY10MS:
MOV R6,#10
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
DISP: MOV A,#DISPBUF
ADD A,#8
DEC A
MOV R1,A ;保存间接寻址到R1
MOV A,HOUR ;取出小时
MOV B,#10
DIV AB
MOV @R1,A ;存入十位
DEC R1
MOV A,B
MOV @R1,A ;存入个位
DEC R1
MOV A,#10
MOV @R1,A
DEC R1
MOV A,MINITE ;分钟处理
MOV B,#10
DIV AB
MOV @R1,A
DEC R1
MOV A,B
MOV @R1,A
DEC R1
MOV A,#10
MOV @R1,A
DEC R1
MOV A,SECOND ;秒处理
MOV B,#10
DIV AB
MOV @R1,A
DEC R1
MOV A,B
MOV @R1,A
DEC R1
RET
INT_T0:MOV TH0,#(65536-1000)/256
MOV TL0,#(65536-1000)%256
MOV A,#DISPBUF
ADD A,DISPBIT
MOV R0,A
MOV A,@R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P1,A
MOV A,DISPBIT
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P3,A
INC DISPBIT
MOV A,DISPBIT
CJNE A,#08H,KNA
MOV DISPBIT,#00H
KNA: INC T2SCNTA
MOV A,T2SCNTA
CJNE A,#100,DONE
MOV T2SCNTA,#00H
INC T2SCNTB
MOV A,T2SCNTB
CJNE A,#10H,DONE
MOV T2SCNTB,#00H
INC SECOND
MOV A,SECOND
CJNE A,#60,NEXT
MOV SECOND,#00H
INC MINITE
MOV A,MINITE
CJNE A,#60,NEXT
MOV MINITE,#00H
INC HOUR
MOV A,HOUR
CJNE A,#24,NEXT
MOV HOUR,#00H
NEXT: LCALL DISP
DONE: RETI
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H
DB 77H,7CH,39H,5EH,79H,71H,40H
TAB: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -