![用51單片機演奏音樂_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/5/058cd090-5a70-4862-9921-979cef5cf80d/058cd090-5a70-4862-9921-979cef5cf80d1.gif)
![用51單片機演奏音樂_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/5/058cd090-5a70-4862-9921-979cef5cf80d/058cd090-5a70-4862-9921-979cef5cf80d2.gif)
![用51單片機演奏音樂_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/5/058cd090-5a70-4862-9921-979cef5cf80d/058cd090-5a70-4862-9921-979cef5cf80d3.gif)
![用51單片機演奏音樂_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/5/058cd090-5a70-4862-9921-979cef5cf80d/058cd090-5a70-4862-9921-979cef5cf80d4.gif)
![用51單片機演奏音樂_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-6/5/058cd090-5a70-4862-9921-979cef5cf80d/058cd090-5a70-4862-9921-979cef5cf80d5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、單片機演奏音樂一般說來,單片機演奏音樂基本都是單音頻率,它不包含相應(yīng)幅度的諧波頻率,也就是說不能象電子琴那樣 能奏岀多種音色的聲音。因此單片機奏樂只需弄淸楚兩個槪念即可,也就是音調(diào)”和節(jié)舶”。音調(diào)表示一個 音符唱多高的頻率,節(jié)拍表示一個音符唱多長的時間。在音樂中所謂“音調(diào)”,英實就是我們常說的音高”。在音樂中常把五線譜中央C上方的A音泄為標準音 高,英頻率仁440Hzo當兩個聲音信號的頻率相差一倍時,也即f2=2fl時,則稱f2比仃高一個倍頻程,在音樂 中1與.1 (1前而的點應(yīng)在1的上面),2與.2正好相差一個倍頻程,在音樂學(xué)中稱它相差一個八度音。在 一個八度音內(nèi),有22個半音。以2i八音區(qū)
2、為例,12個半音是:1#1、#12、2#2、#23、34、 4一#4, #45、5 一#5、#56、6#6、#67、7i。其中“#”表示半音,用于升高或降低半個音。這 12個音階的分度基本上是以對數(shù)關(guān)系來劃分的。如果我們只要知道了這十二個音符的音高,也就是其基本音調(diào) 的頻率,我們就可根據(jù)倍頻程的關(guān)系得到其他音符基本音調(diào)的頻率。知道了一個音符的頻率后,常采用的方法就是通過一個延時程序,延時對應(yīng)頻率周期的二分之一周期(即 后,將單片機上連接蜂鳴器的I/O () 口來回取反,或者說來回淸零,置位,從而讓蜂鳴器發(fā)岀聲音, 為了讓單片機發(fā)岀不同頻率的聲音,我們只需將不同的延時時間值t賦給延時程序即可實現(xiàn)
3、。例:我門以440Hz 的聲音頻率來計算,英對應(yīng)的時間t=l?2f=V2*440=1136us但在實際程序中常采用查表的方式來取的t值,而 為了廿約存儲器空間則將t值以字節(jié)來進行存儲,由于大部分t值都大于256。所以,需將t值除以一個常數(shù)(t/x) 使其小于256。那么,在查表取得t值后就要再乘上該常數(shù)后再賦給延時程序。以下為常用音符對應(yīng)的頻率和二分之一周期值t:低音音符頻率Hz周期/2周期/2/20中音音符頻率Hz周期/2周期/2/20126219080x5f1523956(0x2f1#27718040x5a1#5539040x2d2)29317060x5525868540x2a2#3111
4、6080x502*6218060x28332915200x4c36587600x26434914360x4746977180x244#37013520x434#7396760x2250x3c5*830602Oxle644011360x386879568Oxlc6#46610720x356*931536iOxlb749410120x3279875060x19高音音符頻率Hz周期/2周期/2/2011045478(0x17注:在音符的底部加一點表示低音,在音符的 頂部加一點表示高音。表中的20為方便查表 而除以的一個常數(shù)。1#11064520x16211714260x152#12414020x14
5、313163800124#14763400x11515633200x105#1658302OxOf61755284OxOe6#1860268OxOd719712540x0c一首樂曲的每一個音符除了頻率之外,還會有不同的節(jié)扌白,確左節(jié)舶的方法有以下幾種:r 43如1=C 、1=G1.在一張樂譜中,我們經(jīng)常會看到這樣的表達式,44等等,這里i=c,i=g表433、 示樂譜的曲調(diào),和我們前而所談的音調(diào)有很大的關(guān)聯(lián),44就是用來表示節(jié)拍的。以4為例加以說明,它表示樂譜中以四分音符為節(jié)摘,每一小結(jié)有三舶。比如:1=C 3/41 2 45 6英中1、2為一拍,3、4、5為一拍,6
6、為一拍共三扌白。1、2的時長為四分音符的一半,即為八分音符長, 3、4的時長為八分音符的一半,即為十六分音符長,5的時長為四分音符的一半,即為八分音符長,6的時長為 四分音符長。那么一拍到底該唱多長呢一般說來,如果樂曲沒有特殊說明,一拍的時長大約為400500ms。我們以一舶 的時長為400ms為例,則當以四分音符為一節(jié)拍時,四分音符的時長就為400ms,八分音符(即1/2拍)的時 長就為200ms,十六分音符(扌口)的時長就為100mso2.若知道了一首歌曲的每分鐘的廿拍數(shù),也可求岀每一節(jié)拍的時間。以每分鐘94拍為例:一拍 的時間=60月4=640ms節(jié)拍時間s節(jié)拍時間1/41/23/411
7、 乂 1/41 乂 1/2 1 乂 3/422 X 1/42 乂 1/22 乂 3/4(33 乂 1/43 乂 1/23 乂 3/44當知道了每一也n的時長后,就可利用單片機的立時器產(chǎn)生一個基準時間,比如說以10ms的時長為基本延 時時間,那么,對于一個音符,如果它為以拍100ms的時長,則只需調(diào)用10次延時程序,如果它為M拍200ms, 則只需調(diào)用20次延時程序,如果它為2拍400ms,則只需調(diào)用40次延時程序,依次類推。在簡譜中,1、2、3、4、5、6、7這七個基本音符,不僅表示音的髙低,而且還是表示時值長短的基本單位, 稱為四分音符,其他音符均是在四分音符的基礎(chǔ)上,用加記短橫線和附點“表
8、示。i 單純音符在簡譜中,如果音符時值的長短用短橫線/表示,就稱為單純音符。單純音符除四分音符外,有以下兩種 形式:(1)在基本音符右側(cè)加記一條短橫線,表示增長一個四分音符的時值。這類加記在音符右側(cè)、使音符時值增 長的短橫線,稱為增時線。增時線越多,音符的時值越長。在基本音符下方加記一條短橫線,表示縮短原音符時值的一半。這類加記在音符下方、使音符時值縮短 的短橫線,稱為減時線。減時線越多,音符的時值越短。單純音符的名稱以全音符為標準而左。如:全音符的二分之一稱為二分音符,全音符的四分之一稱為四分音 符,其余類推。常見的單純音符的名稱、 音符名*寫法及時值長短列表如下:寫扶金咅符5 四招二分音符
9、S 一二狛四分咅符5-ffi八分音符5和B十六分音符5四分之一抬K三十二分音務(wù)5八務(wù)之TS從上表可以看岀相鄰兩種音符之 間的時值比例為2: 現(xiàn)將單純音符之 間的時值比例列表(如右圖)X全膏符2 附點音符在簡譜中,加記在單純音符的右側(cè)的使音符時值增長的小圓點,稱為附點.加記附點的音符稱為附點音符。附點本身并無一泄的長短,其長短由前而的單純音符來決泄。附點的意義在于增長原音符時值的一半, 常用于四分音符和小于四分音符的各種音符之后。例如:附點四分音符:附點八分音符:附點十六分音符:在簡譜中,人于四分音符的單純音符通常不加記附點,而用增時線來農(nóng)示。例如:附點二分音符:x -不用X - 衣示。帶有兩個
10、附點的單純音符稱為復(fù)附點音符,第二個附點表示增長第一個附點時值的一半,即音符時值 的四分之例如:X 二 X + X + X 復(fù)附點常用于器樂曲中,在歌曲中很少使用。通過上面關(guān)于一個音符音調(diào)和節(jié)拍的確左方法,我們就可以在單片機上實現(xiàn)演奏音樂了。具體的實現(xiàn)方法為: 將樂譜中的每個音符的音調(diào)及節(jié)拍變換成相應(yīng)的音調(diào)參數(shù)和肖拍參數(shù),將他們做成數(shù)據(jù)表格,存放在存儲器中, 通過程序取出一個音符的相關(guān)參數(shù),播放該音符,該音符唱完后,接著取出下一個音符的相關(guān)參數(shù),如此直 到播放完畢最后一個音符,根據(jù)需要也可循環(huán)不停地播放整個樂曲。另外,對于樂曲中的休止符,一般用FFH 表示,樂曲結(jié)束音符用00H來表示。例:程序
11、1:/*歌曲選擇時應(yīng)按住設(shè)置間3秒以上,然后按上或下鍵進行選擇,然后再按設(shè)置鍵退岀*/#in cludeosbit spek=P3A7; 聲音輸出端sbit set=P3A2; 設(shè)左及退出鍵,按奇數(shù)次為設(shè)左功能:偶數(shù)次為退岀功能sbit up=P3Al; 上一曲sbit down=P3A0; 卜一曲bit flagl,flag2; 按鍵掃描標志位,新鍵值標志位unsigned char f_t,n,i,key,k_max; 音符頻率對應(yīng)的二分之一周期值,ij扌白常數(shù)值,査表用訃數(shù)器,鍵值,最大鍵值(unsigned char *p_music; 指向音樂數(shù)據(jù)數(shù)組的指針void timer_ms
12、(unsigned char tim); /亳秒級延時函數(shù)聲明void timer_us(unsigned chart); 微秒級延時函數(shù)void key_scan(void); 按鍵掃描函數(shù)void key_manage(); 鍵值處理函數(shù) 格式為:頻率常數(shù),竹拍常數(shù),頻率常數(shù),節(jié)舶常數(shù)unsigned char code music_tablel=Oxl&0x30,OxlcOxlO,0x20,0x40,Oxlc,OxlO,0x18,0x10,0x20,0x10,0x10,0x10,0x18,0x40/0xlc/0x20z0x20/0x20/0xlc,0x20/0xl8/0x20/0x20z
13、0x80/ 0xff/0x20/0x30/0xlc,0xl0/0xl8/0x20/0xl5/0x20/0xlc/0x20z0x20/0x20/0x26/0x40z0x20/0x20/0x26,0x20,0x26,0x20,0x20/0x20z0x30/0x80/0xff/0x20/0x20,0x10,0x10,0x1&0xl0,0x20,0x20, 0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40,0x20,0x20,0x1c, 0x10,0x18,0x10,0x20,0x20,0x26, 0x20,0x2b,0x20,0x30,0x20,0x26,0x40,0x
14、20,0x30,0x16,0x10,0x18,0x20,0x15,0x20,0x10,0x20, 0x20,0x20,0x26,0x40,0x20,0x20,0x26,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1c, 0x10,0x20,0x10,0x10,0x10,0x20,0x20,0x26,0x20,0x26,0x20,0x30,0x20,0x26,0x40,0x20,0x15, 0xl0x05,0x20,0xl0Qxlc0xl0Qx20,0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40,0x20
15、, 0x30,0xlc,0xl0,0x18,0x20,0x15,0x20,0x16,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x26,0x20, 0x26,0x20,0x20,0x20,0x30,0x30,0x20/0x30/0xlc/0xl0/0xl8,0x40/0xlc/0x20/0x20,0x20,0x26, 0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00; /八月桂花香 unsigned char code music_table2=0x26/0x20/0x20/0x20,0x20,0
16、x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x10,0x20, 0x20,0x80,0x26,0x20,0x26,0x20,0x20,0x20,0x26,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x30,0x20,0x30,0x20, 0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,0x30
17、,0x20,0x30,0x20,0x39,0x10,0x26,0x10, 0x26,0x80,0x26,0x20,0x26,0x10,0x26,0x10,0x26,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x26,0x10,0x26,0x20, 0x2b/0x40/0x40/0x20,0x20/0xl0/0x20/0xl0/0x2b/0xl0/0x26/0x30/0x30/0x80/0xl8/0x20/0xl8/0x20/0x26/0x20/ 0x20,0x20,0x20,0x40,0x26,0x20,0x26,0x20,0x30,0x20,0x30,0x20,0
18、x10,0x20,0x20,0x20,0x20,0x80,0x10,0x20, 0xlc/0x20/0xlc/0x20z0x30/0x20/0x30/0x60/0x39/0xl0,0x30,0x10,0x20,0x20,0x25,0x10,0x26,0x10,0x26,0x10, 0x26,0x10,0x26,0x10,0x25,0x10,0x26,0x80,0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10, 0x26,0x20,0x30,0x20,0x30,0x20,0x10,0x20,0x20,0x20,0x20,0x8
19、0,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20, 0x39,0x20,0x26,0x10,0x2bQxl0,0x2b,0x20,0x260x40,0x40,0x10,0x40,0x10,0x20,0x10,0x20,0x10,0x250x10,0x26,0x30,0x30,0x80,0x00;祝你平安unsigned char code music_table3=0x20/40/0x26/20/0x20/20/0xl7/80/0xlc/40/0xl7/40/0x20/80/0x20/ 40/0x2f/20/0x2a/20/0x26/40/0x2a/20/0x
20、2f/20/0x2a/80,0xff/0x20/40/0x26/20/0x20/20/0xl7/60/0xl9/20/ 0xlc/40/0xl7/40/0x20/80/0x20,40/0x2a/20/0x26/20/0x24/60/0x32/20/0x2f;80/0xft0xlc/40/0xl7/40/0xl7/ 80/0xl9/40/0xlc/20/0xl9/20/0xl7/80/0xlc/20/0xl9/20z0xl7/20/0xlc/20/0xlc/20/0x20/20/0x26,20,0x220, 0x2a,80,Oxff,0x20,40,0x26,20,0x20,20,0x17,60
21、,0x19,20,0x1c,40,0x17,40,0x20,80,0x20,40,0x2a,20,0x26, 20,0x24,60,0x32,20,Ox2f,80,Oxff,0x20,40,0x26,20,0x20,20,0xl7,80,0xlc,40,0x17,40,0x20,80,0x20,40, 0x220,0x23,20,0x2640,0x2a/20/0x2t20/0x2a/80/0xff/0x20/40/0x26/20/0x20/20/0xl7/60/0xl9/20/0xlc/ 40,0x17,40,0x20,80,0x20,40,0x2a,20,0x26,20,0x24,60,0x
22、32,20,Ox2f,80,0; 送別main()spek=O;P3=0x7f;TMOD=0x01; /TO工作于方式1,即16位立時器模式IE=0x82; 開總中斷,T0中斷flag2=0; /flagl=O;key=l;k_max=3; 最大鍵值(取值范圍1254)n=0;i=0;p_music=music_tablel; /指針賦初值while (1)switch (p_musicij)case 0x00: i=0; 歌曲完,則停止后重新開始timer_ms(250); 延時timer_ms(250);break;case Oxff: i+; 遇到休止符則停止lOOustimer_ms(
23、250);timer_ms(250);break;default:f_t=p_musici+;n=p_musici+;spek=l;TRO=1;while (n!=0)spek=spek;timer_us(4*f_t); 改變f_t前面的系數(shù)可以調(diào)整音符頻率的高低 TRO=O;spek=O;if(set=O)key_scan(); key_manage();/*未*球*拿*京車* 函數(shù)名稱:楚時器0的中斷處理程序函數(shù)功能:完成10毫秒定時入口參數(shù):出口參數(shù):它:*未*拿*京*孚*/void timerO() interrupt 1 using 2 THO=(65536-lOOOO)/256; 立時 10 亳秒TL0=(65536-10000)%256;* 車 *孚*4(*車*41*函數(shù)名稱:延時程序函數(shù)功能:完成微秒級的延時入口參數(shù):t為需延時的時間(取值范ra 1-255;延時時間51275us)岀口參數(shù): 其 它: *京京*4(*未*床拿*京*/ void timer_us(unsigned char t)while (-t); 本語句執(zhí)行一次需5us的時間/車 * 孚 * 車
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新型起重機專利許可及銷售代理合同
- 合作房地產(chǎn)開發(fā)協(xié)議(28篇)
- 師傅和徒弟作文
- 2025年兼職工勞務(wù)合同格式
- 2025年企業(yè)合作投資與合資合同
- 2025年信用卡預(yù)借現(xiàn)金協(xié)議書范本
- 2025年中尺度自動氣象站系統(tǒng)項目立項申請報告
- 2025年區(qū)域飲品代理合作協(xié)議范本
- 2025年式多功能打印機銷售合同規(guī)范
- 2025年企業(yè)電力安全使用標準協(xié)議書
- 超前小導(dǎo)管施工作業(yè)指導(dǎo)書
- 中國律師學(xué)完整版課件全套教學(xué)ppt教程
- 守紀律講衛(wèi)生懂禮儀
- 腦控受害者解救方法
- 滁州市城市規(guī)劃管理技術(shù)規(guī)定
- 保理業(yè)務(wù)解決方案
- 圖紙會審答疑
- PCCP安裝與水壓試驗
- 景觀生態(tài)學(xué)教學(xué)大綱(共10頁)
- 招標工作手冊
- 鍛件的結(jié)構(gòu)設(shè)計與工藝性分析
評論
0/150
提交評論