單片機控制蜂鳴器鳴奏音樂_第1頁
單片機控制蜂鳴器鳴奏音樂_第2頁
單片機控制蜂鳴器鳴奏音樂_第3頁
單片機控制蜂鳴器鳴奏音樂_第4頁
單片機控制蜂鳴器鳴奏音樂_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、單片機控制蜂鳴器鳴奏音樂一一中北大學:馬政貴首先介紹蜂鳴器的發(fā)聲原理。我們都知道,音調(diào)和音調(diào)的時長是音符的主要特征, 通過產(chǎn)生不同的音調(diào)和音調(diào)的時長可以奏出不同的音符來。然后一個個音符串聯(lián)在一 起就可以產(chǎn)生美妙的音樂來了。音調(diào)主要由聲音的頻率決定,通過單片機給蜂鳴器不同 的音頻脈沖來產(chǎn)生不同的音調(diào)。要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(周期=1/頻率), 然后將此周期除以2即為半周期的時間。利用單片機的定時器工作在計數(shù)模式MODE1 F, 設定THO和TLO的值以產(chǎn)生這半個周期,每當計時到達時就將輸出脈沖的DO (即接蜂鳴 器的那個管腳)反相,然后重復計時此半個周期再對I/O反相,就可以在I

2、/O引腳上得到此 頻率的脈沖。如果沒有必要進行精確的計時,可以用for循壞空語句來粗略計時即可(本文 選用此法)。當單片機使用11.0592M11Z的晶振時,for(i=0;i115;i+);這個空循環(huán)延時約為 1ms;當晶振選用12M11Z時,可使用fbr(i=O;i125;i+);這個空循環(huán)來延時1ms。在這個空循 環(huán)外頭再進行一次循環(huán)就可以實現(xiàn)延時若干ms。女山實現(xiàn)延時若干ms,晶振為11.0592M11Z void delay(unsigned int i)unsigned charj; wliile(i-)foi(j=0j115j+);例如delav(lOOO)便可以實現(xiàn)延時Is實現(xiàn)

3、延時若干ms,晶振為12Mhz void delav(unsigned int i)unsigned chai j; wliile(i-)for(j=Oj125j+);例如delay(1000)編便可以實現(xiàn)延時Is知道如何產(chǎn)生不同的頻率的音調(diào)和進行音調(diào)的延時的之后,我們便可以編寫程序來 讓單片機控制蜂鳴器來鳴奏音樂了。下面附上不同音調(diào)所對應的頻率表:61 Cg備音符頻率與計數(shù)值T的對腕表音符類宰(Hz)簡語碼T值)音符強率(Hz)畫溝碼(T值丿低1 DO26263628W4FA*74064860 1 DO#27763731中5 SO78464898M 2 RE294638355SO#83164

4、934#2 RE#31163928中6LA88064968fi 3M33064021#6932649944FA34964103中7S!98365030#4 FA*37064I&5島1DO104665058低5 SO39264260# 1 DO#110965085#5SO*41564331島2RE117565110低6 LA44064400#2RE#124565134646664463高3M131865157ft 7 SI49464524高4FA139765178中1 DO523645S0W4FA#14806519SVIDO*55464633rft 5 SO156865217中2 RE58764

5、684*5SO#166165235#2 RE#62264732高6 LA1760I65252中3M65964777侑61865I65268中4 FA69864S20高7 SI196765283下文介紹了讓單片機控制蜂鳴器進行鳴奏音樂的兩種方法。第一種方法是基礎的方 法,就是順序地讓蜂鳴器挨個地演奏每個音符。方法一:(此歌曲是莫斯哥郊外的晚上的樂曲)#include sbit finq=P3A6;void delay(unsigned int a)unsigned char b;wlule(a)foi(b=0;b115;b+);void yaiizou(unsigned char unsigne

6、d mt pai)unsigned char y;unsigned mt j;fbr(j=Ojpaij+)finq=0; for(y=0;yi;y+); finq=l;for(y=0;yi;y+);void mam()wlule(l)vanzou(65,220);l/2拍中音6yanzou(55,262);/1/2拍高音1yanzou(44,330);1/2拍高音3yanzou(55,262);/1/2 拍高音1yaiizou(49,587);/I拍高音2yaiizou(55,262);/1/2 拍高音1yaiizou(5&247);/1/2 拍中音7yanzou(44,660);/I拍高音3

