📄 h25.asm
字号:
mode equ 082h
PORTA equ 08000h
CTL equ 08003h
OUTBIT equ 09002h
IN equ 09001h
Pulse equ 55h
PulseCNT equ 50h
ToneHigh equ 51h
ToneLow equ 52h
Tone equ 53h
KeyBuf equ 54h
Speaker equ PORTA
ljmp Start
org 000bh
Timer0Int:
push PSW
clr TR0
mov TH0, ToneHigh
mov TL0, ToneLow
setb TR0
mov a, Pulse
mov dptr, #Speaker
movx @dptr,a
inc Pulse
dec PulseCNT
pop PSW
reti
ToneTable:
dw 64578, 64686, 64778, 64821, 64898, 64968, 65029
TestKey:
mov dptr, #OUTBIT
mov a, #0
movx @dptr, a
mov dptr, #IN
movx a, @dptr
cpl a
anl a, #0fh
ret
KeyTable:
db 16h, 15h, 14h, 0ffh
db 13h, 12h, 11h, 10h
db 0dh, 0ch, 0bh, 0ah
db 0eh, 03h, 06h, 09h
db 0fh, 02h, 05h, 08h
db 00h, 01h, 04h, 07h
GetKey:
mov dptr, #OUTBIT
mov P2, dph
mov r0, #Low(IN)
mov r1, #00100000b
mov r2, #6
KLoop:
mov a, r1
cpl a
movx @dptr, a
cpl a
rr a
mov r1, a
movx a, @r0
cpl a
anl a, #0fh
jnz Goon1
djnz r2, KLoop
mov r2, #0ffh
sjmp Exit
Goon1:
mov r1, a
mov a, r2
dec a
rl a
rl a
mov r2, a ; r2 = (r2-1)*4
mov a, r1
mov r1, #4
LoopC:
rrc a
jc Exit
inc r2
djnz r1, LoopC
Exit:
mov dptr, #OUTBIT
clr a
movx @dptr, a
mov a, r2
mov dptr, #KeyTable
movc a, @a+dptr
ret
Start:
mov sp, #70h
mov a, #mode
mov dptr,#CTL
movx @dptr,a
mov TMOD, #01 ; Timer
mov IE, #82h ; EA=1, IT0 = 1
mov Tone,#0
MLoop:
call TestKey
jz MLoop
call GetKey
mov b, a
jz MLoop ; = 0, < 1
anl a, #!7
jnz MLoop ; > 7
dec b
mov a, b
rl a ; a = a*2
mov b, a
mov dptr, #ToneTable
movc a, @a+dptr
mov ToneHigh, a
mov TH0, a
mov a, b
inc a
movc a, @a+dptr
mov ToneLow, a
mov TL0, a
setb TR0
mov PulseCNT, #100
Wait:
mov a,PulseCNT
jnz Wait
clr TR0
ljmp MLoop
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -