📄 th20_电子时钟.asm
字号:
;电子时钟
LEDBuf equ 60h ; 显示缓冲
Hour equ 40h
Minute equ 41h
Second equ 42h
C100us equ 43h
Tick equ 10000
T100us equ 156;256-100
ORG 0000H
ljmp Start
org 000bh
LJMP T0Int
ORG 0100H
T0Int:
push PSW
push ACC
mov a, C100us+1
jnz Goon
dec C100us
Goon:
dec C100us+1
mov a, C100us
orl a, C100us+1
jnz Exit
mov C100us, #27h;#high(Tick)
mov C100us+1, #10h;#low(Tick)
inc Second
mov a, Second
cjne a, #60, Exit
mov Second, #0
inc Minute
mov a, Minute
cjne a, #60, Exit
mov Minute, #0
inc Hour
mov a, Hour
cjne a, #24, Exit
mov Hour, #0
Exit:
pop ACC
pop PSW
reti
Delay: ; 延时子程序
mov r7, #0FFH
DelayLoop:
djnz r7, DelayLoop
djnz r6, DelayLoop
ret
LEDMAP: ; 八段管显示码
db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h
db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h
DisplayLED:
mov r0, #LEDBuf
mov r1, #6 ; 共6个八段管
mov r2, #00100000b ; 从左边开始显示
MOV P1,#0FFH
Loop: mov P1, #0 ; 关所有八段管
mov a, @r0
mov P0, A
mov a, r2
mov P1, A ; 显示一位八段管
mov r6, #01H
acall Delay
mov a, r2 ; 显示下一位
rr a
mov r2, a
inc r0
djnz r1, Loop
ret
; ===============================================
ToLED:
mov dptr, #LEDMap
movc a, @a+dptr
ret
Start:
mov TMOD, #02h ; 模式2, 定时器
mov TH0, #T100us
mov TL0, #T100us
mov IE, #10000010b ; EA=1, IT0 = 1
mov Hour, #0
mov Minute, #0
mov Second, #0
mov C100us, #27h;#high(Tick)
mov C100us+1, #10h;#low(Tick)
setb TR0 ; 启动定时器0
MOV A, #3
MLoop:
mov a, Hour
mov b, #10
div ab
acall ToLED
mov LEDBuf, a
mov a, b
acall ToLED
orl a, #80h
mov LEDBuf+1, a
mov a, Minute
mov b, #10
div ab
acall ToLED
mov LEDBuf+2, a
mov a, b
acall ToLED
orl a, #80h
mov LEDBuf+3, a
mov a, Second
mov b, #10
div ab
acall ToLED
mov LEDBuf+4, a
mov a, b
acall ToLED
mov LEDBuf+5, a
acall DisplayLED
ljmp MLoop
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -