用51單片機(jī)演奏音樂_第1頁
用51單片機(jī)演奏音樂_第2頁
用51單片機(jī)演奏音樂_第3頁
用51單片機(jī)演奏音樂_第4頁
用51單片機(jī)演奏音樂_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、單片機(jī)演奏音樂一般說來,單片機(jī)演奏音樂基本都是單音頻率,它不包含相應(yīng)幅度的諧波頻率,也就是說不能象電子琴那樣 能奏岀多種音色的聲音。因此單片機(jī)奏樂只需弄淸楚兩個(gè)槪念即可,也就是音調(diào)”和節(jié)舶”。音調(diào)表示一個(gè) 音符唱多高的頻率,節(jié)拍表示一個(gè)音符唱多長(zhǎng)的時(shí)間。在音樂中所謂“音調(diào)”,英實(shí)就是我們常說的音高”。在音樂中常把五線譜中央C上方的A音泄為標(biāo)準(zhǔn)音 高,英頻率仁440Hzo當(dāng)兩個(gè)聲音信號(hào)的頻率相差一倍時(shí),也即f2=2fl時(shí),則稱f2比仃高一個(gè)倍頻程,在音樂 中1與.1 (1前而的點(diǎn)應(yīng)在1的上面),2與.2正好相差一個(gè)倍頻程,在音樂學(xué)中稱它相差一個(gè)八度音。在 一個(gè)八度音內(nèi),有22個(gè)半音。以2i八音區(qū)

2、為例,12個(gè)半音是:1#1、#12、2#2、#23、34、 4一#4, #45、5 一#5、#56、6#6、#67、7i。其中“#”表示半音,用于升高或降低半個(gè)音。這 12個(gè)音階的分度基本上是以對(duì)數(shù)關(guān)系來劃分的。如果我們只要知道了這十二個(gè)音符的音高,也就是其基本音調(diào) 的頻率,我們就可根據(jù)倍頻程的關(guān)系得到其他音符基本音調(diào)的頻率。知道了一個(gè)音符的頻率后,常采用的方法就是通過一個(gè)延時(shí)程序,延時(shí)對(duì)應(yīng)頻率周期的二分之一周期(即 后,將單片機(jī)上連接蜂鳴器的I/O () 口來回取反,或者說來回淸零,置位,從而讓蜂鳴器發(fā)岀聲音, 為了讓單片機(jī)發(fā)岀不同頻率的聲音,我們只需將不同的延時(shí)時(shí)間值t賦給延時(shí)程序即可實(shí)現(xiàn)

