




已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(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è)周期再對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)所對應(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 品質(zhì)控制流程優(yōu)化考核試卷
- 產(chǎn)品注冊與認(rèn)證流程考核試卷
- 光學(xué)玻璃加工安全規(guī)范考核試卷
- 中國銀行江蘇分行面試題及答案
- java分治法面試題及答案
- 一二二考試試題及答案
- 警察榮譽(yù)面試題及答案
- 全國統(tǒng)一資本市場構(gòu)建
- 產(chǎn)品質(zhì)量標(biāo)準(zhǔn)銜接體系構(gòu)建
- 《 現(xiàn)代質(zhì)量管理(第3版)》-10 質(zhì)量監(jiān)督
- 堅(jiān)持嚴(yán)格陣地管理制度
- 2025-2030全球及中國實(shí)驗(yàn)室信息管理系統(tǒng)和和LIMS行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報(bào)告
- T/BECC 002-2024智算中心技術(shù)要求和評估方法
- 2025湖南中考:物理高頻考點(diǎn)
- 轉(zhuǎn)臺技術(shù)協(xié)議書范本
- AI與VR在麻醉教學(xué)中的應(yīng)用及個(gè)性化學(xué)習(xí)路徑探討
- 《地球物理測井技術(shù)》課件2
- 《流域演化特征》課件
- 廣東省深圳市福田區(qū)耀華實(shí)驗(yàn)學(xué)校2025年六年級下學(xué)期5月模擬預(yù)測數(shù)學(xué)試題含解析
- 2025年安徽中醫(yī)藥高等??茖W(xué)校單招職業(yè)適應(yīng)性測試題庫有答案
- 2025年山東省威海市市屬事業(yè)單位招聘(綜合類)考試筆試高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
評論
0/150
提交評論