畢業(yè)設(shè)計(論文)基于單片機的簡易電子琴課程設(shè)計_第1頁
畢業(yè)設(shè)計(論文)基于單片機的簡易電子琴課程設(shè)計_第2頁
畢業(yè)設(shè)計(論文)基于單片機的簡易電子琴課程設(shè)計_第3頁
畢業(yè)設(shè)計(論文)基于單片機的簡易電子琴課程設(shè)計_第4頁
畢業(yè)設(shè)計(論文)基于單片機的簡易電子琴課程設(shè)計_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、畢業(yè)設(shè)計(論文) 題目: 基于單片機的簡易電子琴課程設(shè)計 專 業(yè) 應(yīng)用電子技術(shù) 班 次 09221 姓 名 指導老師 成都電子機械高等??茖W校二0一二年五月基于單片機的簡易電子琴課程設(shè)計目錄第一章 引言。31.1 單片機發(fā)音概述。31.1.1 音調(diào)。41.1.2 節(jié)拍。61.1.3 單片機演奏音樂的方法。61.2 本次設(shè)計的任務(wù)和主要內(nèi)容。7第二章 系統(tǒng)的主要硬件電路設(shè)計。72.1 系統(tǒng)組成及總體框圖。72.1.1 簡單電子琴的組成框圖。82.1.2 簡單電子琴的proteus仿真圖。92.2 單片機主機系統(tǒng)電路。102.2.1 時鐘頻率。102.2.2 晶振電路。102.2.3 鍵盤掃描。1

2、12.2.4 發(fā)音電路。112.2.5 復位電路。.。11第三章 系統(tǒng)的軟件設(shè)計。123.1簡易電子琴的工作原理.。123.2 如何用單片機產(chǎn)生音頻脈沖。133.3 主程序流程圖。143.4 主程序。16引言:隨著社會的發(fā)展進步,音樂逐漸成為我們生活中很重要的一部分,有人曾說喜歡音樂的人不會向惡,我們都會抽空欣賞世界名曲,作為對精神的洗禮,本課程設(shè)計是基于單片機的簡易電子琴。電子琴是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,是一種新型的鍵盤樂器,它在現(xiàn)代音樂扮演著重要的角色,單片機具有強大的控制功能和靈活的編程實現(xiàn)特性,它已經(jīng)落入現(xiàn)代人們的生活中,成為不可代替的一部分,本文的主要內(nèi)容是用at89c52單片

3、機為核心控制元件,設(shè)計一個電子琴。 果。 一般來說,單片機不像其他專業(yè)樂器那樣能奏出多種音色的聲音,即不包含相應(yīng)幅度的諧波頻率。單片機演奏的音樂基本上都是單音頻率。因此單片機演奏音樂比較簡單,只需要清楚“音調(diào)”和“節(jié)拍”。音調(diào)表示一個音符唱多高的頻率節(jié)拍表示一個音符唱多長的時間第二章 系統(tǒng)硬件設(shè)計及說明2.1 系統(tǒng)組成及總體框圖硬件設(shè)計的任務(wù)是根據(jù)總體設(shè)計要求,在選擇的機型的基礎(chǔ)上,具體確定系統(tǒng)中所要使用的元器件,設(shè)計出系統(tǒng)的原理框圖、電路原理圖。該設(shè)計要實現(xiàn)一種由單片機控制的電子琴,單片機工作于12mhz時鐘頻率,使用其定時/計數(shù)器t0,工作模式為1,改變計數(shù)值th0和tl0可以產(chǎn)生不同頻率

4、的脈沖信號。該設(shè)計具有16個音節(jié)的鍵盤,用戶可以根據(jù)樂譜在鍵盤上進行演奏,音樂發(fā)生器會根據(jù)用戶的彈奏,通過揚聲器將音樂播放出來。由于本例實現(xiàn)的音樂發(fā)生器是由用戶通過鍵盤輸入彈奏樂曲的,所以節(jié)拍由用戶掌握,不由程序控制。用單片機產(chǎn)生的音頻脈沖直接驅(qū)動揚聲器并不能產(chǎn)生所要實現(xiàn)的音樂,因為它沒有足夠的驅(qū)動能力,這就需要音頻功率放大電路。2.1.1 電子琴的組成框圖at89c524*4矩陣鍵盤發(fā)音電路晶振電路復位電路 電子琴系統(tǒng)原理框圖2.1.2 簡單電子琴的proteus仿真圖電子琴總體仿真圖2.2 單片機主機系統(tǒng)電路2.2.1時鐘頻率單片機必須在時鐘的驅(qū)動下才能工作。在單片機內(nèi)部有一個時鐘振蕩電路

