📄 数字钟.asm
字号:
TIMES EQU 30H
TIMEM EQU 31H
TIMEH EQU 32H
CLKM EQU 33H
CLKH EQU 34H
UP EQU 35H
LED1 EQU 3AH
LED2 EQU 3BH
LED3 EQU 3CH
LED4 EQU 3DH
LED5 EQU 3EH
LED6 EQU 3FH
ORG 0000H
AJMP START
ORG 000BH
AJMP T0PRO
START: MOV SP,#60H
CLR A
CLR P1.0
MOV TIMES,A
MOV TIMEM,A
MOV TIMEH,A
MOV CLKM,A
MOV CLKH,#12
MOV UP,A
MOV A,#89H
MOV DPTR,#7FFFH
MOVX @DPTR,A
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
CLR TF0
SETB TR0
MAIN: LCALL DISPLAY
LCALL SCAN
JNB ACC.0,K4
ACALL MSET
K4: JNB ACC.3,MAIN
LCALL CLOCK
AJMP MAIN
;分钟设置
MSET: LCALL DISPLAY
LCALL SCAN
JB ACC.3,MSET_END ;第四键按下直接返回
JNB ACC.2,MK2 ;第三键按下分钟-1
ACALL SUBM
AJMP MSET
MK2: JNB ACC.1,MK1 ;第二键按下分钟+1
ACALL ADDM
AJMP MSET
MK1: JNB ACC.0,MSET_END ;第一键按下转小时设置
ACALL HSET
AJMP MSET
MSET_END:RET
;小时设置
HSET: LCALL DISPLAY
LCALL SCAN
JB ACC.3,HSET_END ;第四键按下直接返回
JNB ACC.2,HK2 ;第三键按下小时-1
ACALL SUBH
AJMP HSET
HK2: JNB ACC.1,HK1 ;第二键按下小时+1
ACALL ADDH
AJMP HSET
HK1: JNB ACC.0,HSET_END ;第一键按下返回分钟设置
HSET_END: RET
SUBM: CLR C
MOV A,TIMEM
SUBB A,#1
MOV TIMEM,A
JNC SUBM_END
MOV TIMEM,#59
SUBM_END:RET
ADDM: INC TIMEM
MOV A,TIMEM
CJNE A,#60,ADDM_END
MOV TIMEM,#00
ADDM_END:RET
SUBH: CLR C
MOV A,TIMEH
SUBB A,#1
MOV TIMEH,A
JNC SUBH_END
MOV TIMEH,#23
SUBH_END:RET
ADDH: INC TIMEH
MOV A,TIMEH
CJNE A,#24,ADDH_END
MOV TIMEH ,#00
ADDH_END:RET
SCAN: MOV R0,#65000
SCAN1: LCALL DISPLAY
MOV DPTR,#7FFEH
MOVX A,@DPTR
CPL A
ANL A,#0FH
JNZ KEY_OK
DJNZ R0,SCAN1
ACALL DELAYS
SJMP SCAN_STOP
KEY_OK: PUSH ACC
KOK: LCALL DISPLAY
MOV DPTR,#7FFEH
MOVX A,@DPTR
CPL A
ANL A,#0FH
JNZ KOK
POP ACC
SCAN_STOP:
RET
DELAY: MOV R7,#14H
DELAY1: MOV R6,#0FFH
DELAY2: DJNZ R6,DELAY2
DJNZ R7,DELAY1
RET
T0PRO: PUSH ACC
PUSH PSW
MOV TH0,#3CH
MOV TL0,#0B0H
CLR P1.0
INC UP
MOV A,UP
CJNE A,#20,TTIME
MOV UP,#00
INC TIMES
MOV A,TIMES
CJNE A,#60,TTIME
MOV TIMES,#00
INC TIMEM
MOV A,TIMEM
CJNE A,#60,TTIME
MOV TIMEM,#00
INC TIMEH
MOV A,TIMEH
CJNE A,#24,TTIME
MOV TIMEH,#00
TTIME: LCALL TIME2LED
MOV A,TIMEM
CJNE A,CLKM,T0_END
MOV A,TIMEH
CJNE A,CLKH,T0_END
SETB P1.0
T0_END: POP PSW
POP ACC
RETI
TIME2LED:
MOV A,TIMEH
LCALL HEXTOBCD
MOV LED1,A
MOV LED2,B
MOV A,TIMEM
LCALL HEXTOBCD
MOV LED3,A
MOV LED4,B
MOV A,TIMES
LCALL HEXTOBCD
MOV LED5,A
MOV LED6,B
HEXTOBCD:
MOV B,#0AH
DIV AB
ANL A,#0FH
ANL B,#0FH
RET
DISPLAY:
MOV DPTR,#7FFCH
MOV A,LED1
MOVX @DPTR,A
INC DPTR
MOV A,#11011111B
MOVX @DPTR,A
LCALL DELAYS
MOV DPTR,#7FFCH
MOV A,LED2
MOVX @DPTR,A
INC DPTR
MOV A,#11101111B
MOVX @DPTR,A
LCALL DELAYS
MOV DPTR,#7FFCH
MOV A,LED3
MOVX @DPTR,A
INC DPTR
MOV A,#11110111B
MOVX @DPTR,A
LCALL DELAYS
MOV DPTR,#7FFCH
MOV A,LED4
MOVX @DPTR,A
INC DPTR
MOV A,#11111011B
MOVX @DPTR,A
LCALL DELAYS
MOV DPTR,#7FFCH
MOV A,LED5
MOVX @DPTR,A
INC DPTR
MOV A,#11111101B
MOVX @DPTR,A
LCALL DELAYS
MOV DPTR,#7FFCH
MOV A,LED6
MOVX @DPTR,A
INC DPTR
MOV A,#11111110B
MOVX @DPTR,A
LCALL DELAYS
RET
DELAYS: MOV R7,#02H
D1: MOV R6,#0FFH
D2: DJNZ R6,D2
DJNZ R7,D1
RET
CLOCK: PUSH TIMEH
PUSH TIMEM
MOV TIMEH,CLKH
LCALL TIME2LED
MOV TIMEM,CLKM
LCALL TIME2LED
MOV R5,#100
RE: LCALL DISPLAY
DJNZ R5,RE
LCALL SCAN
JNB ACC.3,CK1
SJMP CLK_END
CK1: JNB ACC.0,CLK_END
ACALL CLKSET
CLK_END:
POP TIMEM
POP TIMEH
RET
CLKSET: LCALL DISPLAY
LCALL MSET
LCALL DISPLAY
MOV CLKM,TIMEM
MOV CLKH,TIMEH
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -