電子琴設計報告(完整)_第1頁
電子琴設計報告(完整)_第2頁
電子琴設計報告(完整)_第3頁
電子琴設計報告(完整)_第4頁
電子琴設計報告(完整)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

電子琴設計報告院系:計算機科學學院專業(yè):計算機科學與技術學號:201003784姓名:張林峰班級:計科1002設計時間:2012.10.22設計地點:4#2號機房指導教師:嚴圣華目錄一、總體方案二、硬件介紹三、音樂產(chǎn)生原理四、軟件設計五、電子琴演示六、完整代碼七、實驗體會總體方案1.1設計要求1.要求達到電子琴的基本功能,可以用彈奏出簡單的樂曲。2.用鍵盤作出電子琴的按鍵,每鍵代表一個音符。3.各音符按一定的順序排列,必須符合電子琴的按鍵排列順序。4.固定音樂播放有按鍵控制。1.2電子琴系統(tǒng)的組成 STC89C52單片機設計微型電子琴的方法,僅需STC89C52最小系統(tǒng),擴展一組矩陣鍵盤,再接一組發(fā)光二極管用來指示電子琴的工作狀態(tài)。本系統(tǒng)分為兩個部分,一個是音樂另一個是電子琴。音樂播放部分:音樂實際上是有固定周期的信號。本文介紹用STC89C52的兩個定時器(如T0,T1)控制,在P1.3腳上輸出方波周期信號,產(chǎn)生樂音電子琴彈奏部分:實際上就是把每個按鍵所對應的值經(jīng)過處理后發(fā)給單片機,再在單片機內(nèi)把數(shù)字當作指針指向所對應的音符。硬件介紹2.1STC89C52 STC89C52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。具有以下標準功能:8k字節(jié)Flash,512字節(jié)RAM,32位I/O口線,,內(nèi)置4KBEEPROM,MAX810復位電路,三個16位定時器/計數(shù)器,一個6向量2級中斷結(jié)構,全雙工串行口。2.2STC89C52引腳圖2.3引腳功能介紹在這里就只介紹一下制作電子琴所用到的一些引腳功能。VCC:供電電壓。GND:接地。P3.2/INT0(外部中斷0)P3.3/INT1(外部中斷1)P3.4T0(記時器0外部輸入)P3.5T1(記時器1外部輸入)P3口連接矩陣鍵盤用來控制音符輸出及音樂播放。P0口控制數(shù)碼管,以顯示音符。P2.6連接鎖存器U6控制數(shù)碼管的段選。P2.7連接鎖存器U7控制數(shù)碼管的位選。P2.0控制蜂鳴器2.4矩陣鍵盤工作原理 列線通過電阻接正電源,并將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當按鍵沒有按下時,所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。具體的識別及編程方法如下所述。2.5矩陣鍵盤的按鍵識別方法 1、判斷鍵盤中有無鍵按下將全部行線Y0-Y3置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。2、判斷閉合鍵所在的位置在確認有鍵按下后,即可進入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。三、音樂產(chǎn)生原理3.1不同頻率產(chǎn)生原理 一首音樂是許多不同的音階組成的,而每個音階對應著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構成我們所想要的音樂了,當然對于單片機來產(chǎn)生不同的頻率非常方便,我們可以利用單片機的定時/計數(shù)器T0來產(chǎn)生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應頻率關系弄正確即可。 若要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率),再將此周期除以2,即為半周期的時間。利用定時器計時半周期時間,每當計時終止后就將P2.0反相,然后重復計時再反相。就可在P1.3引腳上得到此頻率的脈沖。利用STC89C52的內(nèi)部定時器使其工作計數(shù)器模式(MODE1)下,改變計數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階。3.2計數(shù)值TH0及TL0的計算方法 例如,頻率為523Hz,其周期T=1/523=1912μs,因此只要令計數(shù)器計時956μs/1μs=956,每計數(shù)956次時將I/O反相,就可得到中音DO(523Hz)。要是計數(shù)器記956次,就要設定此時的TH0、TL0的值。TH0=(65536-956)/256=(11111100)2=0xfcTL0=(65536-956)%256=(01000100)2=0X443.3音節(jié)頻率表軟件設計4.1數(shù)組的運用為數(shù)碼管寫了一個顯示0~F的數(shù)組,便于直接調(diào)用,來顯示不同音符表示的數(shù)字,代碼如下:ucharcodeshuma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,};不同頻率聲音的TH0、TL0值也分別存在兩個數(shù)組中,便于直接運用,如下:codeunsignedcharFREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE00xFF,0x00,};codeunsignedcharFREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,0xEE,0x44,0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,0x00,};一首歌的每個音符對應頻率在TH0、TL0數(shù)組中的地址也存入一個新數(shù)組中,如下:codeunsignedcharsszymmh[]={6,2,3,5,2,1,3,2,2,5,2,2,1,3,2,6,2,1,5,2,1,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};4.2鍵盤通過switch語句,每按下一個鍵,產(chǎn)生一個num值,如下:P3=0xfe;temp=P3;temp=temp&0xf0; if(temp!=0xf0){ switch(temp) { case0xe0:num=0;break; case0xd0:num=1;break; case0xb0:num=2;break; case0x70:num=3;break; } }4.3其他一些功能子函數(shù)如通過中斷函數(shù)voidt0char()interrupt1{TR0=0;beep=!beep;TH0=timer0h;TL0=timer0l;TR0=1;}產(chǎn)生不同頻率的電壓變換,進而使蜂鳴器產(chǎn)生不同頻率的聲音。延時函數(shù)、數(shù)碼管顯示函數(shù)、聲音播放函數(shù)。4.4整體構思由于本鍵盤的每列接P3口的低4位,每行接P3口的高4位,先使某一列的4個鍵一邊接低電平,當該行的一個按鍵按下時,低電平傳到該按鍵所對應的行P3口高位。然后通過switch語句來檢測到底是那一個按鍵傳遞的低電平。不同按鍵按下,產(chǎn)生一個不同的num值按鍵產(chǎn)生的num值,先判斷如果num>0傳遞給音頻對應的定時器高八位、第八位,數(shù)組函數(shù)中,以及數(shù)碼管顯示數(shù)組函數(shù)中,來產(chǎn)生頻率,顯示音符。anjian(num); if(num>0) {timer0h=FREQH[num]; timer0l=FREQL[num]; display(num); time=1;song(); }如果num=0則運行音樂播放部分,else{ i=0; while(i<100){ k=sszymmh[i]+7*sszymmh[i+1]-1; timer0h=FREQH[k]; timer0l=FREQL[k]; time=sszymmh[i+2]; i=i+3; song(); }完整代碼#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharsbitbeep=P2^0;uchartimer0h,timer0l,time,i,num,temp,k; codeunsignedcharsszymmh[]={6,2,3,5,2,1,3,2,2,5,2,2,1,3,2,6,2,1,5,2,1,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};codeunsignedcharFREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,8,i0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,};codeunsignedcharFREQL[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,8,i0xEE,0x44,0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};voiddelay(unsignedchart){unsignedchart1;unsignedlongt2;for(t1=0;t1<t;t1++){for(t2=0;t2<8000;t2++){;}}}voidt0int()interrupt1{TR0=0;beep=!beep;TH0=timer0h;TL0=timer0l;TR0=1;}voidsong(){TH0=timer0h;TL0=timer0l;TR0=1;delay(time);}ucharanjian(i){ P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { switch(temp) { case0xe0:num=0;break; case0xd0:num=1;break; case0xb0:num=2;break; case0x70:num=3;break; } } P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { switch(temp) { case0xe0:num=4;break; case0xd0:num=5;break; case0xb0:num=6;break; case0x70:num=7;break; } } P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { switch(temp) { case0xe0:num=8;break; case0xd0:num=9;break; case0xb0:num=10;break; case0x70:num=11;break; } } P3=0xf7; temp=P3; temp=temp&0xf0;

溫馨提示

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

評論

0/150

提交評論