5、,只需要外接一個振蕩源就能產(chǎn)生一定的時鐘信號送到單片機內(nèi)部的各個單元,決定單片機的工作速度。外部振蕩源電路一般選用石英晶體振蕩器,此電路在加電大約延時10ms后振蕩器氣振,在xral2引腳產(chǎn)生幅度為3v左右的正弦波時鐘信號,其晶振頻率主要有石英晶振的頻率確定。電路中兩個電容c1,c2,作用有兩個:一是幫助振蕩起振;二是對振蕩器的頻率進行微調(diào)。c1,c2的典型值為30pf.單片機在工作時,由內(nèi)部振蕩器產(chǎn)生或由外直接輸入的送至內(nèi)部控制邏輯單元的時鐘信號的周期稱為時鐘周期。其大小是時鐘信號頻率的倒數(shù),常用表示。2.2.2 晶振電路at89c52單片機的定時控制功能是用時鐘電路和振蕩器完成的,而根據(jù)硬

6、件電路的不同,連接方式分為內(nèi)部時鐘方式和外部時鐘方式。本設(shè)計中采用內(nèi)部時鐘方式。單片機內(nèi)部有一個反相放大器xtal1,xtal2分別為反相放大器的輸入端和輸出端,外接定時反饋元件組成振蕩器,產(chǎn)生時鐘送至單片機內(nèi)部各元件。時鐘頻率越高,單片機控制器的控制節(jié)拍就越快,運算速度也就越快。一般來說單片機內(nèi)部有一個帶反饋的線性反相放大器,外接晶振和電筒就可以組成振蕩器,如圖所示。加電以后延時一段時間振蕩器產(chǎn)生時鐘,不受軟件控制。晶振電路2.2.3 鍵盤掃描本次課程設(shè)計采用矩陣鍵盤電路,這樣可以大大的節(jié)省單片機i/o口的開銷。如圖所示:2.2.4 發(fā)音電路發(fā)音電路2.2.5 復位電路復位電路第三章 系統(tǒng)的

7、軟件設(shè)計3.1簡易電子琴的工作原理大家都知道當物體振動時,能夠發(fā)出聲音。振動的頻率不同,聲音的音調(diào)就不同。在簡易電子琴里,雖然沒有振動的弦、簧、管等物體,卻有很多特殊的電裝置,每個電裝置一工作,就會使喇叭發(fā)出一定頻率的聲音。當按動某個琴鍵時,就會使與它對應(yīng)的電裝置工作,從而使喇叭發(fā)出某種音調(diào)的聲音。 簡單的說就是按鍵觸發(fā)信號發(fā)給處理器,再由處理器調(diào)用音色庫音色通過功放電路輸出或者通過數(shù)碼接口進行輸出。控制面板上的按鈕來選擇處理器對音色、音量、輸出方式、伴奏的控制。 振蕩器是根據(jù)需要產(chǎn)生一定頻率的振蕩器信號,振蕩器信號通過分頻器分解成不同的頻率的信號輸送到放大器,放大器將信號放大,推動揚聲器發(fā)出

8、聲音。鍵盤實際上就是一些開關(guān),如果沒有鍵盤,許多種頻率的信號一起進到放大器里,通過揚聲器發(fā)出的聲音就會亂七八糟,不成音樂。按下鍵盤的一支鍵,就等于接通一只開關(guān),只允許某一種頻率的信號通過到放大器里去,揚聲器就發(fā)出一個音來。這樣,按照一定的演奏規(guī)律來按鍵,就能奏出美妙的音樂來。3.2 如何用單片機產(chǎn)生音頻脈沖了解音樂的一些基本知識后可知,產(chǎn)生不同頻率的音頻脈沖即能產(chǎn)生音樂,對于單片機而言,產(chǎn)生不同頻率有脈沖非常方便,可以利用它的定時/計數(shù)器來產(chǎn)生這樣的方波頻率信號,因此,需要弄清楚音樂中的音符和對應(yīng)的頻率,以及單片機定時計數(shù)的關(guān)系。在本實驗中,單片機工作于12mhz時鐘頻率,使用其定時/計數(shù)器t

