📄 speaker1.asm
字号:
;音频驱动——演奏《八月桂花香》
org 0
ljmp start
org 000bh
inc 20h ;中断服务,中断计数器加1
mov th0,#0d8h
mov tl0,#0efh ;12M晶振,形成10毫秒中断
reti
start: mov sp,#50h
mov th0,#0d8h
mov tl0,#0efh
mov tmod,#01h
mov ie,#82h
music0: nop
mov dptr,#sdata ;表格地址送dptr
mov 20h,#00h ;中断计数器清0
mov b,#00h ;表序号清0
music1: nop
clr a
movc a,@a+dptr ;查表取代码
jz end0 ;是00h,则结束
cjne a,#0ffh,music5
ljmp music3
music5: nop
mov r6,a
inc dptr
mov a,b
movc a,@a+dptr ;取节拍代码送r7
mov r7,a
setb tr0 ;启动计数
music2: nop
cpl p1.7
mov a,r6
mov r3,a
lcall delay
mov a,r7
cjne a,20h,music2 ;中断计数器(20h)=r7否?
;不等,则继续循环
mov 20h,#00h ;等于,则取下一代码
inc dptr
ljmp music1
music3: nop
clr tr0 ;延时100毫秒
mov r2,#0dh
music4: nop
mov r3,#0ffh
lcall delay
djnz r2,music4
inc dptr
ljmp music1
end0: nop
mov r2,#64h ;歌曲结束,延时1秒后继续
music6: mov r3,#00h
lcall delay
djnz r2,music6
ljmp music0
delay: nop
del3: mov r4,#02h
del4: nop
djnz r4,del4
nop
djnz r3,del3
ret
sdata: db 18h,30h,1ch,10h,20h,40h,1ch,10h,18h,10h,20h,10h,1ch,10h,18h,40h
db 1ch,20h,20h,20h,1ch,20h,18h,20h,20h,80h,0ffh,20h,30h,1ch,10h,18h
db 20h,15h,20h,1ch,20h,20h,20h,26h,40h,20h,20h,2bh,20h,26h,20h,20h
db 20h,30h,80h,0ffh,20h,20h,1ch,10h,18h,10h,20h,20h,26h,20h,2bh,20h
db 30h,20h,2bh,40h,20h,20h,1ch,10h,18h,10h,20h,20h,26h,20h,2bh,20h
db 30h,20h,2bh,40h,20h,30h,1ch,10h,18h,20h,15h,20h,1ch,20h,20h,20h
db 26h,40h,20h,20h,2bh,20h,26h,20h,20h,20h,30h,80h,20h,30h,1ch,10h
db 20h,10h,1ch,10h,20h,20h,26h,20h,2bh,20h,30h,20h,2bh,40h,20h,15h
db 1fh,05h,20h,10h,1ch,10h,20h,20h,26h,20h,2bh,20h,30h,20h,2bh,40h
db 20h,30h,1ch,10h,18h,20h,15h,20h,1ch,20h,20h,20h,26h,40h,20h,20h
db 2bh,20h,26h,20h,20h,20h,30h,30h,20h,30h,1ch,10h,18h,40h,1ch,20h
db 20h,20h,26h,40h,13h,60h,18h,20h,15h,40h,13h,40h,18h,80h,00h
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -