基于單片機(jī)的電子琴課程設(shè)計(jì).doc_第1頁
基于單片機(jī)的電子琴課程設(shè)計(jì).doc_第2頁
基于單片機(jī)的電子琴課程設(shè)計(jì).doc_第3頁
基于單片機(jī)的電子琴課程設(shè)計(jì).doc_第4頁
基于單片機(jī)的電子琴課程設(shè)計(jì).doc_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

本科課程設(shè)計(jì)課程名稱: 單片機(jī)原理與接口技術(shù) 設(shè)計(jì)項(xiàng)目: 簡易電子琴設(shè)計(jì) 實(shí)驗(yàn)地點(diǎn): 跨越機(jī)房 專業(yè)班級(jí):通信0901 學(xué)號(hào): 2009001330 學(xué)生姓名: 田 野 同組人: 李剛瑛 梁邦爽 指導(dǎo)教師: 武 娟 萍 2012年 05月 26日一、設(shè)計(jì)目的本設(shè)計(jì)以AT89C51單片機(jī)為核心,采用常用電子器件設(shè)計(jì)。要求最少8個(gè)按鍵,每個(gè)按鍵對應(yīng)一種音調(diào),按下按鍵發(fā)聲,松開按鍵后聲音延遲一段時(shí)間后停止,即帶余音的電子琴,延時(shí)時(shí)間可以設(shè)置,要求最少8個(gè)不同音調(diào),可以采用標(biāo)準(zhǔn)的音調(diào)設(shè)計(jì)。本次課程設(shè)計(jì)主要研究基于AT89C51單片機(jī)的簡易電子琴設(shè)計(jì)二、設(shè)計(jì)器材AT89C51,蜂鳴器,PNP型三極管,晶振,獨(dú)立按鍵三、 總體設(shè)計(jì)方案1設(shè)計(jì)思路此次設(shè)計(jì)硬件電路分四大模塊較為簡單,主要由獨(dú)立按鍵、單片機(jī)AT89C51、音頻功放及揚(yáng)聲器構(gòu)成。以AT89C51為主控器件,對其進(jìn)行編譯,達(dá)到我們的設(shè)計(jì)要求。對于軟件部分下面有詳細(xì)介紹。2.電路總設(shè)計(jì)框圖如圖1:單片機(jī)AT89C51按鍵功率放大電路揚(yáng)聲器圖1 電路總設(shè)計(jì)框圖3音頻放大電路在一定頻率范圍內(nèi),具有固定頻率的振動(dòng)就能產(chǎn)生音樂,但是單片機(jī)產(chǎn)生的音頻脈沖直接驅(qū)動(dòng)揚(yáng)聲器并不能產(chǎn)生所要實(shí)現(xiàn)的音樂,因?yàn)樗麤]有足夠的驅(qū)動(dòng)能力,需要音頻功率放大電路。這里選用PNP型三極管來驅(qū)動(dòng)蜂鳴器,是音響效果更為理想,音頻功放電路接口如圖2所示: 圖2 音頻放大電路4音樂播放電路對于播放一首固定音樂,不僅要知道音符也要知道節(jié)拍,對應(yīng)節(jié)拍延時(shí)時(shí)間設(shè)定表,對單片機(jī)進(jìn)行編程就可以實(shí)現(xiàn)功能。放歌產(chǎn)生電路如圖3,其中單片機(jī)的P3.0口控制音樂開始播放控制端口,P3.2口是控制音樂停止播放的控制端口,當(dāng)小按鍵S10按下時(shí)P3.0口獲得低電平,音樂開始重復(fù)播放,當(dāng)小按鍵S9按下時(shí),P3.2口獲得低電平,經(jīng)過單片機(jī)的處理,音樂停止播放,單片機(jī)回到最初工作狀態(tài)。而P2口的每個(gè)端口都連接一個(gè)按鍵,分別控制1,2,3,4,5,6,7,1八個(gè)不同的音符。 圖3 音樂播放電圖5總體電路圖如下圖:圖4 總體電路圖, 四 、設(shè)計(jì)原理分析1產(chǎn)生聲音的方法:只要讓揚(yáng)聲器通過產(chǎn)生大小變化的電流(脈動(dòng)電流或交流),就能使揚(yáng)聲器發(fā)出聲音,因此若以程序不斷的輸出10101就可以令揚(yáng)聲器發(fā)出聲音,由于MCS51系列的輸出端口輸出電流不夠大,所以必須加上晶體管把電流放大后再驅(qū)動(dòng)揚(yáng)聲器,如圖2所示。圖6則是產(chǎn)生聲音的基本流程圖,只要改變半周期t的時(shí)間,即可改變輸出頻率。開始P3.7=0延時(shí)tP3.7=1延時(shí)t圖6 產(chǎn)生聲音的基本流程圖2決定程序中參數(shù)的方法:C調(diào)各音階的參數(shù)及代碼如表1所示,根據(jù)此表中的頻率可計(jì)算出程序中所需的延時(shí)參數(shù),現(xiàn)在以中音DO說明如下:表1 C調(diào)各音階的參數(shù)及代碼音階DOREMIFASOLASI音符高音1高音2高音3高音4高音5高音6高音7頻率/HZ522587659700780880988延時(shí)參數(shù)63565047423733音長參數(shù)6573828898110124音階代碼21222324252627音符中音1中音2中音3中音4中音5中音6中音7頻率/HZ262294330349392440494延時(shí)參數(shù)12611310095857567音長參數(shù)33374144495562音階代碼11121314151617音符低音1低音2低音3低音4低音5低音6低音7頻率/HZ131147165175196220247延時(shí)參數(shù)254226201190170150134音長參數(shù)16182122252831音階代碼01020304050607特殊功能休止符重復(fù)演奏停止演奏簡譜0音階代碼0040255(1) DO的頻率為262HZ,所以周期T=1/f=1/262s=3816s半周期t=T/2=1908s(2) 若以程序:MOV R6,#DATA ;1周ACALL DELAY ;2周共需耗時(shí)3個(gè)機(jī)器周期,即耗時(shí)1s3=3sDELAY:MOV B,R6 ;2周需耗時(shí)2個(gè)機(jī)器周期,即耗時(shí)1s2=2sDL:MOV R7,#6 ;1周DJNZ R7,$ ;2周DJNZ R6,DL ;2周此循環(huán)部分,每執(zhí)行一次共需耗時(shí)15個(gè)機(jī)器周期,即耗時(shí)1s15=15sMOV R6,B ;2周 RET ;2周共需耗時(shí)4機(jī)器周期,即耗時(shí)1s4=4s來達(dá)成延時(shí)t的目的,則因t=1908s,且MOV R6,#DATAACALL DELAYMOV B,R6MOV R6,B RET 這5個(gè)指令共耗時(shí)9s,所以在DELAY子程序中,循環(huán)的部分只能是:1908s-9s=1899s(3) 循環(huán)的部分每執(zhí)行一次耗時(shí)15s,故要延時(shí)1899s需要執(zhí)行126次,即R6=126就可產(chǎn)生所需DO音調(diào)。其他音調(diào)所需的R6值,算法相同。(4)實(shí)際上,做電子琴時(shí),程序必須不斷地判斷是哪一個(gè)鍵被按下,所以程序中還有其他的指令在消耗時(shí)間。因此實(shí)際采用的R6的值應(yīng)該比上述計(jì)算值少一點(diǎn)點(diǎn),音階才會(huì)正確。但是要把R6的值計(jì)算很準(zhǔn)確,實(shí)在很費(fèi)時(shí)間,況且判斷按鍵的狀態(tài)所耗時(shí)間與周期T比起來實(shí)在微不足道,所以在設(shè)計(jì)程序時(shí)只采用上述計(jì)算方法計(jì)算R6的值即可,程序在判斷是哪個(gè)鍵被按下所耗費(fèi)的時(shí)間可忽略不計(jì)。3.音樂產(chǎn)生的原理:由于一首音樂是許多不同的音階組成的,而每個(gè)音階對應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率組合,即可構(gòu)成我們所想要的音樂了,當(dāng)然對于單片機(jī)來產(chǎn)生不同的頻率非常方便,我們可以利用單片機(jī)的延時(shí)時(shí)間產(chǎn)生這樣的方波頻率信號(hào)。除了音符以外,節(jié)拍也是音樂的關(guān)鍵組成部分,節(jié)拍實(shí)際上就是音持續(xù)時(shí)間的長短,在單片機(jī)系統(tǒng)中可以用延時(shí)時(shí)間的長短來實(shí)現(xiàn),如果1/4拍的延時(shí)時(shí)間是0.4秒,則1拍的延時(shí)時(shí)間就是1.6秒,只要知道1/4拍的延時(shí)時(shí)間,其余的節(jié)拍就是它的倍數(shù)。如果單片機(jī)要自己播放音樂,那么就必須在程序中考慮到節(jié)拍的設(shè)置。為了編寫計(jì)算機(jī)樂譜的方便,所以我們自己定義了音階代碼,例如用01代表低音DO,用11代表中音DO,用21代表高音DO,如表1所列。另外,我們用40代表重復(fù)演奏,用255代表停止演奏。在程序中編寫計(jì)算機(jī)樂譜時(shí),就是用這些音階代碼來代替各音階。音階代碼可歲曲子的節(jié)奏快慢有自己決定,例如1拍定位04(就是音長的4倍),半拍就是02,2拍就是08,以此類推。各音拍的音拍代碼如表2所列。表2 各音拍的音拍代碼音拍1/4拍1/2拍3/4拍1拍1 1/4拍1 1/2拍1 3/4拍2拍音拍代碼0102030405060708音拍2 1/4拍2 1/2拍2 3/4拍3拍3 1/4拍3 1/2拍3 3/4拍4拍音拍代碼0910111213141516音拍4 1/4拍4 1/2拍4 3/4拍5拍5 1/4拍5 1/2拍5 3/4拍6拍音拍代碼1718192021222324把樂譜改編為程序中的計(jì)算機(jī)樂譜時(shí),必須按照“音階代碼在前,音拍代碼在后”的規(guī)則排列,樂譜結(jié)束時(shí),必須以40(表示重復(fù)演奏)或255(表示只演奏一遍就停止)作結(jié)尾。4程序流程圖:開始是音符鍵按下嗎是功能鍵按下嗎?否設(shè)定相應(yīng)的延時(shí)參數(shù)R6的值令揚(yáng)聲器通電延時(shí)半周期令揚(yáng)聲器斷電延時(shí)半周期DPTR指向樂譜的開頭讀取音樂代碼,并存入A中音節(jié)代碼等于40嗎音節(jié)代碼等255嗎把DPTR加1讀取音拍代碼,并存入R4中設(shè)定與A內(nèi)音階代碼相對應(yīng)的參數(shù)發(fā)出R4個(gè)音長的聲音靜音把DPTR加1停止播放是否是否否是是5程序:ORG 0000HMOV P2,#11111111B MOV P3,#11111111BTEST:JNB P2.0,DO1 ;P2.0 = 0嗎? JNB P2.1,RE1 ;P2.1 = 0嗎? JNB P2.2,MI1 ;P2.2 = 0嗎? JNB P2.3,FA1 ;P2.3 = 0嗎? JNB P2.4,SO1 ;P2.4 = 0嗎? JNB P2.5,LA1 ;P2.5 = 0嗎? JNB P2.6,SI1 ;P2.6 = 0嗎? JNB P2.7,DOH1 ;P2.7 = 0嗎? JNB P3.0,START ;P3.0 = 0嗎? AJMP TESTDO1:MOV R6,#126 AJMP OUTPUT1RE1:MOV R6,#113 AJMP OUTPUT1MI1:MOV R6,#100 AJMP OUTPUT1FA1:MOV R6,#95 AJMP OUTPUT1SO1:MOV R6,#85 AJMP OUTPUT1LA1:MOV R6,#75 AJMP OUTPUT1SI1:MOV R6,#67 AJMP OUTPUT1DOH1:MOV R6,#63AJMP OUTPUT1OUTPUT1:CLR P3.7 ;令揚(yáng)聲器通電 ACALL DELAY ;延時(shí)半周期t SETB P3.7 ;令揚(yáng)聲器斷電 ACALL DELAY ;延時(shí)半周期t AJMP TEST ;重新測試按鍵START:MOV DPTR,#MUSIC ;DPTR指向樂譜的開頭CONT:CLR A ;讀取樂譜內(nèi)的音階代碼 MOVC A,A+DPTR ;A=音階代碼 CJNE A,#40,CHK ;若音階代碼為40 AJMP START ;則從頭開始演奏STOP:MOV A,#255 ;若音階代碼為255 AJMP TEST ;則停止演奏CHK:PUSH ACC ;保存A的內(nèi)容 INC DPTR CLR A ;讀取樂譜內(nèi)的音拍代碼 MOVC A,A+DPTR MOV R4,A ;R4=音拍代碼POP ACC ;取回A的內(nèi)容CHK1:CJNE A,#01,CHK2 ;若音階代碼為01, ACALL DOL ;則產(chǎn)生低音DO的聲音 JNB P3.2,STOP ;若P3.2=0,則停止演奏CHK2:CJNE A,#02,CHK3 ;若音階代碼為02, ACALL REL ;則產(chǎn)生低音RE的聲音 JNB P3.2,STOP ;若P3.2=0,則停止演奏CHK3:CJNE A,#03,CHK4 ;若音階代碼為03, ACALL MIL ;則產(chǎn)生低音MI的聲音 JNB P3.2,STOP ;若P3.2=0,則停止演奏CHK4:CJNE A,#04,CHK5 ;若音階代碼為04, ACALL FAL ;則產(chǎn)生低音FA的聲音 JNB P3.2,STOP ;若P3.2=0,則停止演奏CHK5:CJNE A,#05,CHK6 ;若音階代碼為05, ACALL SOL ;則產(chǎn)生低音SO的聲音 JNB P3.2,STOP ;若P3.2=0,則停止演奏 CHK6:CJNE A,#06,CHK7 ;若音階代碼為06, ACALL LAL ;則產(chǎn)生低音LA的聲音 JNB P3.2,STOP ;若P3.2=0,則停止演奏CHK7:CJNE A,#07,CHK11 ;若音階代碼為07, ACALL SIL ;則產(chǎn)生低音SI的聲音 JNB P3.2,STOP ;若P3.2=0,則停止演奏CHK11:CJNE A,#11,CHK12 ;若音階代碼為11, ACALL DO ;則產(chǎn)生中音DO的聲音 JNB P3.2,STOP ;若P3.2=0,則停止演奏CHK12:CJNE A,#12,CHK13 ;若音階代碼為12, ACALL RE ;則產(chǎn)生中音RE的聲音 JNB P3.2,STOP ;若P3.2=0,則停止演奏CHK13:CJNE A,#13,CHK14 ;若音階代碼為13, ACALL MI ;則產(chǎn)生中音MI的聲音 JNB P3.2,STOP ;若P3.2=0,則停止演奏CHK14:CJNE A,#14,CHK15 ;若音階代碼為14, ACALL FA ;則產(chǎn)生中音FA的聲音 JNB P3.2,STOP ;若P3.2=0,則停止演奏CHK15:CJNE A,#15,CHK16 ;若音階代碼為15, ACALL SO ;則產(chǎn)生中音SO的聲音 JNB P3.2,STOP ;若P3.2=0,則停止演奏CHK16:CJNE A,#16,CHK17 ;若音階代碼為16, ACALL LA ;則產(chǎn)生中音LA的聲音 JNB P3.2,STOP ;若P3.2=0,則停止演奏CHK17:CJNE A,#17,CHK21 ;若音階代碼為17, ACALL SI ;則產(chǎn)生中音SI的聲音 JNB P3.2,STOP ;若P3.2=0,則停止演奏CHK21:CJNE A,#21,CHK22 ;若音階代碼為21, ACALL DOH ;則產(chǎn)生高音DO的聲音CHK22:CJNE A,#22,CHK23 ;若音階代碼為22, ACALL REH ;則產(chǎn)生高音RE的聲音CHK23:CJNE A,#23,CHK24 ;若音階代碼為23, ACALL MIH ;則產(chǎn)生高音MI的聲音CHK24:CJNE A,#24,CHK25 ;若音階代碼為24, ACALL FAH ;則產(chǎn)生高音FA的聲音CHK25:CJNE A,#25,CHK26 ;若音階代碼為25, ACALL SOH ;則產(chǎn)生高音SO的聲音CHK26:CJNE A,#26,CHK27 ;若音階代碼為26, ACALL LAH ;則產(chǎn)生高音LA的聲音CHK27:CJNE A,#27,CHK0 ;若音階代碼為27, ACALL SIH ;則產(chǎn)生高音SI的聲音CHK0:CJNE A,#00,CONT2 ;若音階代碼為00, ACALL NON ;則不發(fā)出聲音CONT2:INC DPTR ;繼續(xù)讀取樂譜 AJMP CONTDOL:MOV R6,#254 ;R6 = 延時(shí)參數(shù) MOV R5,#16 ;R5 = 音長參數(shù) AJMP OUTPUT ;設(shè)定低音DO 的相對參數(shù)REL:MOV R6,#226 ;設(shè)定低音RE的相應(yīng)參數(shù) MOV R5,#18 AJMP OUTPUTMIL:MOV R6,#201 ;設(shè)定低音MI的相應(yīng)參數(shù) MOV R5,#21 AJMP OUTPUTFAL:MOV R6,#190 ;設(shè)定低音FA的相對參數(shù) MOV R5,#22 AJMP OUTPUTSOL:MOV R6,#170 ;設(shè)定低音SO的相應(yīng)參數(shù) MOV R5,#25 AJMP OUTPUTLAL:MOV R6,#150 ;設(shè)定低音LA的相應(yīng)參數(shù) MOV R5,#28 AJMP OUTPUTSIL:MOV R6,#134 ;設(shè)定低音SI的相應(yīng)參數(shù) MOV R5,#31 AJMP OUTPUTDO:MOV R6,#126 ;設(shè)定中音DO的相對參數(shù) MOV R5,#33 AJMP OUTPUTRE:MOV R6,#113 ;設(shè)定中音RE的相對參數(shù) MOV R5,#37 AJMP OUTPUTMI:MOV R6,#100 ;設(shè)定中音MI的相對參數(shù) MOV R5,#41 AJMP OUTPUTFA:MOV R6,#95 ;設(shè)定中音FA的相對參數(shù) MOV R5,#44 AJMP OUTPUTSO:MOV R6,#85 ;設(shè)定中音SO的相對參數(shù) MOV R5,#49 AJMP OUTPUTLA:MOV R6,#75 ;設(shè)定中音LA的相對參數(shù) MOV R5,#55 AJMP OUTPUTSI:MOV R6,#67 ;設(shè)定中音SI的相對參數(shù) MOV R5,#62 AJMP OUTPUTDOH:MOV R6,#63 ;設(shè)定高音DO的相應(yīng)參數(shù) MOV R5,#65 AJMP OUTPUTREH:MOV R6,#56 ;設(shè)定高音RE的相應(yīng)參數(shù) MOV R5,#73 AJMP OUTPUTMIH:MOV R6,#50 ;設(shè)定高音MI的相應(yīng)參數(shù) MOV R5,#82 AJMP OUTPUTFAH:MOV R6,#47 ;設(shè)定高音FA的相應(yīng)參數(shù) MOV R5,#88 AJMP OUTPUTSOH:MOV R6,#42 ;設(shè)定高音SO的相應(yīng)參數(shù) MOV R5,#98 AJMP OUTPUTLAH:MOV R6,#37 ;設(shè)定高音LA的相應(yīng)參數(shù) MOV R5,#110 AJMP OUTPUTSIH:MOV R6,#33 ;設(shè)定高音SI的相應(yīng)參數(shù) MOV R5,#124 AJMP OUTPUTNON:MOV R6,#33 ;設(shè)定休止符相應(yīng)參數(shù) MOV R5,#124AJMP OUTPUTOUTPUT:MOV ACC,R5 ;保存R5的內(nèi)容LOOP:CJNE A,#00,SOUND ;若音階代碼為00,則不讓揚(yáng)聲器通電 LJMP MUTESOUND:CLR P3.7 ;令揚(yáng)聲器通電MUTE:ACALL DELAY ;延時(shí)半周期 SETB P3.7 ;令揚(yáng)聲器斷電 ACALL DELAY ;延時(shí)半周期 DJNZ R5,LOOP ;輸出一個(gè)音長,共R5周的方波 MOV R5,ACC ;取回R5的內(nèi)容 DJNZ R4,OUTPUT ;一共輸出R4個(gè)音長REST:MOV R6,#170 ;靜音 MOV R5,

溫馨提示

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

評(píng)論

0/150

提交評(píng)論