?? 52蜂鳴器奏樂(lè)《生日快樂(lè)》(匯編語(yǔ)言).asm
字號(hào):
;本程序?qū)崿F(xiàn)蜂鳴器演奏歌曲功能
;樂(lè)曲名稱:生日快樂(lè)
;///////////////////////////////////////////
BUZZER EQU p2.0
org 0000h ;主程序起始地址
mov sbuf,#00000000b ;防止連接點(diǎn)陣的8P排線沒(méi)有取掉,導(dǎo)致無(wú)法發(fā)聲
ajmp main ;跳至主程序
org 000bh ;timer0中斷起始地址
jmp tim0 ;跳至timer0中斷子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0030h
main:
mov tmod,#01h ;設(shè)timer0在MODE1
mov ie,#82h ;中斷使能
start0:
mov 30h,#00h ;取簡(jiǎn)譜碼指針
next: mov a,30h ;簡(jiǎn)譜碼指針載入A
mov dptr,#table ;至table取簡(jiǎn)譜碼
movc a,@a+dptr
mov r2,a ;取到的簡(jiǎn)譜碼暫存于R2
jz end0 ;是否取到00(結(jié)束碼)?
anl a,#0fh ;不是,則取低4位(節(jié)拍碼)
mov r5,a ;將節(jié)拍碼存入R5
mov a,r2 ;將取到的簡(jiǎn)譜碼再載入A
swap a ;高低四位交換
anl a,#0fh ;取低四位(音符碼)
jnz sing ;取到的音符碼是否為零?
clr tr0 ;是,則不發(fā)音
jmp d1
sing: dec a ;取到的音符碼減1(不含0).
mov 22h,a ;存入(22H).
rl a ;乘2
mov dptr,#table1 ;至table1取相對(duì)的高位字節(jié)計(jì)數(shù)值
movc a,@a+dptr
mov th0,a ;取到的高位字節(jié)存入TH0
mov 21h,a ;取到的高位字節(jié)存入(21H)
mov a,22h ;再載入取的的音符碼
rl a ;乘2
inc a ;加1
movc a,@a+dptr ;至table1取相對(duì)的低位字節(jié)計(jì)數(shù)值
mov tl0,a ;取到的高位字節(jié)存入TL0
mov 20h,a ;取到的高位字節(jié)存入(20H)
setb tr0 ;啟動(dòng)timer0
d1: call delay ;基本單位時(shí)間1/4拍187毫秒
inc 30h ;取簡(jiǎn)譜碼指針加1
jmp next ;取下一個(gè)碼
end0: clr tr0 ;停止timer0
jmp start0 ;重復(fù)循環(huán)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;time0中斷服務(wù)子程序用來(lái)產(chǎn)生相應(yīng)的音調(diào)脈沖頻率。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
tim0:
push acc ;將A的值暫存于堆棧
push psw ;將psw的值暫存于堆棧
mov tl0,20h ;重設(shè)計(jì)數(shù)值
mov th0,21h
cpl BUZZER ;將蜂鳴器反相
pop psw ;至堆棧取回psw的值
pop acc ;至堆棧取回a的值
reti ;返回主程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
delay: mov r7,#02h ;187毫秒
d2: mov r4,#187
d3: mov r3,#248
djnz r3,$
djnz r4,d3
djnz r7,d2
djnz r5,delay ;決定節(jié)拍
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
table1:
dw 64260,64400,64524,64580
dw 64684,64777,64820,64898
dw 64968,65030,65058,65110
dw 65157,65178,65217
table:
;1
db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h
;2
db 82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h
;3
db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h
;4
db 82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h,00
end
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -