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

📄 he28.asm

📁 51系列单片机的汇编程序包
💻 ASM
字号:
MODE     equ 082h
PORTA    equ 0ffd8h     ;8255 并行口 A
PCTL     equ 0ffdbh     ;8255 控制字
OUTBIT   equ 0ffddh     ;位控制口/键扫口

        org  0
Start:
        mov  sp,#40h
        mov  a,#MODE
        mov  dptr,#PCTL
        movx @dptr,a

MLoop:
        call GetKey
        mov  b,a
        jz   MLoop      ; =0, <1
        anl  a,#7
        jz   MLoop      ; >7
        mov  a,b

        mov  b,#40
        mul  ab
        cpl  a
        mov  r0,a
        call Play
        sjmp MLoop

Play:
        clr  a
        mov  dptr,#PORTA
        movx @dptr,a
        call PlayDelay

        mov  a,#1
        movx @dptr,a
        call PlayDelay

        ret

PlayDelay:
        djnz r0,$
        ret

GetKey:
        call ScanKey
        mov  r4,a
        mov  r1,#48h
        mov  a,@r1
        mov  r2,a
        inc  r1
        mov  a,@r1
        mov  r3,a
        mov  a,r4
        xrl  a,r3
        mov  r3,04h
        mov  r4,02h
        jz   Key1
        mov  r2,#88h
        mov  r4,#88h
Key1:   dec  r4
        mov  a,r4
        xrl  a,#82h
        jz   Key2
        mov  a,r4
        xrl  a,#0eh
        jz   Key2
        mov  a,r4
        jz   Key3
        mov  r4,#20h
        dec  r2
        sjmp Key4
Key3:   mov  r4,#0fh
Key2:   mov  r2,04h
        mov  r4,03h
Key4:   mov  r1,#48h
        mov  a,r2
        mov  @r1,a
        inc  r1
        mov  a,r3
        mov  @r1,a
        mov  a,r4
        jb   acc.5,Exit
        jb   acc.4,Exit
        mov  dptr,#KeyTable
        movc a,@a+dptr
Exit:   ret

ScanKey:
        setb RS1
        mov  r2,#0feh
        mov  r3,#08h
        mov  r0,#00h
LoopS:  mov  r1,#Low(OUTBIT)
        mov  a,r2
        movx @r1,a
        rl   a
        mov  r2,a
        inc  r1
        movx a,@r1
        cpl  a
        anl  a,#0fh
        jnz  Scan
        inc  r0
        djnz r3,LoopS
ReTKey3:mov  a,#20h
TKey3:  mov  r2,a
        clr  a
        mov  r1,#Low(OUTBIT)
        movx @r1,a
        mov  a,r2
        clr  RS1
        ret

Scan:
        cpl  a
        jb   acc.0,TKey0
        mov  a,#00h
        sjmp EndLoop
TKey0:  jb   acc.1,TKey1
        mov  a,#08h
        sjmp EndLoop
TKey1:  jb   acc.2,TKey2
        mov  a,#10h
        sjmp EndLoop
TKey2:  jb   acc.3,ReTKey3
        mov  a,#18h
EndLoop:add  a,r0
        sjmp TKey3

KeyTable:                       ;键码定义
        db   07h,04h,08h,05h,09h,06h,0ah,0bh
        db   01h,00h,02h,0fh,03h,0eh,0ch,0dh

        end

⌨️ 快捷键说明

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