單片機課程設(shè)計—電子琴_第1頁
單片機課程設(shè)計—電子琴_第2頁
單片機課程設(shè)計—電子琴_第3頁
單片機課程設(shè)計—電子琴_第4頁
單片機課程設(shè)計—電子琴_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目錄一 設(shè)計的內(nèi)容、要求及目的 . 3 1 設(shè)計內(nèi)容 . 3 2 設(shè)計要求 . 3 3 設(shè)計目的 . 3二 系統(tǒng)總體方案選擇與說明 . 3 1 系統(tǒng)方案綜述 . 3 2 系統(tǒng)設(shè)計思路 . 4三 系統(tǒng)方框圖與工作原理 . 5 1 系統(tǒng)硬件電路設(shè)計框圖 . 5 2 工作原理 . 5四 各部分方案選定、功能及計算 . 7 1 單片機選用 . 7 2 LED數(shù)碼管顯示模塊的設(shè)計 . 8 3 按鍵模塊的設(shè)計 . 8 4 揚聲器模塊的設(shè)計 . 9五 器件說明 . 10六 應(yīng)用系統(tǒng)的程序設(shè)計 . 11 1 程序總框圖 . 11 2 主函數(shù)設(shè)計 . 12 3 軟件延時函數(shù) . 12 4 頻率設(shè)定函數(shù) . 13

2、 5 定時器0中斷函數(shù) . 13 6 被檢測到按鍵處理函數(shù) . 13 7 被檢測到按鍵釋放處理函數(shù) . 13 8 鍵盤掃描函數(shù) . 14七 調(diào)試說明、使用說明 . 17 1 調(diào)試說明 . 17八 設(shè)計總結(jié) . 18九 參考文獻 . 19 1附錄一 程序清單 . 20附錄二 設(shè)計電路原理圖 . 26一 設(shè)計的內(nèi)容、要求及目的1 設(shè)計內(nèi)容本課題以單片機為核心,設(shè)計和制作一個電子琴。要求由4X4組成16個按鈕矩陣,設(shè)計成16個音,可隨意彈奏想要表達的音樂2 設(shè)計要求1.設(shè)計方案要合理、正確;2.系統(tǒng)硬件設(shè)計;3.完成必要元器件選擇;4.系統(tǒng)軟件設(shè)計及調(diào)試;5.寫出設(shè)計報告。3 設(shè)計目的本課題主要對使

3、用單片機設(shè)計簡易電子琴進行了分析,并介紹了基于單片機電子琴統(tǒng)硬件組成。利用單片機產(chǎn)生不同頻率來獲得我們要求的音階,最終可隨意彈奏想要表達的音樂。并且本文分別從原理圖,主要芯片,各模塊原理及各模塊的程序的調(diào)試來詳細闡述。本系統(tǒng)是簡易電子琴的設(shè)計,按下鍵盤矩陣中的按鍵會使數(shù)碼管顯示當前按鍵,揚聲器播放器對應(yīng)的音符。通過設(shè)計本系統(tǒng)可了解單片機的基本功能,對單片機的了解有一個小的飛躍。二 系統(tǒng)總體方案選擇與說明1 系統(tǒng)方案綜述從系統(tǒng)實現(xiàn)的功能上來看,簡易電子琴的課程設(shè)計為手動彈奏樂曲,手動彈奏樂曲是根據(jù)具體的硬件鍵盤設(shè)置功能鍵實現(xiàn)低音、中音和高音.從系統(tǒng)硬件結(jié)構(gòu)上來看,我們主要使用到51系列單片機、八

4、位七段數(shù)碼管顯示電路、矩陣4X4鍵輸入電路、揚聲器以及電源電路等等。將這些硬件電路有機地結(jié)合起來使之滿足簡易電子琴的實現(xiàn)硬件需要。從系統(tǒng)軟件設(shè)計角度來看,將簡易電子琴的課程設(shè)計采用程序模塊化設(shè)計方法,將程序分為主程序、鍵盤掃描程序模塊、數(shù)碼顯示模塊、音樂產(chǎn)生模塊等等。此外,采用程序設(shè)計思想,將中斷定時方式與外部按鍵查詢方式相結(jié)合,實現(xiàn)手動彈奏樂曲的功能。從音樂產(chǎn)生原理方面來看,通過控制單片機的定時器的定時時間產(chǎn)生不同頻率的音頻脈沖,經(jīng)放大后驅(qū)動揚聲器發(fā)出不同音樂的聲音。用定時器來控制發(fā)音時間的長短。把音樂的音符變換為定時常數(shù),作為數(shù)據(jù)表格存放在存儲器中,由程序查表得到定時常數(shù),分別用來控制定時