7、yanzou(49,587);/I拍高音2yaiizou(65,880);2拍中音6yanzou(55,262);/1/2拍高音1yaiizou(44,330);1/2拍高音3yaiizou(37,392);/1/2 拍高音5yanzou(37,392);/1/2 拍高音5vanzou(65,440);/I拍中音6yanzou(37,392);/1/2 拍高音5yanzou(41,349);/1/2 拍高音4yaiizou(44,2640);4拍高音3yaiizou(4L698);/I拍高音4yanzou(37,784);/I拍高音5yanzou(29,492);/1/2 拍高音7yanzou

8、(33,440);/1/2 拍高音6yanzou(44,660);/I拍咼首3delav(250);yaiizou(5 8,494);/I拍中音7yaiizou(65,220);1/2拍中音6yanzou(44,330);1/2拍高音3yanzou(49,293);/1/2 拍高音2yanzou(41,698);1拍咼音4yanzou(4L698);/I拍高音4yanzou(37,392);l/2 拍咼音5yanzou(41,349);/1/2 拍高音4yaiizou(44,660);/I拍咼音3yanzou(49,293);/1/2 拍咼音2yaiizou(55,262);/1/2拍高音1y

9、anzou(44,660);/I拍高音3yaiizou(49,587);/I拍高音2yaiizou(65,880);2拍中音6yaiizou(65,880);2拍中音6yanzou(4L698);/I拍高音4yaiizou(3 7,784);/I拍高音5yaiizou(29,492);/1/2 拍高音7yaiizou(33,440);/1/2 拍高音6yaiizou(44,660);1拍咼音3delav(250);yanzou(5 &494);1拍中音7yanzou(65,220);1/2拍中音6yaiizou(44,330);/1/2拍高音3yanzou(49,293);/1/2 拍高音2y

10、anzou(41,698);/I拍高音4yanzou(4L698);/I拍高音4yanzou(37,392);/1/2 拍咼音5yaiizou(41,349);/1/2 拍咼音4yaiizou(44,660);1拍咼音3yaiizou(49,293);/1/2 拍高音2yanzou(55,262);/1/2拍高音1yanzou(44,660);/I拍咼音3yanzou(49,587);1拍咼音2yanzou(65,880);2 拍 中音 6yanzou(65,880);/2拍 中音6delav(5000);觀察方法一的主函數(shù)可以發(fā)現(xiàn),每個語句的形式和實現(xiàn)的功能都是一樣的,于是可以想到用 數(shù)組來

11、進行代碼的簡化。方法二便是通過數(shù)組來實現(xiàn)的。方法二:(此樂曲是讓我們蕩起雙槳)#include sbit finq=P3A6;sbit stait=PlA4;定義了一個按鍵進行控制,當按鍵按下時,開始演奏音樂void delay(unsigned int i)unsigned charj;while(i-)for(j=0j115j+);void yaiizou(unsigned char pinlv?unsigned mt jiepai)unsigned char pl;unsigned mtjp;if(jiepai=l) delay(250);/1/2 拍暫停,即 1/2 拍的 0else

12、if(jiepai=2) delay(500); /I 拍暫停,即 1 拍的 0elsefbr(jp=Ojpjiepaijp+)finq=O;fbi(pl=O;plpHilv;pl-H-);finq=l;fbi(pl=O;plpHilv;pl-H-);void main()unsigned char i.x;unsigned char code pinlv=1315110,98, 87, 73, 87, 110,98, 131,0,110,9& 87, 73, 73, 65, 98,87,87,87,73,65,73,65,55,5&65,73,65,87,110,9&87,73,11031J

13、10、9&87,65,73,73,0,87,65,65,73$ 2,87,9&87,733110,98O110,9&87,73,65,55,5&65,73,87,65,65;unsignedintcodejiepai= 110J31J47494496465431,294,440J431J47J65,58&196440294,660,330J 65,196 ,880,58&220,262,124,110,196,220,330,131,147,495,196,262,220,131,147,165,220/784,3922,660, 660,220)96,175,330,588,495,196,110,131,147,2,131,147,330,392,440,524,247,220,19665,880,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論