3、。例:我門以440Hz 的聲音頻率來計(jì)算,英對(duì)應(yīng)的時(shí)間t=l?2f=V2*440=1136us但在實(shí)際程序中常采用查表的方式來取的t值,而 為了廿約存儲(chǔ)器空間則將t值以字節(jié)來進(jìn)行存儲(chǔ),由于大部分t值都大于256。所以,需將t值除以一個(gè)常數(shù)(t/x) 使其小于256。那么,在查表取得t值后就要再乘上該常數(shù)后再賦給延時(shí)程序。以下為常用音符對(duì)應(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注:在音符的底部加一點(diǎn)表示低音,在音符的 頂部加一點(diǎn)表示高音。表中的20為方便查表 而除以的一個(gè)常數(shù)。1#11064520x16211714260x152#12414020x14

5、313163800124#14763400x11515633200x105#1658302OxOf61755284OxOe6#1860268OxOd719712540x0c一首樂曲的每一個(gè)音符除了頻率之外,還會(huì)有不同的節(jié)扌白,確左節(jié)舶的方法有以下幾種:r 43如1=C 、1=G1.在一張樂譜中,我們經(jīng)常會(huì)看到這樣的表達(dá)式,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的時(shí)長(zhǎng)為四分音符的一半,即為八分音符長(zhǎng), 3、4的時(shí)長(zhǎng)為八分音符的一半,即為十六分音符長(zhǎng),5的時(shí)長(zhǎng)為四分音符的一半,即為八分音符長(zhǎng),6的時(shí)長(zhǎng)為 四分音符長(zhǎng)。那么一拍到底該唱多長(zhǎng)呢一般說來,如果樂曲沒有特殊說明,一拍的時(shí)長(zhǎng)大約為400500ms。我們以一舶 的時(shí)長(zhǎng)為400ms為例,則當(dāng)以四分音符為一節(jié)拍時(shí),四分音符的時(shí)長(zhǎng)就為400ms,八分音符(即1/2拍)的時(shí) 長(zhǎng)就為200ms,十六分音符(扌口)的時(shí)長(zhǎng)就為100mso2.若知道了一首歌曲的每分鐘的廿拍數(shù),也可求岀每一節(jié)拍的時(shí)間。以每分鐘94拍為例:一拍 的時(shí)間=60月4=640ms節(jié)拍時(shí)間s節(jié)拍時(shí)間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當(dāng)知道了每一也n的時(shí)長(zhǎng)后,就可利用單片機(jī)的立時(shí)器產(chǎn)生一個(gè)基準(zhǔn)時(shí)間,比如說以10ms的時(shí)長(zhǎng)為基本延 時(shí)時(shí)間,那么,對(duì)于一個(gè)音符,如果它為以拍100ms的時(shí)長(zhǎng),則只需調(diào)用10次延時(shí)程序,如果它為M拍200ms, 則只需調(diào)用20次延時(shí)程序,如果它為2拍400ms,則只需調(diào)用40次延時(shí)程序,依次類推。在簡(jiǎn)譜中,1、2、3、4、5、6、7這七個(gè)基本音符,不僅表示音的髙低,而且還是表示時(shí)值長(zhǎng)短的基本單位, 稱為四分音符,其他音符均是在四分音符的基礎(chǔ)上,用加記短橫線和附點(diǎn)“表

8、示。i 單純音符在簡(jiǎn)譜中,如果音符時(shí)值的長(zhǎng)短用短橫線/表示,就稱為單純音符。單純音符除四分音符外,有以下兩種 形式:(1)在基本音符右側(cè)加記一條短橫線,表示增長(zhǎng)一個(gè)四分音符的時(shí)值。這類加記在音符右側(cè)、使音符時(shí)值增 長(zhǎng)的短橫線,稱為增時(shí)線。增時(shí)線越多,音符的時(shí)值越長(zhǎng)。在基本音符下方加記一條短橫線,表示縮短原音符時(shí)值的一半。這類加記在音符下方、使音符時(shí)值縮短 的短橫線,稱為減時(shí)線。減時(shí)線越多,音符的時(shí)值越短。單純音符的名稱以全音符為標(biāo)準(zhǔn)而左。如:全音符的二分之一稱為二分音符,全音符的四分之一稱為四分音 符,其余類推。常見的單純音符的名稱、 音符名*寫法及時(shí)值長(zhǎng)短列表如下:寫扶金咅符5 四招二分音符

9、S 一二狛四分咅符5-ffi八分音符5和B十六分音符5四分之一抬K三十二分音務(wù)5八務(wù)之TS從上表可以看岀相鄰兩種音符之 間的時(shí)值比例為2: 現(xiàn)將單純音符之 間的時(shí)值比例列表(如右圖)X全膏符2 附點(diǎn)音符在簡(jiǎn)譜中,加記在單純音符的右側(cè)的使音符時(shí)值增長(zhǎng)的小圓點(diǎn),稱為附點(diǎn).加記附點(diǎn)的音符稱為附點(diǎn)音符。附點(diǎn)本身并無一泄的長(zhǎng)短,其長(zhǎng)短由前而的單純音符來決泄。附點(diǎn)的意義在于增長(zhǎng)原音符時(shí)值的一半, 常用于四分音符和小于四分音符的各種音符之后。例如:附點(diǎn)四分音符:附點(diǎn)八分音符:附點(diǎn)十六分音符:在簡(jiǎn)譜中,人于四分音符的單純音符通常不加記附點(diǎn),而用增時(shí)線來農(nóng)示。例如:附點(diǎn)二分音符:x -不用X - 衣示。帶有兩個(gè)

10、附點(diǎn)的單純音符稱為復(fù)附點(diǎn)音符,第二個(gè)附點(diǎn)表示增長(zhǎng)第一個(gè)附點(diǎn)時(shí)值的一半,即音符時(shí)值 的四分之例如:X 二 X + X + X 復(fù)附點(diǎn)常用于器樂曲中,在歌曲中很少使用。通過上面關(guān)于一個(gè)音符音調(diào)和節(jié)拍的確左方法,我們就可以在單片機(jī)上實(shí)現(xiàn)演奏音樂了。具體的實(shí)現(xiàn)方法為: 將樂譜中的每個(gè)音符的音調(diào)及節(jié)拍變換成相應(yīng)的音調(diào)參數(shù)和肖拍參數(shù),將他們做成數(shù)據(jù)表格,存放在存儲(chǔ)器中, 通過程序取出一個(gè)音符的相關(guān)參數(shù),播放該音符,該音符唱完后,接著取出下一個(gè)音符的相關(guān)參數(shù),如此直 到播放完畢最后一個(gè)音符,根據(jù)需要也可循環(huán)不停地播放整個(gè)樂曲。另外,對(duì)于樂曲中的休止符,一般用FFH 表示,樂曲結(jié)束音符用00H來表示。例:程序

11、1:/*歌曲選擇時(shí)應(yīng)按住設(shè)置間3秒以上,然后按上或下鍵進(jìn)行選擇,然后再按設(shè)置鍵退岀*/#in cludeosbit spek=P3A7; 聲音輸出端sbit set=P3A2; 設(shè)左及退出鍵,按奇數(shù)次為設(shè)左功能:偶數(shù)次為退岀功能sbit up=P3Al; 上一曲sbit down=P3A0; 卜一曲bit flagl,flag2; 按鍵掃描標(biāo)志位,新鍵值標(biāo)志位unsigned char f_t,n,i,key,k_max; 音符頻率對(duì)應(yīng)的二分之一周期值,ij扌白常數(shù)值,査表用訃數(shù)器,鍵值,最大鍵值(unsigned char *p_music; 指向音樂數(shù)據(jù)數(shù)組的指針void timer_ms

12、(unsigned char tim); /亳秒級(jí)延時(shí)函數(shù)聲明void timer_us(unsigned chart); 微秒級(jí)延時(shí)函數(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位立時(shí)器模式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); 延時(shí)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ù)名稱:楚時(shí)器0的中斷處理程序函數(shù)功能:完成10毫秒定時(shí)入口參數(shù):出口參數(shù):它:*未*拿*京*孚*/void timerO() interrupt 1 using 2 THO=(65536-lOOOO)/256; 立時(shí) 10 亳秒TL0=(65536-10000)%256;* 車 *孚*4(*車*41*函數(shù)名稱:延時(shí)程序函數(shù)功能:完成微秒級(jí)的延時(shí)入口參數(shù):t為需延時(shí)的時(shí)間(取值范ra 1-255;延時(shí)時(shí)間51275us)岀口參數(shù): 其 它: *京京*4(*未*床拿*京*/ void timer_us(unsigned char t)while (-t); 本語句執(zhí)行一次需5us的時(shí)間/車 * 孚 * 車

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論