5、器產(chǎn)生的脈沖頻率和發(fā)出該音頻脈沖的持續(xù)時間。因此,我們可以綜合上述的方案設(shè)計原理,從軟件和硬件兩部分進行有計劃有步驟的系統(tǒng)分析和設(shè)計。2 系統(tǒng)設(shè)計思路1、手動彈奏樂曲用非編碼的矩形鍵盤來實現(xiàn),手動彈奏樂曲中矩陣鍵盤的16個鍵分別設(shè)置成不同的音符。2、八位LED數(shù)碼管顯示對應(yīng)的各個音符。采用動態(tài)掃描輸出。3、軟件的設(shè)計主要包括矩形鍵盤鍵值的讀取、LED動態(tài)掃描輸出程序、和手動彈奏樂曲程序。三 系統(tǒng)方框圖與工作原理1 系統(tǒng)硬件電路設(shè)計框圖2 工作原理1、演奏音樂原理:通過控制單片機定時器的定時時間產(chǎn)生不同頻率的音頻脈沖,經(jīng)放大后驅(qū)動揚聲器發(fā)出不同音節(jié)的聲音。把樂譜的音符變換為定時常數(shù),作為數(shù)據(jù)表格

6、存放在存儲器中,由程序到這些定時常數(shù),用來控制定時器產(chǎn)生的脈沖頻率。單片機晶振頻率為12MHZ時,樂曲中的音符、頻率及定時常數(shù)之間的對應(yīng)關(guān)系可制成表格2、鍵盤掃描原理:先將4×4矩陣鍵盤的行和列全部置為高電平,然后再逐行置為低電平,當有鍵按下時P1口的值會發(fā)生相應(yīng)的改變,通過與給定數(shù)的比較,判定是否有鍵按下和是否鍵已松開。并給定列號,根據(jù)所給的列號的值,一方面給LED送入確定好的數(shù)值,另一方面從TABLE表中取出相應(yīng)的值,送入單片機轉(zhuǎn)換成聲音播出。四 各部分方案選定、功能及計算由于LK-51單片機實驗、開發(fā)學習機的各功能模塊已經(jīng)設(shè)計好,在使用時只要設(shè)計模塊間電路的連接,因此硬件電路的

7、設(shè)計及實現(xiàn)相對簡單。硬件電路由LED數(shù)碼管顯示模塊、按鍵模塊、發(fā)光二極管電路和蜂鳴器模塊、復(fù)位電路和電源電路部分組成。1 單片機選用根據(jù)設(shè)計方案的分析,可以選擇帶有EPROM的單片機,應(yīng)用程序直接存儲在片內(nèi),不用在外部擴展程序存儲器,電路可以簡化。ATMEL公司生產(chǎn)的AT89CXX系列單片機,AT89CXX系列與MCS-51系列單片機相比,有兩大優(yōu)勢:第一,片內(nèi)程序存儲器采用閃速存儲器,使程序的寫入更方便;第二,提供了更小尺寸的芯片,使整個硬件電路的體積更小。它以較小的體積、良好的性能價格比倍受青睞。本次課程設(shè)計采用89C51單片機。AT89C52單片機的接口圖如圖所示:P0口作為顯示的段碼,

8、 P1口作為4×4矩陣鍵盤的4個列的掃描端口,P1.0P1.3作為4×4矩陣鍵盤的4個行的掃描端口,P1.4-P1.7作為4×4矩陣鍵盤的4個列的掃描端口,P3.0-P3.7作為顯示位碼,P2.1作為揚聲器接口。2 LED數(shù)碼管顯示模塊的設(shè)計本系統(tǒng)的八位LED顯示器采用動態(tài)掃描的方法進行顯示,即循環(huán)地點亮各位顯示器。用單片機的P0口來控制LED顯示器的字形輸入(段控),此外,為了實現(xiàn)位控,以P3口作為輸出位控線 。3 按鍵模塊的設(shè)計下圖為硬件系統(tǒng)的16鍵4×4的矩陣式鍵盤電路邏輯圖,鍵盤的行線連接到P1.0-P1.3口上,列線連接到P1.4-P1.7口上

