羅衛(wèi)星
(山西電力職業(yè)技術(shù)學(xué)院,山西 太原 030021)
單片機(jī)音樂播放器設(shè)計(jì)
羅衛(wèi)星
(山西電力職業(yè)技術(shù)學(xué)院,山西 太原 030021)
利用單片機(jī)播放音樂大概是單片機(jī)愛好者感興趣的問題之一。文章從單片機(jī)的基本發(fā)音出發(fā),談單片機(jī)音樂播放器的設(shè)計(jì)原理,并給出具體實(shí)例,以供參考。
單片機(jī);音樂;程序設(shè)計(jì)
單片機(jī)是芯片級計(jì)算機(jī)系統(tǒng),它可以嵌入到任何對象體系中去,實(shí)現(xiàn)智能化控制。獨(dú)具魅力的單片機(jī)能使你體會(huì)到電腦的真諦,你可以用單片機(jī)親自動(dòng)手設(shè)計(jì)播放簡單音樂程序等。利用單片機(jī)播放音樂大概是單片機(jī)愛好者感興趣的問題之一。本文從單片機(jī)的基本發(fā)音原理出發(fā),談?wù)剢纹瑱C(jī)音樂播放器的設(shè)計(jì)原理,并給出具體實(shí)例,以供參考。
聲音是由物體振動(dòng)產(chǎn)生的,振動(dòng)的頻率不同,發(fā)出的聲音也就不同,有規(guī)律的振動(dòng)發(fā)出的聲音稱為“音樂”。一首音樂是由多個(gè)音符構(gòu)成的。每個(gè)音符都對應(yīng)著一個(gè)確定的頻率。例如C調(diào)中的“1”對應(yīng)的振動(dòng)頻率是524 Hz。因此,可以利用不同頻率的組合,構(gòu)成人們想要的音樂。
樂曲中不同的音符,實(shí)質(zhì)就是不同頻率的聲音??梢酝ㄟ^單片機(jī)定時(shí)器計(jì)數(shù)的方式產(chǎn)生不同頻率的脈沖信號,再利用延時(shí)來控制發(fā)音的長短,即可控制音調(diào)中的節(jié)拍,經(jīng)過放大電路,用P1口的P1.0輸出驅(qū)動(dòng)揚(yáng)聲器,就產(chǎn)生了美妙和諧的樂曲。人們將樂曲中每一個(gè)音符所對應(yīng)的頻率換算成相應(yīng)的計(jì)數(shù)初值。然后,將這首樂曲中所有音符的計(jì)數(shù)初值編成一個(gè)表,并且每一個(gè)音符的計(jì)數(shù)初值對應(yīng)一個(gè)確定的數(shù)字碼(簡譜碼)見表1。
表1 簡譜對應(yīng)的頻率、簡譜碼和計(jì)數(shù)初值
一首樂曲的每一個(gè)音符除了頻率之外,還有不同的節(jié)拍,即該音符發(fā)音的持續(xù)時(shí)間。只要設(shè)定延時(shí)時(shí)間就可以求得節(jié)拍的時(shí)間。例如:假設(shè)1/4拍為1DELAY,則1拍應(yīng)為4DELAY,以此類推。所以只要求出1/4拍的1DELAY時(shí)間,其余的節(jié)拍就是它的倍數(shù)。
表2 各調(diào)1/4節(jié)拍的時(shí)間設(shè)定和各調(diào)1/8節(jié)拍的時(shí)間設(shè)定
樂曲《梁祝》的程序:
ORG 0000H
SJMP MAIN
ORG 000BH
AJMP ZD
ORG 0050H 主程序
MAIN:MOV TMOD,#01H
MOV IE,#82H
LOOP:MOV R0,#00;取簡譜碼指針
NEXT:MOV A,R0
MOV DPTR,#TAB
MOVC A,@A+DPTR;查表取音調(diào)和節(jié)拍
MOV R2,A
JZ TZ;為零,不進(jìn)行處理
ANL A,#0FH;不是,則取低4位(節(jié)拍碼)
MOV R5,A;將節(jié)拍碼存入R5
MOV A,R2;將取到的簡譜碼再載入A
SWAP A
ANL A,#0FH;取低4位(音符碼)
JNZ LOOP1;根據(jù)音調(diào)決定是否演奏.
CLR TR0
SJMP DELAY
LOOP1:DEC A;取到的音符碼減 1(不含 0)
MOV 25H,A
RL A
MOV DPTR,#TAB1;至TABLE1取相對的高位字節(jié)計(jì)數(shù)值
MOVC A,@A+DPTR
MOV TH0,A;取到的高位字節(jié)存入TH0
MOV 21H,A;取到的高位字節(jié)存入(21H)
MOV A,22H;在載入取到的音符碼
RL A
INC A
MOVC A,@A+DPTR;至TAB1取相對的低位字節(jié)計(jì)數(shù)值
MOV TL0,A;取到的低位字節(jié)存入TL0
MOV 20H,A;取到的低位字節(jié)存入(20H)
SETB TR0
D0:LCALL DELAY;其本單位時(shí)間1/4拍187毫秒
INC R0;取簡譜碼指針加1
JMP NEXT;取下一個(gè)簡譜碼TZ:CLR TR0
JMP LOOP;重復(fù)循環(huán)
ORG 0200H;定時(shí)器中斷服務(wù)程序ZD:PUSH ACC
PUSH PSW
MOV TL0,20H
MOV TH0,21H
CPL P1.0;將P1.0位反相,控制蜂鳴器發(fā)聲
POP PSW
POP ACC
RETI
DELAY:MOV R7,#02;延時(shí)子程序
D2:MOV R4,#187
D3:MOV R3,#248
DJNZ R3,$
DJNZ R4,D3
DJNZ R7,D2
RET
TAB1:決定節(jié)拍
DW 64 260,64 400,64 521,64 580
DW 64 684,64 777,64 820,64 898
DW 64 968,65 030,65 058,65 110
DW 65 157,65 178,65 217
TAB:樂曲名稱《梁?!?/p>
DB 02H,82H,62H,52H,48H,02H,52H,32H,22H,18H
DB 83H,91H,72H,62H,51H,61H,71H,61H,83H,61H
DB 81H,51H,61H,71H,61H,51H,46H,82H,32H,52H
DB 22H,42H,16H,21H,41H,18H,0E4H,13H,21H,43H
DB 51H,21H,41H,12H,83H,81H,61H,81H,58H,53H
DB 61H,31H,22H,13H,21H,42H,52H,0E2H,42H,21H
DB 11H,91H,41H,18H,63H,81H,32H,52H,21H,41H,
DB 16H,0E4H,11H,21H,31H,51H,26H,11H,21H,43H
DB 51H,82H,62H,52H,61H,51H,42H,21H,11H,0E4H
DB 44H,21H,41H,21H,11H,0E1H,11H,21H,41H,18H
DB 61H,81H,51H,61H,51H,41H,32H,21H,41H,18H
DB 08H,0H,04H;曲子最后靜音5拍長的時(shí)間
DB 00H;樂曲結(jié)束
END
[1] 肖婧,《單片機(jī)入門與趣味實(shí)驗(yàn)設(shè)計(jì)》,北京航空航天大學(xué)出版社,2008-4,142-144.
Music Player Mono-chip Computers Design
Luo Weixing
The use of Mono-chip Computersr music player is probably the single chip lovers interested in one of the issues.In this paper,the basic pronunciation of Mono-chip Computers,Mono-chip Computers music player to talk about the design principles,and gives concrete examples for reference.
Single Microchip Computer;Music;Programming
TN 912
A
1000-8136(2010)32-0137-02