9、0,工作模式為1,改變計數(shù)值th0和tl0可以產(chǎn)生不同頻率的脈沖信號,在此情況下,c調(diào)的各音符頻率與計數(shù)值t的對照如下表:音符頻率與計數(shù)值t的對照表音符頻率(hz)計數(shù)值(t值)音符頻率(hz)計數(shù)值(t值)低1do26263628#4fa#74064860#1do#27763737中5so78464898低2re29463835#5so#83194934#2re#31163928中6la88064968低3mi33064021#6la#93264994低4fa34964103中7si96865030#4fa#37064185低1do104665058低so39264260#1do#11096

10、5085#5so#41564331高2re117565110低6la44064400#2re#124565134#6la#46664463高3mi131865157低7si49464524高4fa139765178中1do52364580#4fa#149065198#1do#55464633高5so156865217中2re58764633#5so#166165235#2re#62264884高6la176065252中3mi65964732#6la#186565268中4fa69864820高7si196765283t的值決定了th0和tl0的值,其關(guān)系為:th0=t/256,tl0=t%2

11、563.3 主程序流程圖程序開始總開關(guān)是否按下播放預定歌曲 n y讀p1口的狀態(tài)延遲10msy再讀p2口的狀態(tài)判斷是否是抖動n啟動定時器t0判斷是幾號琴鍵,并跳轉(zhuǎn)到相應(yīng)的程序查表得相應(yīng)琴鍵的定時初值重裝定時器t0處值對p1.0求反中斷返回y等待中斷,并判斷此次琴鍵是否被釋放電源 主流程圖 中斷流程圖34 主程序#include #define uchar unsigned char#define uint unsigned intsbit hummer=p34; /蜂鳴器的輸出端口sbit h1=p24; /高四位分別對應(yīng)p2.4-p2.7sbit h2=p25;sbit h3=p26;sbi

12、t h4=p27;sbit start=p37; /起始信號bit flag; /外中斷int0進入標志bit hand_play;uchar state;uchar key_value;uchar timer0h, timer0l, time;uchar song;/ 頻率-半周期數(shù)據(jù)表 高八位 共保存了四個八度的28個頻率數(shù)據(jù)code uchar freqh = 0xf2, 0xf3, 0xf5, 0xf5, 0xf6, 0xf7, 0xf8, /低音1234567 0xf9, 0xf9, 0xfa, 0xfa, 0xfb, 0xfb, 0xfc, 0xfc,/1,2,3,4,5,6,7,

13、i 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe, /高音 234567 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff; /超高音 1234567/ 頻率-半周期數(shù)據(jù)表 低八位code uchar freql = 0x42, 0xc1, 0x17, 0xb6, 0xd0, 0xd1, 0xb6, /低音1234567 0x21, 0xe1, 0x8c, 0xd8, 0x68, 0xe9, 0x5b, 0x8f, /1,2,3,4,5,6,7,i 0xee, 0x44, 0x6b, 0xb4, 0xf4, 0x2d, /高音 23456

14、7 0x47, 0x77, 0xa2, 0xb6, 0xda, 0xfa, 0x16; /超高音 1234567code uchar music500 = / 送別 5,1,2, 3,1,3, 5,1,1, 1,2,3, 6,1,2, 1,2,2, 5,1,4, 5,1,2, 1,1,1, 2,1,1, 3,1,2, 2,1,1, 1,1,1, 2,1,4, 5,1,2, 3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2, 5,1,4, 5,1,2, 2,1,1, 3,1,1, 4,1,2, 7,0,1, 1,1,4, 6,1,2, 1,2,2, 1,2,4,

15、7,1,2, 6,1,1, 7,1,1, 1,2,4, 6,1,1, 7,1,1, 1,2,1, 6,1,1, 6,1,1, 5,1,1, 3,1,1, 1,1,1, 2,1,8, 5,1,2, 3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2, 5,1,4, 5,1,2, 2,1,1, 3,1,1, 4,1,2, 7,0,2, 1,1,4, /一輩子的孤單 5,0,1, 5,0,1, 3,1,1, 2,1,1, 2,1,1, 1,1,1, 3,1,1, 3,1,1, 2,1,1, 2,1,4, 5,0,1, 5,0,1, 3,1,1, 2,1,1, 2,1,1

16、, 2,1,1, 1,1,1, 2,1,1, 3,1,1, 3,1,4, 5,0,1, 5,0,1, 3,1,1, 2,1,1, 2,1,1, 1,1,1, 3,1,1, 3,1,1, 2,1,1, 2,1,4, 2,1,1, 1,1,1, 3,1,1, 2,1,1, 1,1,1, 2,1,1, 1,1,1, 1,1,8, 3,1,1, 2,1,1, 2,1,1, 1,1,1, 1,1,1, 2,1,1, 2,1,6, 3,1,1, 2,1,2, 1,1,1, 1,1,1, 5,0,1, 6,0,1, 5,0,1, 5,0,6, 3,1,1, 2,1,1, 2,1,1, 1,1,1, 1,1,

