標題: 基于單片機的簡易電子琴設計資料 [打印本頁]
作者: heicad 時間: 2016-3-11 22:12
標題: 基于單片機的簡易電子琴設計資料
2.png (37.12 KB, 下載次數: 290)
下載附件
2016-3-11 21:37 上傳
以上壓縮包所有文件下載:
基于單片機的簡易電子琴設計.rar
(240 KB, 下載次數: 150)
2016-3-11 21:38 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
目錄:
一.簡易電子琴組成框圖及其工作原理 4
二.系統總體方案與硬件設計 5
2.1單片機最小系統 5
2.2直流電源設計 5
2.3按鍵設計 5
2.4 LED燈設計 6
2.5發聲模塊 6
2.6總電路圖 7
三.系統軟件的編寫 7
3.1電子琴軟件實現基本原理 7
3.2發音原理 9
3.3參數計算 9
3.4 計算結果 9
3.5主程序中涉及的函數講解: 10
3.6播放歌曲模塊 13
3.7錄音模塊 16
四. 總結 18
五. 參考文獻 18
六.設計心得 18
一、設計的目的
在本次設計老師所給的項目中覺得電子琴不錯,音樂能陶冶人的情操,同時使人快樂,影響人的心情,而學過的單片機技術使我們可以利用軟硬件來實現電子琴的功能,從而可以實現電子琴的微型化,可以用作玩具琴、音樂轉盤以及音樂童車等等。并且可以進行一定功能的拓展。鑒于傳統電子琴可以用鍵盤上的“1”到“A”鍵演奏從So到Do11個音,從而也可以通過單片機實現對十個按鍵的擴展,實現七個音符的低,中,高21個音調的顯示播放和音樂的自動播放。
二、設計的內容及要求
音樂由不同的音階組成,而不同的音階又是由不同的頻率發出的,因此產生不同的頻率,就可以發出不同的音階。在本次設計中,最主要的工作是程序編寫,通過按鍵的鍵值,將其轉化為不同頻率的方波送到對應的發聲口,使喇叭發聲,本次設計采用的電腦音響。同時加入LED燈來模擬音樂頻譜顯示。硬件主要由單片機最小系統,鍵盤模塊,發聲模塊,電源模塊,LED顯示模塊組成。
一.簡易電子琴組成框圖及其工作原理
0.png (9.85 KB, 下載次數: 301)
下載附件
2016-3-11 22:06 上傳
2.2直流電源設計本次設計直接采用+5v直流電源。
2.3按鍵設計按鍵采用4*6掃描;4根行線接P10-P13,六根列線接P14-P17以及P20,P21口共24個按鍵,0-20代表音符鍵,0-6代表低音1,2,3,4,5,6,7;7-13代表中音1,2,3,4,5,6,7;14-20代表高音1,2,3,4,5,6,7;21號按鍵表示播放歌曲鍵,當按下21號鍵,進入播放歌曲函數,當按下22號鍵時,播放下一首歌曲,當按下23鍵時,退出播放返回主程序。而在主程序中時,代表演奏狀態,當按下23號鍵時,進入錄音狀態,此時有個綠色的指示燈會亮。而進入錄音后,再按一次23鍵,指示燈滅,退出錄音狀態,返回主程序。
0.png (6.06 KB, 下載次數: 250)
下載附件
2016-3-11 22:09 上傳
圖2.3 按鍵模塊
2.4 LED燈設計七個紅色的LED代表按鍵的音符DO,RE,MI,FA,SO,LA,SI分別接到P0口的各個輸入端口,音符DO時,一個LED亮,音符RE時,2個LED亮,以此類推。同時為了區分高中低音,三個八度LED顯示不同,當低音音符播放時,LED閃亮,當是中音時,LED也閃亮,但是閃亮的頻率更快,當是高音時,LED全亮,這是通過調節LED亮滅時間來實現。綠色LED指示當前狀態,當電子琴處于錄音時,LED亮,結束錄音時,LED燈滅。
圖2.4 LED燈顯示模塊
2.5發聲模塊采用電腦音響。
1.png (3.9 KB, 下載次數: 324)
下載附件
2016-3-11 22:09 上傳
2.png (1.42 KB, 下載次數: 288)
下載附件
2016-3-11 22:09 上傳
圖2.5 發聲模塊電路
三.系統軟件的編寫3.1電子琴軟件實現基本原理電子琴的基本原理:本設計采用單片機實現控制,軟件設計部份的程序編寫用匯編混合C語言來完成。聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制單片機的某個口線不斷輸出“高”“低”電平,則在該口線上就能產生一定頻率的方波,講該方波接上喇叭就能發出一定頻率的聲音,若再利用程序控制“高”“低”電平的持續時間,就能改變輸出波形的頻率從而改變音調。樂曲中,每個音符對應著確定的頻率,下表給出各音符頻率。如果單片機某個口線輸出“高”“低”電平的頻率和某個音符的頻率一樣,那么將此口線接上喇叭就可以發出此音符的聲音。根據這個原理就能設計出,對于單片機來說要產生一定頻率的方波大致是先將某口線輸出高電平然后延遲一段時間再輸出低電平,如此循環的輸出就會產生一定頻率的方波,通過改變延遲的時間就可以改變輸出方波的頻率。單片機內部有兩個定時計數器T1和T0,單片機的定時計數器實際上是個計數裝置,它既可以對單片機內部晶振驅動時鐘計數,也可以對外部輸入的脈沖計數,對內部晶振計數時稱為定時器,對外部時鐘計數時稱為計數器。當對單片機內部晶振驅動時鐘計數時,每個機器周期定時計數器的計數值就加,當計數值達到計數最大值時計數完畢并通知單片機。
軟件設計思想:采用模塊化的分層次設計方法,將軟件系統功能由多個實現單一功能的子程序實現。這樣便于調試、修改。
3.2發音原理若要產生音頻脈沖,只要算出某一音頻的周期(1/頻率),再將此周期除以2,即為半周期的時間。利用定時器計時半周期時間,每當計時終止后就將P1.0反相,然后重復計時再反相。就可在P1.0引腳上得到此頻率的脈沖。利用AT89C51的內部定時器使其工作計數器模式(MODE1)下,改變計數值TH0及TL0以產生不同頻率的方法產生不同音階。
3.3參數計算例如,頻率為523Hz,其周期T=1/523=1912μs,因此只要令計數器計時956μs/1μs=956,每計數956次時將I/O反相,就可得到中音DO(523Hz)。計數脈沖值與頻率的關系式是:N=fi÷2÷fr,式中,N是計數值;fi是機器頻率(晶體振蕩器為12MHz時,其頻率為1MHz);fr是想要產生的頻率。其計數初值T的求法如下:T=65536-N=65536-fi÷2÷fr。
3.4 計算結果(1)單片機12MHZ晶振,低、中、高音符頻率與計數值T的關系如表所示:
表3.2 頻率與計數值關系表
采用查表程序進行查表時,可以為這個音符建立一個表格,有助于單片機通過查表的方式來獲得相應的數據:低音0-19之間,中音在20-39之間,高音在40-59之間。用單片機播放音樂,或者彈奏電子琴,實際上是按照特定的頻率,輸出一連串的方波。為了輸出合適的方波,首先應該知道音符與頻率的關系。
(2)音調數據表
曲調值 | DELAY |
| 曲調值 | DELAY |
調4/4 | 125ms |
| 調4/4 | 62ms |
調3/4 | 187ms |
| 調3/4 | 94ms |
調2/4 | 250ms |
| 調2/4 | 125ms |
表3.3 音調數據表
上表中的頻率數值,有些過多,去掉不常用的黑鍵頻率,只是把白鍵對應的數據存放在單片機中,即可滿足絕大部分的應用需求。
定義音調數據表的程序如下:
DW63628,63835,64021,64103,64260,64400,64524 低音區:1 2 3 4 5 6 7
DW64580,64683,64777,64820,64898,64968,65030 中音區:1 2 3 4 56 7
DW65058,65110,65157,65178,65217,65252,65283 高音區:1 2 3 4 56 7
把這個數據表,放在程序中,需要播音的時候,就從表中取出一個數據送到定時器,當定時器溢出中斷的時候,再對輸出引腳取反,那么,在揚聲器中,即可聽到上表中頻率的聲音。
3.5主程序中涉及的函數講解:void YinFu_DiZhongGao_Flag(uchar keyval)
{
if(keyval<7)
flag_yinfu_dizhonggao=1; // 低音
else if(keyval<14)
flag_yinfu_dizhonggao=2; //中音
else if(keyval<21)
flag_yinfu_dizhonggao=3; //高音
}
此函數是根據按下鍵值來確定音符是高音、中音還是低音flag_yinfu_dizhonggao=1代表低音,flag_yinfu_dizhonggao=2代表中音,flag_yinfu_dizhonggao=3代表高音。
而LED顯示函數(定時器1中斷服務函數)會根據flag_yinfu_dizhonggao的值來顯示。
void Timer_Init()
{
TMOD=0x11; //定時器T0,T1設置為方式1,
TH1=0xD8; //10ms中斷一次
TL1=0xF0;
TH0=th0;
TL0=tl0;
IE=0x82; //開啟總中斷和定時器T0,T1溢出中斷
ET1=1;
IP=0x02; //T0優先于T1
}
定時器0用來產生不同方波頻率,使音響發聲。
定時器1用來控制LED顯示,當工作在演奏模式時,按下音符鍵時,判斷音符鍵是高音還是中音或者低音,當是高音時,LED全亮,占空比為1;當是中音時,LED快速閃爍,占空比為1/2;當是低音時,LED相對較慢的閃爍,占空比為1/4。
中斷服務程序:
void play_Tone() interrupt 1 using 0//定時器T0溢出中斷,產生不同頻率的矩形波
{
TH0=th0; TL0=tl0;
Beep=~Beep;
}
void play_LED() interrupt 3 using 2
{
if(Recordonoff)//開啟錄音后計時按鍵按下的時間
{
TH1=0xB1;
TL1=0xE0;
Record_Timer++;
}
if(flag_yinfu_dizhonggao==1||flag_yinfu_dizhonggao==3)//低音或高音
{
if((cont==3&&flag_yinfu_dizhonggao==1)||flag_yinfu_dizhonggao==3) //低音占空比為1/4、高音占空比為1
{
led=LED_Dis[yuzhi];
}
elseled=0x00;
}
if(flag_yinfu_dizhonggao==2)
{ if(cont1) //控制占空比為1/2
{ cont1=~cont1; led=LED_Dis[yuzhi]; }
else
{ led=0x00; cont1=~cont1; }
}
cont++;
if(cont>3) cont=0;
}
中斷函數中的余值在主程序中是這樣賦值的:
yuzhi=(KeyNo+3)%7; //判斷DO RE MI FA...
根據yuzhi判斷DO、RE...當時DO時,亮一個LED燈,當時RE時,亮兩個LED...
//21個音符的頻率對應的T值
uint codeTone_Delay_Table[]={63628,63835,64021,64103,64260,
64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,
65110,65157,65178,65217,65252,65283};
void main()
{ ucharKeystate=0;
Timer_Init();
led=0x00; //初始化led
led_zhishi=0;指示LED滅(進入演奏狀態,若進入錄音狀態則亮)
while(1)
{ Keystate=KeyState();//如果有按鍵按下,返回1
if(Keystate)
{ key_scan();
if(KeyNo<21)//KeyNo存儲按下鍵的鍵值
{ yuzhi=(KeyNo+3)%7; //判斷DO RE MI FA...
th0=Tone_Delay_Table[KeyNo]/256;//賦初值,產生
//按鍵所對應的音符的頻率
tl0=Tone_Delay_Table[KeyNo]%256;
YinFu_DiZhongGao_Flag(KeyNo);//判斷是高中低音
TR0=1; //Turn on timer
TR1=1;
}
elseif(KeyNo==21) //進入播放歌曲狀態
{ PlayMusic();Delayms(2000); }
elseif(KeyNo==23) //進入錄音狀態
{ Recordonoff=~Recordonoff; Record_yinfu(); }
}
else
{ TR0=0; //關閉定時器
TR1=0;
led=0x00;
cont=0;//控制占空比變量,讓LED以不同頻率閃爍
}
Delayms(2);
四.總結 這次設計中,在仿真軟件上實現了高、中、低21個音符的發聲和音樂的自動播放。以AT89C51單片機為基礎,增加鍵盤模塊,顯示模塊,發聲模塊與電源模塊。通過上網查閱各音符的頻率,使用21個按鍵來輸入不同的音調,再通過采用定時器T0與T1來改變高低電平輸出的頻率來模擬不同音階發音的頻率,然后傳送到喇叭,就可以發出相應的聲音。音階有低、中、高之分,通過顯示模塊的LED燈來表現音符高低。
五.參考文獻[1]胡桂珍,《C程序設計教程》,西南交通大學出版社
[2]潘育山,《 單片機原理及C51開發技術》,西南交通大學出版社
[3]王曉明,《電機的單片機控制》,北京航空航天大學出版社
[4]李廣弟,朱月秀,冷祖祁,《單片機基礎第3版》,北京航空航天大學出版社
六.設計心得 這次設計設計完成后,體會頗多,在學與做的過程中,取長補短,不斷學習新的知識,吸取經驗,達到進步的目的。通過自身的努力以及相關圖書資料的幫助,逐漸熟悉了Keil uVision4、PROTEUS和C語言等軟件的使用。本次設計我學習到不少單片機的知識,但由于自己的理論知識水平有限,實踐知識和設計經驗不足,在設計過程中難免存在一些問題。在解決問題的過程中,加深了自己對單片機應用的理解。
作者: xysqwzel 時間: 2021-6-8 10:18
能不能說一下原器件有哪些呀?
作者: xysqwzel 時間: 2021-6-8 10:24
樓主可以整理一下所需要的器件嗎?
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
国产极品粉嫩美女呻吟在线看人
|
精品婷婷
|
免费观看一级特黄欧美大片
|
国产资源视频
|
亚洲一区二区三区免费在线观看
|
中文字幕亚洲一区
|
国产精品毛片一区二区在线看
|
国产久
|
美女天天干天天操
|
欧美一级视频在线观看
|
网色
|
91精品国产综合久久福利软件
|
午夜影院在线观看免费
|
日韩欧美高清
|
精品久久国产
|
国产a级毛片
|
久久久国产亚洲精品
|
中文字幕久久久
|
成人在线视频免费观看
|
91性高湖久久久久久久久_久久99
|
99热国产在线播放
|
欧美日韩综合
|
一区二区三区国产精品
|
久久天堂
|
欧美一区二区三区在线看
|
国产精品久久久久久亚洲调教
|
国产精品一区在线观看
|
黄色精品
|
成人免费黄视频
|
一区二区三区国产
|
久久久久国产一区二区三区
|
中文精品一区二区
|
国产精品久久久久久久久图文区
|
亚洲一区高清
|
www.亚洲.com|
成人影院网站ww555久久精品
|
最新国产精品精品视频
|
欧美色性
|
精品小视频
|
欧美日韩视频在线第一区
|
日本小视频网站
|