📄 he28.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 + -