音樂盒播放器.ds.ppt_第1頁
音樂盒播放器.ds.ppt_第2頁
音樂盒播放器.ds.ppt_第3頁
音樂盒播放器.ds.ppt_第4頁
音樂盒播放器.ds.ppt_第5頁
免費預覽已結束,剩余33頁可下載查看

下載本文檔

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

文檔簡介

1、1、單片機是如何發(fā)出音樂聲 原理: 聲音是通過震動產生的。單片機對某一I/O引腳以一定的頻率循環(huán)置1 和清0,這一引腳便產生一定頻率的方波,該方法通過放大后作用于揚聲器便產生一定頻率的聲音。若改變輸出方波的頻率,產生的聲音也就改變了。通過控制輸出方波的時間長短,聲音的長短也就得到控制,因此,根據樂譜,單片機就可以產生音樂。音樂中最關鍵的兩個要素是音調和節(jié)拍。 音調表示一個音符唱多高的頻率, 節(jié)拍表示一個音符唱多長的時間。,一、單鍵演奏一組音符,1、單片機是如何發(fā)出音樂聲 一首音樂是由很多音符組合而成的,一個音符代表了一種頻率的樂聲,通過不同頻率樂聲的組合,就可以產生一首音樂了。這就是電子音樂的

2、基本方法。 單片機可以通過定時器生成不同頻率的信號,按照音樂音符的頻率來生成各種頻率的信號,并將其按照音樂構建好,然后將信號通過電聲器件轉換為聲波,這樣單片機就能發(fā)出一段音樂的聲音了。,一、單鍵演奏一組音符,2、音調的確定 音調就是我們常說的音高。它是由頻率來確定的!我們可以查出各個音符所對應的相應的頻率,那么現在就需要我們來用51來發(fā)出相應頻率的聲音! 我們常采用的方法就是通過單片機的定時器定時中斷,將單片機上對應蜂鳴器的 I/O口來回取反,或者說來回清零,置位,從而讓蜂鳴器發(fā)出聲音,為了讓單片機發(fā)出不同頻率的聲音,我們只需將定時器預置不同的定時值就可實現。那么怎樣確定一個頻率所對應的定時器

3、的定時值呢?,一、單鍵演奏一組音符,2、音調的確定 例如:中音DO的頻率為523Hz,周期為:T=1/f=1912us 單片機上對應蜂鳴器的I/O 口來回取反的時間應即半個周期為:t=T/2=956us 這個時間t 就是單片機上定時器應有的中斷觸發(fā)時間。 只要將定時器的定時時間設置為956us,就可以產生頻率為523Hz的方波信號。 一般情況下,單片機奏樂時,其定時器為工作方式1,設振蕩器頻率為f,則定時器的予置初值由下式來確定: t=(216-X)*(12/f),一、單鍵演奏一組音符,2、音調的確定 因此定時器的高低計數器的初值為: TH =X/ 256 = ( 216 t* f/12) /

4、 256 TL = X % 256 = (216t* f/12) %256,一、單鍵演奏一組音符,C調各音符頻率與計數值T的對照表如圖所示:,2、音調的確定 一般我們要為這個音符建立一個表格,有助于單片機通過查表的方式來獲得相應的數據。 uint code tab=63628,63835,64021,64103, 64260,64400,64524,64580, 64684,64777,64820,64898, 64968,95030,65058,65110;,一、單鍵演奏一組音符,實例演示: 要求:用一只單鍵產生一組音符的聲音,發(fā)聲從低音階向高音階進展,可以通過虛擬示波器觀察到單片機產生的方

5、波的周期變化。單片機演奏音樂的電路只需要單片機和聲音播放電路,電路原理圖如圖所示。,一、單鍵演奏一組音符,三極管,蜂鳴器,一、單鍵演奏一組音符,一、單鍵演奏一組音符,節(jié)拍的實現: 在一張樂譜中,我們經常會看到這樣的表達式,如1=C (4/4) 、1=G(3/4) 等等,這里1=C (4/4),1=G(3/4) 表示樂譜的曲調,與前面所談的音調有很大的關聯,4/4、3/4 就是用來表示節(jié)拍的。以3/4 為例加以說明,它表示樂譜中以四分音符為節(jié)拍,每一小結有三拍。,二、演奏一首音樂,其中1 、2 為一拍,3、4、5為一拍,6為一拍共三拍。1 、2的時長為四分音符的一半,即為八分音符長,3、4的時長

