📄 a18.asm
字号:
; “验证式” 实验十八 电子琴
;文件名:MCS51\A17.ASM
OUTBIT equ 0e101h
IN equ 0e103h
Pulse equ 0
PulseCNT equ 50h
ToneHigh equ 51h
ToneLow equ 52h
Speaker equ P3.0
ljmp Start
org 000bh
Timer0Int:
push PSW
clr TR0
mov TH0, ToneHigh
mov TL0, ToneLow
setb TR0
mov c, Pulse
mov Speaker, c
cpl 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 00h, 01h, 04h, 07h
db 0fh, 02h, 05h, 08h
db 0eh, 03h, 06h, 09h
db 0dh, 0ch, 0bh, 0ah
db 10H,10H,10H,10H,10H,
db 10H,10H,10H,10H,10H
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 dptr,#0e100h
mov a,#03h
movx @dptr,a
mov TMOD, #01 ; Timer
mov IE, #82h ; EA=1, IT0 = 1
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 + -