📄 clock.asm
字号:
SCOND EQU 30H;秒寄存器
MINUTE EQU 31H;分寄存器
HOUR EQU 32H;小时寄存器
CLOCKM EQU 33H;闹钟分寄存器
CLOCKH EQU 34H;闹钟小时寄存器
DISPM EQU 35H;显示分寄存器
DISPH EQU 36H;显示小时寄存器
XSD EQU 37H;秒点寄存器
ORG 00H
AJMP START
ORG 0BH;定时器T0中断
AJMP T0ZD
RETI
ORG 50H
;*********************************
;程序开始
;*********************************
START: MOV P0,#00
MOV P2,#00
MOV 37H,#00
MOV SP,#60H
MOV HOUR,#12
MOV MINUTE,#00
MOV SCOND,#00
MOV CLOCKH,#06
MOV CLOCKM,#00;闹钟为6:00
MOV TMOD,#01H;定时器0方式1
MOV TH0,#03CH
MOV TL0,#0B0H;50ms的定时赋值
MOV R0,#10;0.5S计时
MOV R1,#2;一秒记数
MOV R2,#0;
SETB EA;开中断
SETB ET0;开定时中断
SETB TR0;启动定时器0
MAIN: ACALL DESPLAY
JNB P3.3,CLOCKSET
JNB P1.6,HSET
JNB P1.7,MSET
AJMP MAIN
CLOCKSET:ACALL DESPLAY
JNB P3.3,CLOCKSET
CLR P1.2
LOOP: ACALL DESPLAY
JNB P1.6,CLOCKHSET
JNB P1.7,CLOCKMSET
JNB P3.3,SETOVER
AJMP LOOP
CLOCKHSET:ACALL DESPLAY
JNB P1.6,CLOCKHSET
INC CLOCKH
MOV A,CLOCKH
CJNE A,#24,LOOP
MOV CLOCKH,#0
AJMP LOOP
CLOCKMSET:ACALL DESPLAY
JNB P1.7,CLOCKMSET
INC CLOCKM
MOV A,CLOCKM
CJNE A,#60,LOOP
MOV CLOCKM,#0
AJMP LOOP
SETOVER:ACALL DESPLAY
JNB P3.3,SETOVER
SETB P1.2
CLR P1.0
AJMP MAIN
;****************************************
HSET: ACALL DESPLAY
JNB P1.6,HSET
INC HOUR
MOV A,HOUR
CJNE A,#24,MAIN
MOV HOUR,#0
AJMP MAIN
MSET: ACALL DESPLAY
JNB P1.7,MSET
INC MINUTE
MOV A,MINUTE
CJNE A,#60,MAIN
MOV MINUTE,#0
AJMP MAIN
;*********************************
;程序显示
;*********************************
DESPLAY:JNB P1.2,CLOCK
MOV A,MINUTE
MOV DISPM,A
MOV A,HOUR
MOV DISPH,A
AJMP DES
CLOCK: MOV A,CLOCKM
MOV DISPM,A
MOV A,CLOCKH
MOV DISPH,A
DES: MOV A,DISPM
MOV B,#10
DIV AB
ADD A,R2
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P2,A
setb P0.6
ACALL DELAY
clr P0.6
MOV A,B
ADD A,R2
MOVC A,@A+DPTR
MOV P2,A
setb P0.7
ACALL DELAY
clr P0.7
MOV A,DISPH
MOV B,#10
DIV AB
JZ JUMP
ADD A,R2
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P2,A
SETB P0.4
JUMP: ACALL DELAY
clr P0.4
MOV A,B
ADD A,R2
MOVC A,@A+DPTR
MOV P2,A
SETB P0.5
ACALL DELAY
clr P0.5
RET
;*********************************
;程序T0中断
;*********************************
T0ZD: PUSH ACC
PUSH PSW
MOV TH0,#03CH
MOV TL0,#0B0H;50ms的定时赋值
DJNZ R0,EXIT
MOV R0,#10
CPL 37H
JNB 37H,MD
MOV R2,#0
AJMP TIME
MD: MOV R2,#10
TIME: DJNZ R1,EXIT
MOV R1,#2
INC SCOND
MOV A,SCOND
CJNE A,#60,CLOCKING
MOV SCOND,#0
INC MINUTE
MOV A,MINUTE
CJNE A,#60,CLOCKING
MOV MINUTE,#0
INC HOUR
MOV A,HOUR
CJNE A,#24,CLOCKING
MOV HOUR,#0
AJMP TIME
CLOCKING:JB P1.0,EXIT
MOV A,MINUTE
CJNE A,CLOCKM,EXIT
MOV A,HOUR
CJNE A,CLOCKH,EXIT
SETB P1.0
EXIT: POP PSW ;出棧
POP ACC
RETI
DELAY: MOV R6,#100
D0: MOV R7,#10
DJNZ R7,$
DJNZ R6,D0
RET
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
TAB:
DB 03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH
DB 0BFH,086H,0DBH,0CFH,0E6H,0EDH,0FDH,087H,0FFH,0EFH
;共阴显示0,1,2,3,4,5,6,7,8,9
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -