?? 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 + -