⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 h18.asm

📁 (1)完成键盘
💻 ASM
字号:

OUTBIT  equ 08002h  ; 位控制口
OUTSEG  equ 08004h  ; 段控制口
IN      equ 08001h  ; 键盘读入口

LEDBuf  equ  60h     ; 显示缓冲
Hour    equ  40h
Minute  equ  41h
Second  equ  42h
C100us  equ  43h

Tick    equ  10000
T100us  equ  256-50

       ljmp  Start

       org     000bh
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, #high(Tick)
       mov     C100us+1, #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, #0
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 ; 从左边开始显示
Loop:
       mov   dptr, #OUTBIT
       mov   a, #0
       movx  @dptr, a        ; 关所有八段管

       mov   a, @r0
       mov   dptr, #OUTSEG
       movx  @dptr,a
       mov   dptr, #OUTBIT
       mov   a, r2
       movx  @dptr, a        ; 显示一位八段管

       mov   r6, #1
       call  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, #high(Tick)
       mov     C100us+1, #low(Tick)
       setb    TR0                ; 启动定时器0

MLoop:
       mov     a, Hour
       mov     b, #10
       div     ab
       call    ToLED
       mov     LEDBuf, a
       mov     a, b
       call    ToLED
       orl     a, #80h
       mov     LEDBuf+1, a

       mov     a, Minute
       mov     b, #10
       div     ab
       call    ToLED
       mov     LEDBuf+2, a
       mov     a, b
       call    ToLED
       orl     a, #80h
       mov     LEDBuf+3, a

       mov     a, Second
       mov     b, #10
       div     ab
       call    ToLED
       mov     LEDBuf+4, a
       mov     a, b
       call    ToLED
       mov     LEDBuf+5, a

       call    DisplayLED
       ljmp    MLoop

       end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -