




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
...wd......wd......wd...第屆電子設計大賽論文單片機音樂發生器組長:組員:目錄1、系統方案-2-1.1、方案比擬與選擇-2-1.1.1、單片機選擇與論證-2-1.1.2、功放選擇與論證-2-1.1.3、顯示器件選擇與論證-2-1.1.4、鍵盤形式選擇與論證-3-1.1.5、材料選擇與論證-3-2、理論分析與計算-3-2.1、聲音播放的原理-3-2.1.1、普通聲音產生原理-3-2.1.2、音樂產生原理-4-2.2、音符節拍處理-5-3、電路與程序設計-6-3.1、電路的設計-6-3.1.1、總體框圖設計-6-3.1.2、時鐘電路設計-6-3.1.3、復位電路設計-7-3.1.4、按鍵電路設計-7-3.1.5、顯示電路設計-8-3.1.6、揚聲器電路設計-9-3.2、程序設計-10-3.2.1、系統整體流程圖-10-3.2.2、鍵盤子程序流程圖-10-3.2.3、液晶顯示子程序流程圖-11-4、測試方案與測試結果-12-4.1、測試方案-12-4.2、測試結果-12-4.3、測試分析-13-附錄-13-附錄1:電路原理圖-13-附錄2:局部源程序-14-1、系統方案1.1、方案比擬與選擇1.1.1、單片機選擇與論證方案一:8051單片機。8051內部包含一個8位CPU,128BRAM,4KBROM,21個特殊功能存放器,4個8位并行I/O口,一個全雙工串行口,2個16位定時器、計數器,5個中斷源。方案二:SST單片機。SST單片機省去了開發用的編程器和仿真器。省去了外部EEPROM、電壓監控芯片、上電復位電路和5個UART的擴展芯片。它自帶在線下載和在線仿真功能,帶有5路PCA模塊(主成分分析),PCA功能比普通單片機有更強的計時性。利用PCA的脈沖寬度調制〔PWM〕模式可產生一個8位PWM。方案三:AT89C52單片機。AT89C52是美國ATMEL公司生產的低電壓,高性能CMOS8位單片機,片內含4k字節的可反復擦寫1000次的只讀程序存儲器〔PEROM〕和128字節的隨機存取數據存儲器〔RAM〕,片內置通用8位中央處理器〔CPU〕和Flash存儲單元。基于對功能齊全性的考慮,我們采用方案三。1.1.2、功放選擇與論證方案一:LM386。LM386是一種音頻集成功放,具有自身功耗低、更新內鏈增益可調整、電源電壓范圍大和總諧波失真小等優點的功率放大器。方案二:NPN型三極管。集電極電流受基極電流的控制,并且基極電流很小的變化,會引起集電極電流很大的變化,且變化滿足一定的比例關系。出于對市場供給情況和價格方面的考慮,我們采用方案一。1.1.3、顯示器件選擇與論證方案一:數碼管。數碼管顯示能在低電壓、小電流條件下驅動發光,能與CMOS、ITL電路兼容。發光響應時間極短(<0.1μs),高頻特性好,單色性好,亮度高。體積小,重量輕,抗沖擊性能好。壽命長,使用壽命在10萬小時以上,甚至可達100萬小時。但顯示功能有限,只能顯示數字和個別字母。方案二:液晶顯示器(LCD)。液晶顯示器每一個點在收到信號后就一直保持那種色彩和亮度,恒定發光,顯示質量高。其接口都是數字式的,和單片機系統的接口更加簡單可靠,操作更加方便。功耗主要消耗在其內部的電極和驅動IC上,因而耗電量比其它顯示器要少得多。方案三:陰極射線管顯示器(CRT)。此種顯示器圖像色彩豐富,復原性好,有豐富的幾何失真調整能力。但不能長期暴露在磁場下,會磁化或損壞,不能讓強光直射,會降低發光效率,不能在高溫下使用,工作性能和使用壽命會大打折扣。出于價格和電路復雜程度的考慮,在鍵控音符輸入時采用方案一,在歌曲信息的顯示時采用方案三。1.1.4、鍵盤形式選擇與論證方案一:獨立式按鍵。獨立按鍵的輸入線較多,構造復雜,一般適用于按鍵較少,操作速度較高的場合。方案二:行列式鍵盤。行列式鍵盤由行和列線穿插組成,一般適用于按鍵較多的場合。使用4×4矩形鍵盤,這樣鍵盤模塊僅使用8根線與處理器相連,節省了系統資源。由于我們功能比擬少,矩形鍵盤占用電路板位置較大且電路復雜,因此選擇方案一。1.1.5、材料選擇與論證方案一:玻璃板。玻璃板光滑、透明,但是質量較重,易碎,并且不易加工。方案二:塑料板。塑料板質量輕,不易碎,但是也不好加工,且不環保。方案三:木板。木板質量比塑料板重,但比玻璃板輕,易于加工,可塑性強。基于本錢及加工復雜程度的考率,采用方案二。2、理論分析與計算2.1、聲音播放的原理2.1.1普通聲音產生原理人耳能聽到的聲音頻率范圍是幾十到幾千赫茲之間,單片機的I/O輸出引腳上能輸出高電平或低電平。設計一個程序,令單片機的某一個引腳按照一個的時間間隔輸出一些符合規律的上下電平信號,那么就能得到一系列的矩形波。入伏哦這種時間間隔反映的頻率在人耳所能聽到的頻率范圍內,那么就能輸出一定的聲音信息。圖1要輸出的穩定的矩形波,可以利用延時程序來控制輸出高電平或低電平的持續時間,當持續時間到時就令該信號反向,從而實現電平的轉換,如圖1所示。圖中,從單片機引腳上輸出的信號,高電平和低電平保持的時間分別為t1和t2,信號的根本輸出周期為T,即頻率f的倒數。在程序編寫時,可令t1和t2相等。這樣,當要產生某一頻率的音頻信號時,只要先計算得到這個周期時間的一半,然后利用延時程序來控制單片機的輸出引腳在該時間內輸出穩定的高電平或低電平。該時間完畢時,又利用程序使單片機的輸出引腳的輸出信號電平發生反相。如此循環執行后,就能得到設計要求的音頻信號了。2.1.2音樂產生原理一首樂曲是由多個音符構成的。每一個音符都對應著一個確定的頻率。另外,每一個音符會根據樂曲的要求設定一個確定的節拍音符頻率的處理方法如下:程序設計如果利用定時器計數的方式來產生延時的效果,就可以將歌曲中每一個音符所對應的頻率換算成相對應的技術初值。然后,將這首音樂所有音符的計數初值編成一個表,并把每一個音符的計數初值與一個確定的數字碼來聯系。如表1所示為利用定時器T0工作于方式1時,一些簡譜音符所對應的頻率,計數初值和簡譜碼。音符頻率(Hz)簡譜碼(T)音符頻率(Hz)簡譜碼(T)低1D026263628#4FA#74064860#1D0#27763731中5SO74864898低2RE29463835#5S0#83164934#2RE#31163928中6LA88064968低3M33064021#6LA#93264994低4FA34964103中7S198865030#4FA#37064185高1DO104665058低5SO39264260#DO#110965085#5S0#41564331高2RE117565110低6LA44064400#2RE#124565134#6LA#46664463高3M131865157低7S149464524高4FA139765178中1DO52364580#4FA#148065198#1D0#55464633高5SO156865217中2RE57864684#5SO#166165235#2RE#62264723高6LA176065252中3M65964777#6LA#186565268中4FA69864820高7SI196765283表1例如,要計算中音DO、中音RE、中音MI的計數初值中音DO:TC=2∧16–10∧6/(523*2)=65536-956=65480=0FC44H中音RE:TC=2∧16-10∧6/(587*2)=65536-888=64684=0FCACH中音MI:TC=2∧16-10∧6/(659*2)=65536-759=64777=0FD09H2.2、音符節拍的處理一首樂曲的每一個音符除了頻率之外,還有不同的節拍,也就是這個音符發音的持續時間。如表2所示為節拍碼與實際碼之間的對照表。節拍碼實際節拍節拍碼實際節拍11/4拍51又1/4拍22/4拍61又1/2拍33/4拍82拍41拍A2又1/2拍表2如果1拍為0.4s,1/4拍是0.1s,只要設定延遲時間就可求得節拍的時間。假設1/4拍為1DELAY,那么1拍應為4DELAY。如表3所示為1/4和1/8拍的時間設定。1/4拍的時間設定1/8拍的時間設定曲調值DELAY曲調值DELAY調4/4125ms調4/462ms調3/4187ms調3/494ms調2/4250ms調2/4125ms表31/4拍的延遲時間=187ms延時程序為: DELAY:MOVR7,#02 DELA1:MOVR4,#187 DELA1:MOVR3,#248 DJNZR3,$ DJNZR4,DELA2 DJNZR7,DELA13、電路與程序設計3.1、電路的設計3.1.1、總體框圖設計系統總體框圖如圖2所示。單片機時鐘與復位鍵盤輸入拓展RAM拓展ROM音頻發生音頻放大大揚聲器LCD顯示圖23.1.2、時鐘電路設計AT89C52內部有一個用于構成振蕩器的高增益反相放大器,它的輸入端為芯片引腳XTAL1,輸出端引腳為XTAL2。這兩個引腳跨接石英晶體和微調電容,構成一個穩定的自激振蕩器,如圖3所示為AT89C52的內部時鐘方式的電路。圖3圖中電容C1和C2的值選擇為30pF。該電容的大小會影響振蕩器頻率的上下、振蕩器的穩定性和起振的快速性。晶體振蕩頻率的范圍通常是在1.2~12MHz。晶體的頻率越高,系統的時鐘頻率越高,單片機的運行速度也就越快。但同時,運行速度快對存儲器的速度要求也就越高,對印制電路板的工藝要求也就越高,即要求線間的寄生電容要小。晶體和電容應盡可能安裝得與單片機芯片靠近,以減小寄生電容,更好地保證振蕩器穩定、可靠地工作。3.1.3、復位電路設計AT89C52的復位是由外部的復位電路實現的,在本次設計中,我們采用了按鍵電平復位電路。按鍵手動電平復位是通過RST端經電阻與電源Vcc接通來實現,具體電路如圖4所示。圖43.1.4、按鍵電路設計此電路實現的功能是每當有按鍵按下時,通過數碼管顯示相應數字。每個按鍵代表不同的音符,通過程序控制揚聲器發出不同音符。如圖5所示為獨立式按鍵的具體電路。圖53.1.5、顯示電路3.1.5.1LED數碼管顯示電路在本次設計中我們采用的是7管LED數碼管,它由7個發光二極管組成。這七個發光二極管a-g呈“日〞字形排列,當某一發光二極管導通時,相應地點亮某一點或某一段筆畫,通過發光二極管不停地亮暗組合形成不同的數字、字母等符號。由于采用的是共陰極接法,所以在單片機輸出口和LED輸入口相連時沒有外接電阻。如圖6所示為數碼管實際連接電路。圖63.1.5.2LCD液晶顯示器電路在本次設計中,我們采用的是FG12864ELCD,它是一種圖形點陣液晶顯示器。由于LCD的電源供電情況有別于普通的+5V電源,其驅動電源情況必須通過一個供電電路來提供,如圖7所示。圖7圖8如圖8所示為LCD具體連接電路。顯示數據通過單片機的P0引腳來傳送;左半屏與右半屏顯示的選擇,引腳分別連接LCD的CS1和CS2。3.1.6、揚聲器電路圖9如圖9所示為揚聲器電路實際連接圖,將單片機與喇叭通過一個LM386連接,揚聲器的工作原理是當兩輸入端有電平差時,揚聲器發聲。所以將喇叭的一個輸出端接地,另一端與集成運放的輸出相連。突出采用的連接方式,可以通過改變滑動變阻器的大小來改變接入運放的電壓,并實現控制音量大小的調節。3.2、程序的設計3.2.1、系統整體流程圖圖10如圖10所示為系統整體流程圖。將歌曲的節拍和頻率儲存到數據表中,播放歌曲時利用查表函數為計數器賦初值,產生周期不等的方波,即可播放音樂。3.2.3、鍵盤子程序流程圖如圖11所示為鍵盤子程序流程圖。圖113.2.2、液晶顯示子程序流程圖如圖12所示為液晶顯示子程序流程圖。圖124、測試方案與測試結果4.1、測試方案根本要求〔1〕:能播放標準C調的Do、Re、Mi、Fa、So、La、Si、Do作為起始測試音。根本要求〔2〕:測試音完畢后等待2秒,播放一首自選曲目,時間>30秒。發揮局部〔1〕:能播放指定曲目。發揮局部〔2〕:具有鍵盤,可現場編曲并播放。發揮局部〔3〕:具有液晶顯示功能,可顯示簡譜。發揮局部〔4〕:可將簡譜轉換成顯示五線譜。4.2、測試結果4.2.1、仿真測試通過Keil和Proteus仿真,在播放Do,Re,Mi,Fa,So,La,Xi,Do等待兩秒后,可以聽到自選歌曲和指定曲目,LCD顯示歌曲信息。按下控制鍵后,進入編曲模式,7個獨立鍵盤分別代表七個音符,可現場編曲。同時,數碼管顯示每個按鍵代表的數字。如圖13所示,為數碼管仿真結果。圖134.2.2、成品測試通過對成品進展調試實驗,所得到的結果與仿真結果一樣。4.3、測試分析由測試結果可以看出,成品滿足根本要求和發揮局部的局部要求。附錄附錄1:電路原理圖附錄2:局部源程序#include<reg51.h>#include<absacc.h>#define ucharunsignedchar#defineuintunsignedint#defineLCDPORTP0#defineEP3^1#defineRWP3^3#defineDIP3^4#defineCS1P3^6#defineCS2P3^5#defineBUSYSTATUSP0^7#defineLCDSTARTROW0xc0#defineLCDPAGE0xB8#defineLCDLINE0x40voidRun(void);//主程序voidKeyScan(void); //按鍵voidPlayKey(void); //按鍵程序voiddelay_1ms(uchari);//延時1msvoidPlayMusic1(void); // 播放12345671voidPlayMusic(void); //播放同一首歌voidPlayMusic2(void); //播放規定曲目1voidDisPlay(void); //數碼管//voidlcd_init(void);//lcd初始化voidinit_com(void);voidsound_delay(ucharn);voidtimer0(void);ucharcodehz1[];/*一系列變量*/sbitBeep=P2^7;//sbitbusy=P0^1;uchar Th0,Tl0;uchar flag=0;//模式,0表示音樂,1表示按鍵uchar key=0;//按鍵代號uchar a;uchar gaodi=0;//uchardatacount=0;//uintcounter=0;//12345671的頻率ucharcodeSONG_TONE[]={115,102,91,86,77,68,61,0};//12345671的節拍ucharcodeSONG_LONG[]={17,18,20,21,23,25,28,0};/*比賽規定曲目*/ //魂斗羅赤色要塞ucharcodeSONG_TONE2[]={34,38,45,51,45,51,57,61,57,61,68,77,68,102,91,77, 68,68,45,51,45,43,38, 68,68,45,51,45,43,57, 68,68,45,51,45,43,38, 68,68,45,51,45,43,57,0};//魂斗羅的節拍ucharcodeSONG_LONG2[]={13,12,10,9,10,9,8,28,8,7,6,6,6,5,5,6, 35,13,10,9,19,11,85, 35,13,10,9,19,11,68,35,13,10,9,19,11,85, 35,13,10,9,19,11,68,0}; /*同一首歌的源代碼*/ucharcode Music[]={0Xef,0Xef,0X88,0X14,0X24,0X36,0X42,0X34,0X14,0X28,0X14,0X94,0X1f,0X88,0X14,0X24,0X34,0X32,0X42,0X54,0X14,0X46,0X32,0X54,0X22,0X32,0X32,0X22,0X2C,0X38,0X54,0X74,0X76,0X62,0X68,0X54,0X52,0X62,0X74,0X62,0X52,0X3f,0X46,0X42,0X54,0X64,0X54,0X42,0X32,0X28,0X0a4,0Xa2,0X92,0X84,0X94,0X1f,0Xb8,0X68,0X46,0X52,0X68,0X74,0X72,0X72,0X74,0X62,0X52,0X3f,0Xb8,0X68,0X46,0X52,0X68,0X64,0X62,0X62,0X64,0X42,0X32,0X2f,0X58,0X14,0X24,0X36,0X42,0X34,0X12,0X12,0X26,0X22,0X24,0X22,0X12,0X94,0X9c,0Xa8,0Xa6,0X92,0X84,0X64,0X54,0X22,0X22,0X46,0X42,0X44,0X32,0X22,0X5f,0Xef,0Xef,0xFF,}//按鍵音符uchar code KeyCode[]={0XFF,0XFF,0xF8,0x8B,0xF9,0x5B,0xFA,0x14,0xFA,0x66,0xFB,0x03,0xFB,0x8F,0xFC,0x0B,//低音0xFC,0x43,0xFC,0xAB,0xFD,0x08,0xFD,0x33,0xFD,0x81,0xFD,0xC7,0xFE,0x05,//中音0xFE,0x21,0xFE,0x55,0xFE,0x84,0xFE,0X99,0XFE,0xC0,0xFE,0xE3,0xFF,0x02,//高音};//功能程序voidRun(void){ if(flag==0){ PlayMusic1();//12345671 PlayMusic();//同一首歌 PlayMusic2();//魂斗羅 } else PlayKey();}voidKeyScan(void)//按按鍵1-7,數碼管的顯示{ if(P1==0X7f)//如果P1.7=0 { delay_1ms(5); if(P1==0X7f) gaodi++; if(gaodi>2) gaodi=0; a=gaodi; } elseif(P1==0XFE) { delay_1ms(12); if(P1==0XFE) key=1; a=key; } elseif(P1==0XFD) { delay_1ms(12); if(P1==0XFD) key=2; a=key; } elseif(P1==0XFB) { delay_1ms(12); if(P1==0XFB) key=3; a=key; } elseif(P1==0XF7) { delay_1ms(12); if(P1==0XF7) key=4; a=key; } elseif(P1==0XEF) { delay_1ms(12); if(P1==0XEF) key=5; a=key; } elseif(P1==0XDF) { delay_1ms(12); if(P1==0XDF) key=6; a=key; } elseif(P1==0XBF) { delay_1ms(12); if(P1==0XBF) key=7; a=key; } else return;}voidPlayKey(void){ if(key==0) return; else { Th0=KeyCode[gaodi*14+key*2]; Tl0=KeyCode[gaodi*14+key*2+1]; TR0=1; delay_1ms(187); TR0=0; key=0; }}time0()interrupt1//定時器0中斷{ TH0=Th0; TL0=Tl0; Beep=~Beep;}voidinterrupt0()interrupt0//外部終端0{ flag=~flag; if(flag==0) { a=8; P2=0; }}//延時1msvoiddelay_1ms(uchari){ ucharj,k; for(j=0;j<i;j++) for(k=0;k<148;k++);}/*播放音樂主程序*///12345671voidPlayMusic1(void){ uinti=0; uintj,k;while(SONG_LONG[i]!=0||SONG_TONE[i]!=0){//播放各個音符,SONG_LONG為拍子長度for(j=0;j<SONG_LONG[i]*30;j++){Beep=~Beep;//SONG_TONE延時表決定了每個音符的頻率for(k=0;k<SONG_TONE[i]/3;k++);}delay_1ms(10);i++; TR0=0; if(flag!=0) break;}}//同一首歌的實現局部voidPlayMusic(void){ ucharyinfu,jiepai; uchari,j; for(i=0;Music[i]!=0XFF;i++) { yinfu=(Music[i]>>4); jiepai=(Music[i]&0X0F); if(yinfu==0) continue; Th0=MusicCode[(yinfu-1)*2]; Tl0=MusicCode[(yinfu-1)*2+1]; TR0=1; for(j=jiepai;j>0;--j) { delay_1ms(150);//調歌曲快慢:187(越大越慢) } TR0=0; if(flag!=0) break; }}voidPlayMusic2(void){ uinti=0; uintj,k;while(SONG_LONG2[i]!=0||SONG_TONE2[i]!=0){//播放各個音符,SONG_LONG為拍子長度for(j=0;j<SONG_LONG2[i]*30;j++){Beep=~Beep;//SONG_TONE延時表決定了每個音符的頻率for(k=0;k<SONG_TONE2[i]/3;k++);}delay_1ms(10);i++; TR0=0; if(flag!=0) break;}}/*數碼管顯示模塊*/voidDisplay(void)//顯示{ switch(a) { case0:P2= 0X3F;break; case1: P2= 0X06;break; case2: P2= 0X5B;break; case3: P2= 0X4F;break; case4: P2= 0X66;break; case5: P2= 0X6D;break; case6: P2= 0X7D;break; case7: P2= 0X07;break; default:P2=0X00;break;}}voiddelay(unsignedintn){ unsignedinti;for(;n>0;n--) for(i=500;i>0;i--);}bitbCheckBusy(){LCDPORT=0xff;RW=1;DI=0;E=1;E=0;returnBUSYSTATUS;}voidvWriteData(unsignedcharucData){ while(bCheckBusy()); LCDPORT=0xff; RW=0; DI=1; LCDPORT=ucData; E=1; E=0;}voidvWriteCMD(unsignedcharucCMD){ while(bCheckBusy()); LCDPORT=0xff; RW=0; DI=0; LCDPORT=ucCMD; E=1; E=0;}voidvLCDInitialize(){ CS1=1; CS2=1; vWriteCMD(0x38); vWriteCMD(0x0f); vWriteCMD(0x01); vWriteCMD(0x06); vWriteCMD(LCDSTARTROW);}VoidvShowCustomRow(unsignedcharucPage,unsignedcharucLine,unsignedcharucWidth,unsignedchar*ucaRow){ unsignedcharucCount;if(ucLine<64) { CS1=1;CS2=0; vWriteCMD(LCDPAGE+ucPage) ; vWriteCMD(LCDLINE+ucLine) ; if((ucLine+ucWidth)<64) { for(uc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45636-2025進境出境經接觸傳播傳染病防控技術規范
- 四川省德陽市2025屆高三下學期二模試題 化學 含解析
- 行政管理復習計劃的重點安排:試題及答案
- 慢性阻塞性肺疾病護理常規體系構建
- 2025年法學概論知識點梳理與試題及答案
- 企業戰略調整的步驟試題及答案
- 2025年行業競爭中的風險應對試題及答案
- 學校火災斷電應急預案(3篇)
- 國際法與全球治理的關系試題及答案討論
- 跨文化經濟交流的必要性試題及答案
- 基層治理現代化視角下“楓橋經驗”的實踐路徑與創新研究
- 通信光纜租用協議合同書
- 醫療救助資金動態調整機制-洞察闡釋
- 2025屆北京市東城區高三二模 政治試題(含答案)
- 公共組織績效評估-形考任務一(占10%)-國開(ZJ)-參考資料
- 《慢性阻塞性肺疾病》課件
- 家校共育 靜待花開 課件高二下學期學考動員家長會
- 2025陜西氫能產業發展有限公司所屬單位招聘(101人)筆試參考題庫附帶答案詳解
- 2025安全生產月安全生產知識競賽題庫及答案(共1418題)
- 2024年內蒙古師范大學招聘事業編制人員考試真題
- 管道直飲水項目可行性研究報告
評論
0/150
提交評論