6、為八分音符的一半,即為十六分音符長,5的時長為四分音符的一半,即為八分音符長,6的時長為四分音符長。,二、演奏一首音樂,樂曲的數據,一般寫入數據表,表中每三個數字,說明了一個音符,它們分別代表: 第一個數字是音符的數值1234567之一,代表多來咪.; 第二個數字是123之一,代表低音、中音、高音; 第三個數字是時間長度,以半拍為單位。 樂曲數據表的結尾是三個0。 樂譜中數字上面帶點表示高音,下面帶點表示低音。什么都不帶表示中音。 下劃線:單個數字是四分音符,兩個數字下畫一條線是八分音符了。 感興趣的同學應該去查看樂譜相關的知識。,二、演奏一首音樂,據此就可以寫出送別前二小節(jié)的數據表: cod

7、e unsigned char sszymmh = 5, 2, 2, 3, 2, 1, 5, 2, 1, 1, 3, 4, /嗦,中音,2個半拍;咪,中音,1個半拍;嗦,中音,1個半拍;哆,高音,4個半拍 6, 2, 2, 1, 3, 2, 5, 2, 4, /啦,中音,2個半拍;哆,高音,1個半拍;嗦,中音,4個半拍 0, 0, 0;,二、演奏一首音樂,單片機演奏音樂的電路只需要單片機和聲音播放電路,電路原理圖如圖所示。,二、演奏一首音樂,/*演奏“世上只有媽媽好”*/ #include sbit speaker = P30;unsigned char timer0h, timer0l, t

8、ime;/-/單片機晶振采用11.0592MHz,二、演奏一首音樂,/各種音符頻率所對應的、半周期的定時時間初始值。 / 頻率-半周期數據表 高八位 code unsigned char FREQH = 0 xF2, 0 xF3, 0 xF5, 0 xF5, 0 xF6, 0 xF7, 0 xF8, /低音1234567 0 xF9, 0 xF9, 0 xFA, 0 xFA, 0 xFB, 0 xFB, 0 xFC, 0 xFC,/1,2,3,4,5,6,7,i 0 xFC, 0 xFD, 0 xFD, 0 xFD, 0 xFD, 0 xFE, /中音 234567 0 xFE, 0 xFE,

9、 0 xFE, 0 xFE, 0 xFE, 0 xFE, 0 xFF; /高音 1234567 / 頻率-半周期數據表 低八位code unsigned char FREQL = 0 x42, 0 xC1, 0 x17, 0 xB6, 0 xD0, 0 xD1, 0 xB6, /低音1234567 0 x21, 0 xE1, 0 x8C, 0 xD8, 0 x68, 0 xE9, 0 x5B, 0 x8F, /1,2,3,4,5,6,7,i 0 xEE, 0 x44, 0 x6B, 0 xB4, 0 xF4, 0 x2D, /中音音 234567 0 x47, 0 x77, 0 xA2, 0

10、xB6, 0 xDA, 0 xFA, 0 x16; /高音 1234567,二、演奏一首音樂,二、演奏一首音樂,/世上只有媽媽好數據表 要想演奏不同的樂曲, 只需要修改這個數據表code unsigned char sszymmh = 6, 2, 3, 5, 2, 1, 3, 2, 2, 5, 2, 2, 1, 3, 2, 6, 2, 1, 5, 2, 1, /一個音符有三個數字。前為第幾個音、中為第幾個八度、后為時長(以半拍為單位)。/6, 2, 3 分別代表:, 中音, 個半拍;/5, 2, 1 分別代表:, 中音, 個半拍;/3, 2, 2 分別代表:, 中音, 個半拍;/5, 2, 2

11、 分別代表:, 中音, 個半拍;/1, 3, 2 分別代表:, 高音, 個半拍;/6, 2, 4, 3, 2, 2, 5, 2, 1, 6, 2, 1, 5, 2, 2, 3, 2, 2, 1, 2, 1,6, 1, 1, 5, 2, 1, 3, 2, 1, 2, 2, 4, 2, 2, 3, 3, 2, 1, 5, 2, 2,5, 2, 1, 6, 2, 1, 3, 2, 2, 2, 2, 2, 1, 2, 4, 5, 2, 3, 3, 2, 1,2, 2, 1, 1, 2, 1, 6, 1, 1, 1, 2, 1, 5, 1, 6, 0, 0, 0;/-,二、演奏一首音樂,/*定時器T0中

12、斷函數*/ void t0int() interrupt 1 /T0中斷程序,控制發(fā)音的音調 TR0 = 0; /先關閉T0 speaker = !speaker; /輸出方波, 發(fā)音 TH0 = timer0h; /下次的中斷時間, 這個時間, 控制音調高低 TL0 = timer0l; TR0 = 1; /啟動T0 /*延時程序控制發(fā)音的時長*/ void delay(unsigned char t) /延時程序,控制發(fā)音的時間長度 unsigned char t1; unsigned long t2; for(t1 = 0; t1 t; t1+) /雙重循環(huán), 共延時t個半拍 for(t

13、2 = 0; t2 8000; t2+); /延時期間, 可進入T0中斷去發(fā)音 TR0 = 0; /關閉T0, 停止發(fā)音 ,二、演奏一首音樂,/*演奏一個音符*/ void song() /演奏一個音符 TH0 = timer0h; /控制音調 TL0 = timer0l; TR0 = 1; /啟動T0, 由T0輸出方波去發(fā)音 delay(time); /控制時間長度 ,二、演奏一首音樂,/*演奏一個音符*/ void main(void) unsigned char k, i; TMOD = 1; /置T0定時工作方式1 ET0 = 1; /開T0中斷 EA = 1; /開CPU中斷 whi