9、,單片機通過逐行掃描的方法對鍵盤進行掃描,讀取判斷有無鍵被按下以及按鍵的位置。為了判斷有沒有鍵被按下,可先經(jīng)輸出口向所有列線輸出高電平然后在輸出各行狀態(tài)。若行線狀態(tài)皆為高電平則表明無鍵被按下;若行線狀態(tài)中有低電平就表示有鍵被按下,然后再根據(jù)接通的行線和列線判定按鍵的位置。當經(jīng)掃描表明有鍵被按下后,緊接著就是進行去抖動處理,抖動時間的長短與鍵的機械特性有關(guān),一般為10-20ms。4 揚聲器模塊的設(shè)計電磁式揚聲器由振蕩器、電磁線圈、磁鐵振動膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號電流通過電磁線圈,使電磁線圈產(chǎn)生磁場。振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發(fā)聲。本系統(tǒng)設(shè)計的揚聲

10、器通過驅(qū)動電路與單片機的P2.1連接,單片機就可以通過P2.1的輸出信號頻率就行控制。五 器件說明AT89C51單片機 1片 11.0592MHZ的晶振 1片 電容 1個 4X4矩陣鍵盤 1個 電阻 1八位LED顯示器 1揚聲器 1 個 個 個六 應(yīng)用系統(tǒng)的程序設(shè)計1 程序總框圖2 主函數(shù)設(shè)計主程序的的功能,主要是定時器的初始化和不同功能的調(diào)用,這里使用到不同的子程序,先調(diào)用顯示子程序,再彈奏和音樂播放功能。主程序流程圖如圖1所示:主程序的源程序如下:void main()TMOD=0x01;EA=1;ET0=1;while(1)key_scan();3void delayms(uint xm

11、s)uint i,j;for(i=xms;i>0;i-)for(j=110;j>0;j-);軟件延時函數(shù) 124 頻率設(shè)定函數(shù)void set_T0(uint x_TH0,uint y_TL0)TH0=x_TH0;TL0=y_TL0;T0_value_a=x_TH0;T0_value_b=y_TL0;TR0=1;5 定時器0中斷函數(shù)void Freq_T0() interrupt 1TH0=T0_value_a;TL0=T0_value_b;p21=p21;6 被檢測到按鍵處理函數(shù)void key_deal(uchar dis,uint freq)set_T0(freq/256,f

12、req%256);/設(shè)置中斷頻率P0=(8=dis)?(table_p0dis-1+0x80):(table_p0dis-1);/數(shù)碼管段選 P3=table_p3dis-1;/數(shù)碼管位選7 被檢測到按鍵釋放處理函數(shù)void key_relea() TR0=0;/關(guān)中斷 p21=1;/消音 dis_stop/消影(宏定義)8 鍵盤掃描函數(shù)void key_scan()P1=0XFE;temp=P1&0xf0;if(temp!=0XF0)delayms(10);temp=P1&0xf0;if(temp!=0XF0)switch(temp)case 0xe0:key_deal(1,

13、freq_table0);/dis,freq break;case 0xd0:key_deal(2,freq_table1);/dis,freq break;case 0xb0:key_deal(3,freq_table2);/dis,freq break;case 0x70:key_deal(4,freq_table3);/dis,freq break;default:break;while(temp!=0xf0)temp=P1&0xf0;key_relea();P1=0XFd;temp=P1&0xf0;if(temp!=0XF0)delayms(10);temp=P1&am

14、p;0xf0;if(temp!=0XF0)switch(temp)case 0xe0:key_deal(1,freq_table4);/dis,freq break;case 0xd0:key_deal(2,freq_table5);/dis,freq break;case 0xb0:key_deal(3,freq_table6);/dis,freq break;case 0x70:key_deal(4,freq_table7);/dis,freq break;default:break;while(temp!=0xf0)temp=P1&0xf0;key_relea();P1=0XFb

15、;temp=P1&0xf0;if(temp!=0XF0)delayms(10);temp=P1&0xf0;if(temp!=0XF0)switch(temp)case 0xe0:key_deal(5,freq_table8);/dis,freq break;case 0xd0:key_deal(6,freq_table9);/dis,freq break; case 0xb0:key_deal(7,freq_table10);/dis,freq break;case 0x70:key_deal(8,freq_table11);/dis,freq break;default:br

16、eak;while(temp!=0xf0)temp=P1&0xf0;key_relea();P1=0XF7;temp=P1&0xf0;if(temp!=0XF0)delayms(10);temp=P1&0xf0;if(temp!=0XF0) switch(temp) case 0xe0: key_deal(5,freq_table12);/dis,freq break; case 0xd0: key_deal(6,freq_table13);/dis,freq break; case 0xb0: key_deal(7,freq_table14);/dis,freq br

17、eak; case 0x70: key_deal(8,freq_table15);/dis,freq break; default: break; while(temp!=0xf0) temp=P1&0xf0; key_relea();七 調(diào)試說明、使用說明1 調(diào)試說明1用protus畫好電路原理圖,將hex文件加載到單片機里面,進行仿真,依次按下16個鍵位,觀察其結(jié)果是否與預(yù)想中的一樣,若一樣,則進行硬件調(diào)試。2. 利用單片機學習板,將keil所建工程所生成的hex文件下載到單片機 17里面,直接按下矩陣鍵盤上的16個按鍵就可以彈奏16種音符并且八位數(shù)碼顯示器上顯示鍵值。八 設(shè)計總結(jié)

18、通過這次的設(shè)計使我認識到我對單片機方面的知識知道的太少了,對于書本上的很多知識還不能靈活運用,有很多我們需要掌握的知識在等著我去學習,我會在以后的學習生活中彌補我所缺少的知識。本次的設(shè)計使我從中學到了一些很重要的東西,那就是如何從理論到實踐的轉(zhuǎn)化,怎樣將我所學到的知識運用到我以后的工作中去。在大學的課堂的學習只是在給我們灌輸專業(yè)知識,而我們應(yīng)把所學的用到我們現(xiàn)實的生活中去,此次的電子琴設(shè)計給我奠定了一個實踐基礎(chǔ),我會在以后的學習、生活中磨練自己,使自己適應(yīng)于以后的競爭。九 參考文獻1 王迎旭. 單片機原理及應(yīng)用M. 機械工業(yè)出版社.2 郭天祥. 新概念51單片機C語言教程入門、提高、開發(fā)、拓展

19、M .電子工業(yè)出版社.附錄一 程序清單#include<reg51.h>#define uint unsigned int#define uchar unsigned char#define dis_stop P0=0XFF;P3=0X00; sbit p21=P21;uint T0_value_a,T0_value_b;/用來存放T0的初值 uint temp;/*音符頻率表*/ uint code freq_table=64580,64684,64777,64820,65058,65110,65157,65178,64898,64968,65030,65128,65217,65

20、252,65283,65300;/*數(shù)碼管段譯碼表*/ uchar code table_p0=0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0xf9;/*數(shù)碼管位譯碼表*/ uchar code table_p3=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;void delayms(uint);void key_scan();void key_deal(uchar,uint);void set_T0(uint,uint);void key_relea();void Freq_T0() interrupt 1TH0=T0_value_

21、a;TL0=T0_value_b;p21=p21; void main()TMOD=0x01;EA=1;ET0=1;while(1)key_scan();void key_scan()P1=0XFE;temp=P1&0xf0;if(temp!=0XF0)delayms(10);temp=P1&0xf0;if(temp!=0XF0)switch(temp)case 0xe0:key_deal(1,freq_table0);/dis,freq break;case 0xd0:key_deal(2,freq_table1);/dis,freq break;case 0xb0:key_

22、deal(3,freq_table2);/dis,freq break;case 0x70:key_deal(4,freq_table3);/dis,freq break;default:break;while(temp!=0xf0)temp=P1&0xf0;key_relea();P1=0XFd;temp=P1&0xf0;if(temp!=0XF0)delayms(10);temp=P1&0xf0;if(temp!=0XF0)switch(temp)case 0xe0:key_deal(1,freq_table4);/dis,freq break;case 0xd0:

23、key_deal(2,freq_table5);/dis,freq break;case 0xb0:key_deal(3,freq_table6);/dis,freq break;case 0x70:key_deal(4,freq_table7);/dis,freq break;default:break;while(temp!=0xf0)temp=P1&0xf0;key_relea();P1=0XFb;temp=P1&0xf0;if(temp!=0XF0)delayms(10);temp=P1&0xf0;if(temp!=0XF0)switch(temp)case 0xe0:key_deal(5,freq_table8);/dis,freq break;case 0xd0:key_deal(6,freq_table9);/dis,freq break; case 0xb0:key_deal(7,freq_table10);/dis,freq break;case 0x70:key_deal(8,freq_table11);/dis,freq break;defau

溫馨提示

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

評論

0/150

提交評論