單片機課程設計報告簡易電子琴_第1頁
單片機課程設計報告簡易電子琴_第2頁
單片機課程設計報告簡易電子琴_第3頁
單片機課程設計報告簡易電子琴_第4頁
單片機課程設計報告簡易電子琴_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課程設計報告( 20142015 年度第 二 學期)課 程:單片機及嵌入式系統(tǒng)a 題 目: 簡易電子琴 院 系: 自動化系 班 級: 測控1201 學 號: 201202030105 201202030106 學生姓名: 指導教師: 設計周數: 一周 成 績: 日期:2015年 6 月 11 日一、課程設計內容與要求1針對所選擇的設計題目進行硬件設計,合理選用所需元器件,繪制系統(tǒng)結構框圖、硬件接線圖,并在實驗系統(tǒng)上完成電路的連接和調試。2根據所選題目的要求進行程序設計,繪制程序總體流程圖并編寫源程序上機調試。3寫出課程設計報告,對整個設計過程進行歸納和綜合,對設計中所存在的問題和不足進行分析和

2、總結,提出解決的方法、措施、建議和對這次設計實踐的認識和收獲。二、課程設計正文設計題目主要內容是用at89s51單片機作為核心控制元件,設計一個電子琴。以單片機作為主控核心,與鍵盤、揚聲器等模塊組成核心主控制模塊,在主控模塊上設有16個按鍵和揚聲器。設計思想使用單片機設計簡易電子琴進行了分析,并介紹了基于單片機電子琴統(tǒng)硬件組成。利用單片機產生不同頻率來獲得我們要求的音階,最終可隨意彈奏想要表達的音樂。一首音樂是許多不同的音階組成的,而每個音階對應著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構成我們所想要的音樂了,對于單片機來產生不同的頻率非常方便,我們可以利用單片機的定時/計數器t0

3、來產生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應頻率關系弄正確即可。設計原理4×4矩陣鍵盤識別處每個按鍵都有它的行值列值,行值列值的組合就是按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和cpu通信。每個按鍵的狀態(tài)同樣需變成數字量“0” 和“1”, 開關的一端(列線)通過電阻接vcc,而接地是通過程序輸出數字“0”實現(xiàn)的。鍵盤處理程序的任務是:確定有無鍵按下,判斷哪一個鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開時的抖動。兩個并行口中,一個輸出掃描碼,使按鍵逐行動態(tài)接地,另一個并行口輸入按鍵狀態(tài),由行掃描值和回饋信號共同形成鍵編碼而識別按鍵,通過軟件查出該鍵的功能。數碼

4、管揚聲器截圖各音節(jié)頻譜碼利用at89c51的內部定時器使其工作計數器模式(mode1)下,改變計數值th0及tl0以產生不同頻率的方法產生不同音階,例如,頻率為523hz,其周期t1/5231912s,因此只要令計數器計時956s/1s956,每計數956次時將i/o反相,就可得到中音do(523hz)。計數脈沖值與頻率的關系式(如式4-1所示)是: nfi÷2÷fr 4-1式中,n是計數值;fi是機器頻率(晶體振蕩器為12mhz時,其頻率為1mhz);fr是想要產生的頻率。其計數初值t的求法如下: t65536n65536fi÷2÷fr例如:設k655

5、36,fi1mhz,求低音do(261hz)、中音do(523hz)、高音do(1046hz)的計數值。t65536n65536fi÷2÷fr655361000000÷2÷fr65536500000/fr 低音do的t65536500000/26263627 中音do的t65536500000/52364580 高音do的t65536500000/104665059單片機12mhz晶振,高中低音符與計數t0相關的計數值如表4-2所示 表4-2 音符頻率表音樂發(fā)生流程圖整體電路圖源程序#include <reg52.h>#define ucha

6、r unsigned char#define uint unsigned intsbit beep=p16; /定義蜂鳴器sbit music=p13; /*music為低電平播放世上只有媽媽好(工作模式為音樂播放器),music1為低電平時播放祝你生日快樂,music、music1都為高電平時(工作模式為電子鋼琴)*/sbit music1=p11;uchar timer0h,timer0l,time,key,flag; /flag=0時為電子鋼琴模式,flag=1時為音樂播放器uchar code yuepu= 6,2,3,5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1

7、, 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 ; /世上只有媽媽好樂譜uchar code yuepu1=5,1,1, 5,1,1, 6,1,2, 5,1,2, 1,2,2, 7,1,4,5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2

8、, 1,2,4,5,1,1, 5,1,1, 5,2,2, 3,2,2, 1,2,2, 7,1,2, 6,1,2, 4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4; /祝你生日快樂樂譜uchar code th_0=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,0xfe,0xff,/ 28個音階高八位頻率表 裝進定時器高八位 ;uchar code

9、tl_0=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,/ 28個音階低八位頻率表 裝進定時器 低八位;void delay(uchar t) uchar t1; unsigned long t2; for(t1=0;t1<t;t1+) /延時半拍函數,控制音樂節(jié)奏 for(t2=0;t2<8000;t2+); void song() th0=ti

10、mer0h; tl0=timer0l; / 唱歌程序 tr0=1; delay(time); /延時,讓此音節(jié)播放的長短 tr0=0; /關定時器,為下個音節(jié)響做準備 void delayms(uint x) /去抖延時 uint i,j; for(i=x;i>0;i-) for(j=110;j>0;j-); void keyscan() /檢測十六個發(fā)出音樂按鍵函數 uchar temp; p3=0xfe; temp=p3; temp=0xf0&temp; if(temp!=0x0f) delayms(10); /檢測第一行 temp=p3 ; temp=temp&

11、;0xf0; if(temp!=0xf0) temp=p3; switch(temp) case 0xee: key=0;break; case 0xde: key=1;break; case 0xbe: key=2;break; case 0x7e: key=3;break; th0=th_0key;/將按下的鍵對應發(fā)出此頻率聲音的初值裝入 tr0=1; /打開定時器 while(temp!=0xf0)/一直按下就一直發(fā)聲 temp=p3; temp=temp&0xf0; tr0=0;/松手時關閉定時器0,不能發(fā)聲 beep=1;/使蜂鳴器置高關閉,預防在進入中斷取反時將它置低打開

12、p3=0xfd; temp=p3; temp=0xf0&temp; if(temp!=0x0f)/檢測第二行按鍵 delayms(10); temp=p3 ; temp=temp&0xf0; if(temp!=0xf0) temp=p3; switch(temp) case 0xed: key=4;break; case 0xdd: key=5;break; case 0xbd: key=6;break; case 0x7d: key=7;break; th0=th_0key; /將按下的鍵對應發(fā)出此頻率聲音的初值裝入 tl0=tl_0key; tr0=1; /打開定時器0 w

13、hile(temp!=0xf0)/一直按下就發(fā)聲 temp=p3; temp=temp&0xf0; tr0=0; /松手時關閉定時器,不能發(fā)聲 beep=1;/使蜂鳴器置高關閉,預防在進入中斷取反時將它置低打開 p3=0xfb; temp=p3; temp=0xf0&temp; if(temp!=0x0f) delayms(10); temp=p3 ; temp=temp&0xf0; if(temp!=0xf0) temp=p3; switch(temp) case 0xeb: key=8;break; case 0xdb: key=9;break; case 0xbb

14、: key=10;break; case 0x7b: key=11;break; th0=th_0key; tl0=tl_0key;/將按下的鍵對應發(fā)出此頻率聲音的初值裝入 tr0=1; /打開定時器 while(temp!=0xf0)/一直按下就發(fā)聲 temp=p3; temp=temp&0xf0; tr0=0; /松手時關閉定時器0,不能發(fā)聲 beep=1;/使蜂鳴器置高關閉,預防在進入中斷取反時將它置低打開 p3=0xf7; temp=p3; temp=0xf0&temp; if(temp!=0x0f) delayms(10); temp=p3 ; temp=temp&a

15、mp;0xf0; if(temp!=0xf0) temp=p3; switch(temp) case 0xe7: key=12;break; case 0xd7: key=13;break; case 0xb7: key=14;break; case 0x77: key=15;break; th0=th_0key; tl0=tl_0key;/將按下的鍵對應發(fā)出此頻率聲音的初值裝入 tr0=1; while(temp!=0xf0) temp=p3; temp=temp&0xf0; tr0=0; beep=1; void main() uchar k,i; tmod=1; ea=1; et

16、0=1; while(1) if(music&&music1) /當為高電平時沒有放音樂,掃描鍵盤 flag=0; keyscan(); if(!music) flag=1; i=0; while(i<100) /音樂數組長度,唱完從頭再來 if(music) beep=1; break; k=yuepui+7*yuepui+1-1; timer0h=th_0k; timer0l=tl_0k; time=yuepui+2; i+=3; song(); if(!music1) flag=1; i=0; while(i<75) if(music1) beep=1; br

17、eak; k=yuepu1i+7*yuepu1i+1-1; timer0h=th_0k; timer0l=tl_0k; /把對應的音樂頻率放進定時器0 time=yuepu1i+2;/音樂節(jié)拍 i+=3; song(); void time0() interrupt 1 if(flag=0) beep=!beep; th0=th_0key; tl0=tl_0key; else beep=!beep; th0=timer0h; tl0=timer0l; /電子琴模式時進入 /音樂播放器模式調試結果仿真效果良好,硬件調試結果可以接受,不過由于蜂鳴器的問題,效果不是很理想。具體效果看演示3、 課程設

18、計總結1.本次單片機課程設計對簡易電子琴進行了一系列的了解和查閱。 1.1首先,要理解電子琴的簡單工作原理。簡易電子琴通過矩陣鍵盤可以產生16個不同頻率的音頻,這些頻率需要上網搜集資料獲得。 1.2其次,電子琴需要注意以下幾個方面。1.2.1按鍵的時候發(fā)聲,按鍵松開的時候停止發(fā)聲。1.2.2同時按2個或以上的鍵的時候不會出現(xiàn)錯誤,發(fā)出的聲音是結合在一起的聲音。 1.3最后,在電子琴的設計中加入了音樂盒的一個特征,按鍵k1.3會播放音樂,在程序 中寫入了兩個音樂的頻率,但是由于開發(fā)板只存在一個按鍵,所以只能播放一個音樂。2.設計中存在的問題和不足及解決方法 2.1開發(fā)板的發(fā)聲不連續(xù)、不清晰。原因是蜂鳴器功能不完善,可以接一個揚聲器來改善。 2.2設計中,長按鍵播放音樂,松開停止播放。不足是應該設計成按一下持續(xù)播放音樂, 再按鍵播放另外一首音樂,可解決由于開發(fā)板按鍵只有一個而只能播放一種音樂的缺 陷。 2.3另外可以添加在數碼管上顯示按鍵的音符的功能。3.設計實踐的認識和收獲 3.1認識到單片機的強大功能,沒有實現(xiàn)不了的功能,只有想不到的方面。 因為在沒有接觸課程設計之前,只簡單的了解實驗的內容,對單片機的知識沒有充分 的了解和應用,在觀看了所有的項目以及其他同學的完成的情況,發(fā)現(xiàn)自己的設計存

溫馨提示

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

評論

0/150

提交評論