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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

單片機控制蜂鳴器鳴奏音樂 中北大學:馬政貴首先介紹蜂鳴器的發(fā)聲原理。我們都知道,音調和音調的時長是音符的主要特征,通過產生不同的音調和音調的時長可以奏出不同的音符來。然后一個個音符串聯(lián)在一起就可以產生美妙的音樂來了。音調主要由聲音的頻率決定,通過單片機給蜂鳴器不同的音頻脈沖來產生不同的音調。要產生音頻脈沖,只要算出某一音頻的周期(周期=1/頻率),然后將此周期除以2即為半周期的時間。利用單片機的定時器工作在計數(shù)模式MODE1下,設定TH0和TL0的值以產生這半個周期,每當計時到達時就將輸出脈沖的I/O(即接蜂鳴器的那個管腳)反相,然后重復計時此半個周期再對I/O反相,就可以在I/O引腳上得到此頻率的脈沖。如果沒有必要進行精確的計時,可以用for循環(huán)空語句來粗略計時即可(本文選用此法)。當單片機使用11.0592Mhz的晶振時,for(i=0;i115;i+);這個空循環(huán)延時約為1ms;當晶振選用12Mhz時,可使用for(i=0;i125;i+);這個空循環(huán)來延時1ms。在這個空循環(huán)外頭再進行一次循環(huán)就可以實現(xiàn)延時若干ms。如:/實現(xiàn)延時若干ms,晶振為11.0592Mhzvoid delay(unsigned int i) unsigned char j; while(i-) for(j=0;j115;j+) ; /例如delay(1000)編便可以實現(xiàn)延時1s/實現(xiàn)延時若干ms,晶振為12Mhzvoid delay(unsigned int i) unsigned char j; while(i-) for(j=0;j125;j+) ; /例如delay(1000)編便可以實現(xiàn)延時1s知道如何產生不同的頻率的音調和進行音調的延時的之后,我們便可以編寫程序來讓單片機控制蜂鳴器來鳴奏音樂了。下面附上不同音調所對應的頻率表: 下文介紹了讓單片機控制蜂鳴器進行鳴奏音樂的兩種方法。第一種方法是基礎的方法,就是順序地讓蜂鳴器挨個地演奏每個音符。方法一:(此歌曲是莫斯哥郊外的晚上的樂曲)#include sbit fmq=P36;void delay(unsigned int a) unsigned char b; while(a-) for(b=0;b115;b+) ; void yanzou(unsigned char i,unsigned int pai) unsigned char y;unsigned int j; for(j=0;jpai;j+) fmq=0; for(y=0;yi;y+) ; fmq=1; for(y=0;yi;y+) ; void main()while(1) yanzou(65,220); /1/2拍 中音6yanzou(55,262); /1/2拍 高音1yanzou(44,330); /1/2拍 高音3yanzou(55,262); /1/2拍 高音1yanzou(49,587); /1拍 高音2yanzou(55,262); /1/2拍 高音1yanzou(58,247); /1/2拍 中音7 yanzou(44,660); /1拍 高音3yanzou(49,587); /1拍 高音2yanzou(65,880); /2拍 中音6yanzou(55,262); /1/2拍 高音1yanzou(44,330); /1/2拍 高音3yanzou(37,392); /1/2拍 高音5yanzou(37,392); /1/2拍 高音5 yanzou(65,440); /1拍 中音6yanzou(37,392); /1/2拍 高音5yanzou(41,349); /1/2拍 高音4yanzou(44,2640); /4拍 高音3yanzou(41,698); /1拍 高音4yanzou(37,784); /1拍 高音5yanzou(29,492); /1/2拍 高音7yanzou(33,440); /1/2拍 高音6yanzou(44,660); /1拍 高音3delay(250);yanzou(58,494); /1拍 中音7yanzou(65,220); /1/2拍 中音6yanzou(44,330); /1/2拍 高音3yanzou(49,293); /1/2拍 高音2yanzou(41,698); /1拍 高音4yanzou(41,698); /1拍 高音4yanzou(37,392); /1/2拍 高音5yanzou(41,349); /1/2拍 高音4yanzou(44,660); /1拍 高音3yanzou(49,293); /1/2拍 高音2yanzou(55,262); /1/2拍 高音1yanzou(44,660); /1拍 高音3yanzou(49,587); /1拍 高音2yanzou(65,880); /2拍 中音6yanzou(65,880); /2拍 中音6yanzou(41,698); /1拍 高音4yanzou(37,784); /1拍 高音5yanzou(29,492); /1/2拍 高音7yanzou(33,440); /1/2拍 高音6yanzou(44,660); /1拍 高音3delay(250);yanzou(58,494); /1拍 中音7yanzou(65,220); /1/2拍 中音6yanzou(44,330); /1/2拍 高音3yanzou(49,293); /1/2拍 高音2yanzou(41,698); /1拍 高音4yanzou(41,698); /1拍 高音4yanzou(37,392); /1/2拍 高音5yanzou(41,349); /1/2拍 高音4yanzou(44,660); /1拍 高音3yanzou(49,293); /1/2拍 高音2yanzou(55,262); /1/2拍 高音1yanzou(44,660); /1拍 高音3yanzou(49,587); /1拍 高音2yanzou(65,880); /2拍 中音6yanzou(65,880); /2拍 中音6 delay(5000);觀察方法一的主函數(shù)可以發(fā)現(xiàn),每個語句的形式和實現(xiàn)的功能都是一樣的,于是可以想到用數(shù)組來進行代碼的簡化。方法二便是通過數(shù)組來實現(xiàn)的。方法二:(此樂曲是讓我們蕩起雙槳)#include sbit fmq=P36;sbit start=P14; /定義了一個按鍵進行控制,當按鍵按下時,開始演奏音樂void delay(unsigned int i) unsigned char j;while(i-)for(j=0;j115;j+);void yanzou(unsigned char pinlv,unsigned int jiepai)unsigned char pl;unsigned int jp;if(jiepai=1) delay(250); /1/2拍暫停,即1/2拍的0else if(jiepai=2) delay(500); /1拍暫停,即1拍的0else for(jp=0;jpjiepai;jp+) fmq=0; for(pl=0;plpinlv;pl+); fmq=1; for(pl=0;plpinlv;pl+);void main()unsigned char i,x;unsigned char code pinlv=131,110,98, 87, 73, 87, 110,98, 131,0,110,98, 87, 73, 73, 65, 98, 87,87,87,73,65,73,65,55,58,65,73,65,87,110,98,87,73,110,131,110,98,87,65,73,73,0,87,65,65,73,82,87,98,87,73,131,110,98,0,110,98,87,73,65,55,58,65,73,87,65,65; unsigned int code jiepai=110,131,147,494,196,165,131,294,440,1,131,147,165,588,196,440,294,660,330,165,196,880,588,220,262,124,110,196,220,330,131,147,495,196,262,220,131,147,165,220,784,392,2,660,660,220,196,175,330,588,495,196,110,131,147,2,131,147,330,392,440,524,247,220,196,165,880,880;i=68; /數(shù)組共有68個元

溫馨提示

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

評論

0/150

提交評論