




已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
單片機(jī)控制蜂鳴器鳴奏音樂 中北大學(xué):馬政貴首先介紹蜂鳴器的發(fā)聲原理。我們都知道,音調(diào)和音調(diào)的時(shí)長是音符的主要特征,通過產(chǎn)生不同的音調(diào)和音調(diào)的時(shí)長可以奏出不同的音符來。然后一個(gè)個(gè)音符串聯(lián)在一起就可以產(chǎn)生美妙的音樂來了。音調(diào)主要由聲音的頻率決定,通過單片機(jī)給蜂鳴器不同的音頻脈沖來產(chǎn)生不同的音調(diào)。要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(周期=1/頻率),然后將此周期除以2即為半周期的時(shí)間。利用單片機(jī)的定時(shí)器工作在計(jì)數(shù)模式MODE1下,設(shè)定TH0和TL0的值以產(chǎn)生這半個(gè)周期,每當(dāng)計(jì)時(shí)到達(dá)時(shí)就將輸出脈沖的I/O(即接蜂鳴器的那個(gè)管腳)反相,然后重復(fù)計(jì)時(shí)此半個(gè)周期再對(duì)I/O反相,就可以在I/O引腳上得到此頻率的脈沖。如果沒有必要進(jìn)行精確的計(jì)時(shí),可以用for循環(huán)空語句來粗略計(jì)時(shí)即可(本文選用此法)。當(dāng)單片機(jī)使用11.0592Mhz的晶振時(shí),for(i=0;i115;i+);這個(gè)空循環(huán)延時(shí)約為1ms;當(dāng)晶振選用12Mhz時(shí),可使用for(i=0;i125;i+);這個(gè)空循環(huán)來延時(shí)1ms。在這個(gè)空循環(huán)外頭再進(jìn)行一次循環(huán)就可以實(shí)現(xiàn)延時(shí)若干ms。如:/實(shí)現(xiàn)延時(shí)若干ms,晶振為11.0592Mhzvoid delay(unsigned int i) unsigned char j; while(i-) for(j=0;j115;j+) ; /例如delay(1000)編便可以實(shí)現(xiàn)延時(shí)1s/實(shí)現(xiàn)延時(shí)若干ms,晶振為12Mhzvoid delay(unsigned int i) unsigned char j; while(i-) for(j=0;j125;j+) ; /例如delay(1000)編便可以實(shí)現(xiàn)延時(shí)1s知道如何產(chǎn)生不同的頻率的音調(diào)和進(jìn)行音調(diào)的延時(shí)的之后,我們便可以編寫程序來讓單片機(jī)控制蜂鳴器來鳴奏音樂了。下面附上不同音調(diào)所對(duì)應(yīng)的頻率表: 下文介紹了讓單片機(jī)控制蜂鳴器進(jìn)行鳴奏音樂的兩種方法。第一種方法是基礎(chǔ)的方法,就是順序地讓蜂鳴器挨個(gè)地演奏每個(gè)音符。方法一:(此歌曲是莫斯哥郊外的晚上的樂曲)#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),每個(gè)語句的形式和實(shí)現(xiàn)的功能都是一樣的,于是可以想到用數(shù)組來進(jìn)行代碼的簡化。方法二便是通過數(shù)組來實(shí)現(xiàn)的。方法二:(此樂曲是讓我們蕩起雙槳)#include sbit fmq=P36;sbit start=P14; /定義了一個(gè)按鍵進(jìn)行控制,當(dāng)按鍵按下時(shí),開始演奏音樂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個(gè)元
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鋼鐵是怎樣煉成的網(wǎng)絡(luò)閱讀推廣計(jì)劃
- 六年級(jí)道德與法治能力培養(yǎng)輔優(yōu)計(jì)劃
- 酒店管理項(xiàng)目部年度工作總結(jié)范文
- 人教版六年級(jí)數(shù)學(xué)下冊(cè)家長參與計(jì)劃
- 大型活動(dòng)突發(fā)事件應(yīng)急預(yù)案和處理流程
- 跨境電商物流市場營銷管理畢業(yè)論文范文
- 2024-2025學(xué)年牛津譯林版英語四年級(jí)教學(xué)方案計(jì)劃
- 水利工程測繪成果保密管理制度流程
- 一年級(jí)語文新教師實(shí)習(xí)計(jì)劃范文
- 新時(shí)代教師師德教育心得體會(huì)
- 設(shè)備預(yù)驗(yàn)收?qǐng)?bào)告
- 4G5G 移動(dòng)通信技術(shù)-華為4G基站設(shè)備
- 安裝工作業(yè)安全操作規(guī)程
- 切格瓦拉完整
- 高中英語選擇性必修一詞匯表默寫版含答案(人教版2019)
- 樓梯維修施工方案
- 水培果菜營養(yǎng)液日本山崎華南農(nóng)業(yè)大學(xué)配方大全
- 幼兒園安全教育課件:《咬人的縫隙》
- 液壓剪板機(jī)qc11y說明書
- 鐵路工務(wù)專業(yè)更換軌件作業(yè)標(biāo)準(zhǔn)及流程
- 貴州省黔南州2022-2023學(xué)年高二下學(xué)期期末考試地理試題
評(píng)論
0/150
提交評(píng)論