14、le(1) i = 0; time = 1; while(time) k = sszymmhi + 7 * sszymmhi + 1 - 1; /第i個是音符, 第i+1個是第幾個八度 timer0h = FREQHk; /從數據表中讀出頻率數值 timer0l = FREQLk; /實際上, 是定時的時間長度 time = sszymmhi + 2; /讀出時間長度數值 i += 3; song(); /發(fā)出一個音符 ,課后思考: 增加一個按鍵控制選播多首音樂? 也可以增加一個數碼管用于顯示正在播放的是第幾首歌曲?,(1)任務要求: 采用單片機控制方式,設計制造電子琴,能夠通過串口對鍵盤進行

15、簡單調音控制。電子琴具有16只音樂輸入鍵盤,可以進行簡單的音樂演奏。LED數碼管能顯示按下的鍵盤,實現單片機電子琴和PC之間的通信,能通過PC向單片機發(fā)送數據指令,實現對鍵盤所對應的高低音調整,并將PC所發(fā)送數據顯示出來。各工作小組對鍵盤調音的上調和下調指令碼分別為0-9和A-J。,三、簡易電子琴設計,(2)方案框圖 根據任務要求,單片機電子琴主控芯片為8051單片機,有16只音符輸入鍵盤,可以從PC輸入控制數碼,輸入數碼通過串口傳送給單片機,通過控制碼能調整音鍵的音階,并能顯示從PC輸入的數碼,用LED數碼管顯示音鍵名。電子琴方案框圖如圖所示。,三、簡易電子琴設計,單 片 機,PC串行輸入數

16、碼,矩陣鍵盤,時鐘復位電源,LED顯示鍵盤名,中斷顯示輸入數碼,聲頻播放,(2)硬件電路 輸入鍵盤設計: 矩陣鍵盤:4*4=16只按鍵,P1口接矩陣鍵盤 采用虛擬終端VIRTUAL TERMINAL模擬PC的作用。 虛擬終端接單片機串口,單片機的發(fā)送端接虛擬終端接收端,單片機的接收端連虛擬終端發(fā)送端 P3.7端輸出音頻信號,并連接虛擬示波器以測試音頻方波的周期,觀察控制數碼的調音效果。 P0端口接LED數碼管顯示音鍵名。 電子琴電路原理圖如圖所示:,三、簡易電子琴設計,三、簡易電子琴設計,(3)軟件設計流程圖-電子琴主程序流程圖,三、簡易電子琴設計,初始化,是否有鍵按下,鍵盤掃描,識別按下鍵的

17、列值,鍵盤掃描,識別按下鍵的行值,根據鍵值和控制碼,鍵音調整,停止定時器,關閉播放,Y,N,啟動定時器,生成方波信號播放音頻,(3)軟件設計流程圖電子琴串行通信流程圖,三、簡易電子琴設計,串行中斷入口,是否收到數據?,讀取數據,清除接收標志,鍵盤向下調音,Y,是否有下調控制碼?,是否有上調控制碼?,鍵盤向上調音,發(fā)送數據,清除發(fā)送標志,Y,N,N,N,Y,(4)源程序編寫 根據單片機串行通信的編寫步驟,首先是編寫定時器和串口的初始化。 串口工作在方式1,允許接收數據: SCON=0 x50; 定時器T0工作于方式1,T1工作于方式2: TMOD=0 x21; 波特率為9600,時鐘頻率為11.0592MHz,定時器初值TH1=TL1=0 xfd; 開中斷: EA=1;ET0=1;ET1=1;,三、簡易電子琴設計,(4)源程序編寫 矩陣鍵盤采用掃描方式判別按鍵是否按下。首先看是否有鍵按下,若有鍵按下,再判別按鍵的行列位置,根據行列位置得到按鍵的鍵值,將鍵名送LED

溫馨提示

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

評論

0/150

提交評論