17、1, 2,1,1, 2,1,6, 5,0,1, 3,1,1, 2,1,2, 1,1,1, 2,1,2, 3,1,1, 3,1,4, 5,0,1, 3,1,1, 5,1,2, 6,1,1, 3,1,1, 2,1,1, 2,1,6, 5,0,1, 3,1,1, 2,1,2, 1,1,1, 2,1,2, 3,1,1, 3,1,4, 5,0,1, 3,1,1, 2,1,1, 2,1,1, 1,1,1, 3,1,1, 2,1,1, 2,1,4, 2,1,1, 1,1,1, 3,1,1, 2,1,1, 1,1,1, 2,1,1, 1,1,1, 1,1,1, 1,1,6, 3,1,1, 2,1,1, 2,1

18、,1, 1,1,1, 3,1,1, 2,1,1, 2,1,6, 5,0,1, 3,1,1, 2,1,1, 2,1,1, 1,1,1, 2,1,1, 3,1,1, 3,1,6, 5,0,1, 3,1,1, 2,1,1, 2,1,1, 1,1,1, 3,1,1, 2,1,1, 2,1,6, 5,0,1, 3,1,1, 2,1,1, 2,1,1, 1,1,1, 2,1,1, 3,1,1, 3,1,6,/世上只有媽媽好 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,

19、 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,;void delay(uchar t) /延時子函數(shù),控制發(fā)音的時間長度uchar t1;unsigned long t2;for(t1=0; t1t; t1+) /嵌套循環(huán), 共延時t個半

20、拍 for(t2=0; t28000; t2+); /延時期間, 可進入t0中斷去發(fā)音void automatic_music(uchar j) /j表示第n+1首曲 uchar k, i; for(i=0;musicji!=0;i+=3) if(flag)break;k = musicji+7*musicji+1-1; /第i個是音符, 第i+1個是第幾個八度 timer0h = freqhk; /從數(shù)據(jù)表中讀出頻率數(shù)值 timer0l = freqlk; /實際上, 是定時的時間長度 time = musicji+2; /讀出時間長度數(shù)值 th0 = timer0h; /控制音調(diào)tl0 =

21、 timer0l;tr0 = 1; /啟動t0, 由t0輸出方波去發(fā)音delay(time); /控制時間長度 tr0 = 0; /關(guān)閉t0, 停止發(fā)音 /發(fā)出一個音符 void init_break()tmod=0x11;et0=1;it0=1;ex0=1;et1=1;ea=1;void key_play()uchar value;p2=0xf0;value=p2;if(value!=0xf0)p2=0xfe; if(h1=0)key_value=3; if(h2=0)key_value=7; if(h3=0)key_value=11; if(h4=0)key_value=15; p2=0x

22、fd;if(h1=0)key_value=2; if(h2=0)key_value=6; if(h3=0)key_value=10;if(h4=0)key_value=14;p2=0xfb;if(h1=0)key_value=1; if(h2=0)key_value=5; if(h3=0)key_value=9; if(h4=0)key_value=13; p2=0xf7;if(h1=0)key_value=0; if(h2=0)key_value=4; if(h3=0)key_value=8;if(h4=0)key_value=12;th1= freqhkey_value; tl1= fre

23、qlkey_value; tr1=1;/啟動定時器t0,發(fā)音delay(2);tr1=0; void int0_dispose()if(flag)switch(state)case 0:hand_play=1; break;case 1: song =0 ;hand_play=0; break;case 2:song =1 ;hand_play=0;break;case 3: song =2 ;hand_play=0;break;flag=0;void main()init_break();while(start);while(1)int0_dispose();if(hand_play)key

24、_play();elseautomatic_music(song);void int0()interrupt 0flag=1;state=p1; /保存中斷源void t0int() interrupt 1 /t0中斷程序,控制發(fā)音的音調(diào)tr0 = 0; /先關(guān)閉t0hummer = !hummer; /輸出方波, 發(fā)音 th0 = timer0h; /下次的中斷時間, 這個時間, 控制音調(diào)高低tl0 = timer0l;tr0 = 1; /啟動t0void t1int() interrupt 3tr1=0;hummer = hummer;th1= freqhkey_value; tl1= freqlkey_value;tr1=1;總結(jié)經(jīng)過一個多個月的努力,簡易電

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論