具有自動樂曲演奏功能的電子琴設(shè)計(jì)方案_第1頁
具有自動樂曲演奏功能的電子琴設(shè)計(jì)方案_第2頁
具有自動樂曲演奏功能的電子琴設(shè)計(jì)方案_第3頁
具有自動樂曲演奏功能的電子琴設(shè)計(jì)方案_第4頁
具有自動樂曲演奏功能的電子琴設(shè)計(jì)方案_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

具有自動樂曲演奏功能的電子琴設(shè)計(jì)先給出設(shè)計(jì)結(jié)果視頻鏈接:具有自動樂曲演奏功能的電子琴-視頻實(shí)錄2012年下學(xué)期做的EDA動樂曲演奏功能的電子琴”的FPGA設(shè)計(jì)原理與方法,使用了ROM存儲音符和節(jié)拍,矩陣鍵盤掌握整個系統(tǒng)。一、選題目的電子設(shè)計(jì)自動化,簡稱ED〔ElectronicDesignAutomatio,進(jìn)展快速,應(yīng)用范圍日益擴(kuò)大。它以計(jì)算機(jī)為工具,設(shè)計(jì)者在EDA軟件平臺上,用硬件描述語言VHDL完成設(shè)計(jì)文件,然后由計(jì)算機(jī)自動地完成規(guī)律編譯、化簡、分割、綜合、優(yōu)化、布局、布線和仿EDA技術(shù)的消滅,極大地提高了電路設(shè)計(jì)的效率和可操作性,減輕了設(shè)計(jì)者的勞動強(qiáng)度。本文應(yīng)用VHDLQuartusⅡ8.0ROM音符,此外,還具有電子琴彈奏的功能。選題穎、有用,趣味性、綜合性較強(qiáng)。二、設(shè)計(jì)目標(biāo)承受44矩陣鍵盤作為:電子琴按鍵,高、中、低音選擇鍵,自動播放和電子琴彈奏功能選擇鍵,樂曲選擇鍵。使用ROM存儲樂曲,到達(dá)只要在其中存儲樂曲音符節(jié)拍的信息即可自動播放的目的,對樂曲的編碼要簡潔易用??勺詣硬シ拧妒郎现挥袐寢尯梅诺墓δ?。實(shí)時顯示正在播放的音符。設(shè)計(jì)要具有模塊化,層次化的特點(diǎn)。波形仿真時承受時序仿真,以更加貼近實(shí)際,使系統(tǒng)的實(shí)際效果到達(dá)最正確。三、實(shí)現(xiàn)方案原理框圖具有自動樂曲演奏功能的電子琴系統(tǒng)的原理構(gòu)造框圖如下:1硬件系統(tǒng)構(gòu)造框圖2軟件系統(tǒng)構(gòu)造框圖3樂曲自動播放模塊構(gòu)造框圖4樂曲彈奏模塊構(gòu)造框圖設(shè)計(jì)流程圖具有自動樂曲演奏功能的電子琴系統(tǒng)的VHDL程序設(shè)計(jì)流程圖如以下圖5:5程序設(shè)計(jì)流程圖四、設(shè)計(jì)過程音樂根底學(xué)問簡譜應(yīng)當(dāng)說是一種比較簡潔易學(xué)的音樂記譜法。它的最大好處是僅用7個阿拉伯?dāng)?shù)字 1234567,就能將萬千變化的音樂曲子記錄并表示出來,并能使人很快記住是似乎只有在中國得到格外廣泛的傳播。樂音的特性:它由四個方面組成:音高、音值、音量、音色。音高:由物體在肯定的時間內(nèi)震驚的次數(shù)打算,震驚次數(shù)多,因則高,反之,則低。音值:即音的長短,是由音的連續(xù)時間的不同而打算的,音的連續(xù)時間長,音則長,反之,則短。音量:即音的強(qiáng)與弱,由震幅的大小打算,震幅大,音則強(qiáng),反之,則弱。音色:有發(fā)音體的性質(zhì)打算,發(fā)音體的外形及泛音的多少打算音色的不同,例如,小提琴、鋼琴等各種樂器的音色都是不同的,在合奏時,人們可清楚地識別。樂音體系:在音樂使用中有固定音高的音的總和叫樂音體系。音級:樂音體系中的各音叫音級,音級有根本音級與變化音級兩種。根本音級:在音樂中常常使用的七個具有獨(dú)立名稱的音叫根本音級。根本音級的名稱用字母或唱名兩種方式來標(biāo)記。音名:用C、D、E、F、G、A、B1,2,3,4,5,6,7唱名:用do、re、mi、fa、sol、la、si作為音級名稱的叫唱名。音符:用以記錄音的長短凹凸的符號叫音符〔以符頭在譜表上的位置來表示音的凹凸,以外形表示音的長短,音符有符頭、符干、符尾三局部或其中某些局部組成,而在1234567(_)或橫(—)來表示音的長短。時間。

下面重點(diǎn)介紹組成音樂的兩個最根本的要素:每個音符發(fā)音的頻率及其持續(xù)的音符和頻率的關(guān)系2122。另2122。另6440Hz7134171音名 頻率〔Hz〕音名 頻率〔Hz〕音名 頻率〔Hz〕音名 頻率〔Hz〕音名 頻率〔Hz〕低音1261.6中音1523.3高音11046.5低音2293.7中音2587.3高音21174.7低音3329.6中音3659.3高音31318.5低音4349.2中音4698.5高音41396.9低音5392中音5784高音51568低音6440中音6880高音61760低音7493.9中音7987.8高音71975.5音符的長短表示音樂的長短需要有一個相對固定的時間概念。簡譜里將音符分為全音符、二分音符、四分音符、十六分音符、三十二分音符等,如下表2。在這幾個音符里面最重要對時間度量單位。一拍的長度沒有限制,可以是1秒也可以是2一點(diǎn)會將音符長度增加一半。音符名稱全音符音符名稱全音符二分音符四分音符記法時值55—5二拍一拍八分音符半拍編碼16842十六分音符四分之一拍1十六分音符四分之一拍1三十二分音符八分之一拍頂層文件承受原理圖輸入法設(shè)計(jì),其原理圖如下:6music_player各模塊的設(shè)計(jì)如下。音符的編碼及音樂的存儲音符的編碼音名 編碼音名 編碼音名 編碼休止符的編碼為:023音名 編碼音名 編碼音名 編碼低音11111高音121低音21222高音222低音31333高音323低音41444高音424低音51555高音525低音61666高音626低音71777高音727音樂的存儲以十進(jìn)制將音樂分別存儲于note_rom和tick_rom后者為音符的長度,下面給出《世上只有媽媽好》的存儲過程。在QuartusII主窗體中選Tools—MegaWizardPluge-InManager…,彈出如下對話框,單擊Next圖7 MegaWizardPluge-InManager第一頁按以下圖選擇并填入文件名,點(diǎn)擊Next。圖8 MegaWizardPluge-InManager其次頁1632之間,所以q51024以下圖所示圖9 數(shù)據(jù)和地址寬度的選擇在以下圖中取消“q’outputport”前面的勾,點(diǎn)擊Next圖10 存放器信號的選擇在以下圖中,按圖示選擇并填入note_rom.mif,點(diǎn)擊Next連續(xù)。圖11 指明ROM初始化文件圖12完成ROM建立ROM初始化ROM.mif.hex.mif編輯器編輯,也可以用QuartusIIROM512*8ROM.mifFile|New,在對話框中選擇MemoryInitializationFile512813〔a〕所示,點(diǎn)OK.mif13〔b〕所示,然后可在其中輸入數(shù)據(jù),默認(rèn)為十進(jìn)制?!瞐〕ROM的初始化設(shè)置 〔b〕初始化的空的ROM文件圖13ROM初始化ROM以《世上只有媽媽好》為例,其簡譜如以下圖所示:依據(jù)前述對音符的編碼規(guī)章,可知第一個音為中音6,時值為拍,存儲為依據(jù)前述對音符的編碼規(guī)章,可知第一個音為中音6,時值為拍,存儲為66;再如其次個音符為中音5,時值拍,存儲為566;再如其次個音符為中音5,時值拍,存儲為52;又如第五個音符為高音5,時〔a〕note_rom.mif文件 〔b〕tick_rom.mif文件15世上只有媽媽好簡譜在ROM其它兩首樂曲的存儲與此類似note_rom.mif和tick_rom.mif文件中即可。3.鍵盤掌握模塊掃描及編碼矩陣式鍵盤是一種常見的輸入裝置16171~71~7H、M、LAP〔AutoPlay〕為自動播放選擇鍵,EO〔ElectronicOrgan〕為電子琴彈奏選擇鍵,Song圖16共陽極矩陣式鍵盤示意圖 圖17本系統(tǒng)矩陣鍵盤功能鍵示意下面介紹掃描原理,實(shí)行逐行掃描法,以0111、1011、1101、1110的挨次依1011時,110133列的鍵“7”被按下,其它按鍵依次類推,下表44*44按鍵掃描信息比照表列列行0111101111011110111101111101151101AP1110-26EO-374HSongM-L無無無無對該矩陣鍵盤按從上到下、從左至右的順序編碼,依次為:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,161KHz1MHz消抖5ms~10ms。這是一個很重要的時間參數(shù),在很多場合都要用到。18按鍵抖動常見的消抖方法有采樣型防抖微分電路、D型觸發(fā)器、移位存放器、計(jì)數(shù)器,結(jié)合各消抖法的特點(diǎn),本文承受計(jì)數(shù)器法。919鍵盤掌握模塊鍵盤掌握模塊〔Key_Control.vhd〕20所示:20為便利仿真及觀看仿真結(jié)果,仿真時承受周期為100ns的clk,且將Key_Control.vhd中的獲得clk_kb信號的程序中的ifcnt=499the〔斜體注釋局部〕改為ifcnt=10then,再將延時近程中clk_kb改為clk,count3然后對KBCol[0..3〔如圖,即可得到上圖所示結(jié)果?!癆P”鍵,他不在音符Key_Note0play,sel1“5”Key_Note為5;第三個圈,對應(yīng)“EO”鍵,他不在音符范圍內(nèi),故Key_Note0play,sel0,表示選擇電子琴彈奏;第四個圈,對應(yīng)“Song”鍵,產(chǎn)生一個脈沖,認(rèn)真分析還應(yīng)當(dāng)覺察由于消抖,使輸出遲了1個掃描時鐘0.001,但對本系統(tǒng)無影響。樂曲自動播放模塊321所示,包含以下模塊:ROM數(shù)據(jù)讀取掌握、音符ROM、節(jié)拍ROM2221樂曲自動播放模塊符號22樂曲自動播放模塊該分模塊從tick_rom中讀取節(jié)拍,掌握讀取該分模塊從tick_rom中讀取節(jié)拍,掌握讀取ROM計(jì)數(shù)器實(shí)現(xiàn),具體參見源程序。下:23樂曲自動播放模塊仿真波形為便利仿真,將counter_rom.vhd源程序中的CLK_FREQ真時的時鐘信號頻率100Hz,三首樂曲的前幾個音符如右圖所示,第一首的起始音符為中音10,接著為1,2,時值分別為二分之一拍、四分之一拍、四分之一拍。比照仿真結(jié)果,可知仿真結(jié)果正確,程序正確。24三首樂曲的第一句簡譜電子琴模塊此模塊主要完成將上一級鍵盤掌握模塊送來的音符按鍵進(jìn)展譯碼輸出11122key8,說23,26;其次個圈中key12,說明下面的音符將6??梢姡绦蛘_無誤。圖25 電子琴模塊26電子琴模塊仿真波形音符發(fā)聲及顯示模塊八段數(shù)碼管,但本設(shè)計(jì)只需七段〕上顯示音符,且有凹凸音指示燈。元件符號如右圖。七段數(shù)碼管的原理及使用很簡潔再熬述!八段數(shù)碼管,但本設(shè)計(jì)只需七段〕上顯示音符,且有凹凸音指示燈。元件符號如右圖。七段數(shù)碼管的原理及使用很簡潔再熬述!本文設(shè)計(jì)的具有自動樂曲演奏功能的電子1MHz1應(yīng)的音符的分頻系數(shù)divider_mo,如下表5:音名 分頻系數(shù)音名 分頻系數(shù)音名 分頻系數(shù)表音名 分頻系數(shù)音名 分頻系數(shù)音名 分頻系數(shù)低音13283中音11911高音1956低音23405中音21703高音2851低音33034中音31517高音3758低音42863中音41432高音4716低音52551中音51276高音5638低音62273中音61137高音6568低音72025中音71012高音7506Aud_Pro_Dis.vhd源程序中的divider_mod666對應(yīng)的divider_mod4080、20,clk100ns,分別給note_code6,16,2666、及高音6。276,但凹凸音指示燈的值不同,pitch指示燈,pitch[1]為高位,且“00”代表中音,“01”代表低音,“10”代表高音??梢姺抡娼Y(jié)果及程序均正確。五二輸入或門由于本系統(tǒng)有自動播放和電子琴彈奏兩個模塊組成,每次只能其中一個有效,較簡潔,在此僅給出仿真波形,如下。28五、遇到問題及解決方法矩陣鍵盤的掃描是一個重點(diǎn)和難點(diǎn),程序?qū)懞弥跣Ч⒉槐ж?fù),認(rèn)真分析后,覺察是沒有消抖造成的,后來參加了消抖的進(jìn)程,效果得到改善。電子琴彈奏模塊的實(shí)現(xiàn)過程中也消滅了一個問題:高、中、低音的選擇不起作用,此模塊僅有一個進(jìn)程,如下:process(key,play,EN)variablesign:integerrange0to2:=0;beginifplay=”0”andEN=”0”thenifkey=12thensign:=0;--midelsifkey=16thensign:=1;--lowelsifkey=8thensign:=2;--highendif;ifkey>=1andkey<=7then--1~7note_code<=key+10*sign;elseendif;endprocess;

endif;note_code<=0;sign:=0;

elseendif;

note_code<=0;--stop出來29未參加clk解決方法:給該模塊參加時鐘驅(qū)動,用上升沿觸發(fā)大事,結(jié)果得到了想要的結(jié)果,如以下圖,程序見該模塊源代碼。30參加clk六、實(shí)現(xiàn)結(jié)果撥動開關(guān),使start為1,此時數(shù)碼管顯示短橫,揚(yáng)聲器不發(fā)聲;按下矩陣鍵盤的“AP”鍵,系統(tǒng)開頭自動播放樂曲,挨次按下歌曲選擇鍵:“Song”,自動切換到下一首播放;按下“EO”鍵,揚(yáng)聲器不發(fā)聲,按數(shù)字鍵1~7,發(fā)出do~si的音符;按下“H”、“M”、“L”鍵,可切換高、中、低音;撥動開關(guān),使start為0,此時數(shù)碼管顯示短橫,揚(yáng)聲器不發(fā)聲;合性、趣味性!關(guān)閉、手動輸入音符再自動播放〔固然需將ROM換成RAM〕等功能。的熱忱!七、編程調(diào)試具有自動演奏樂曲功能的電子琴系統(tǒng)的全部VHDL源代碼頂層文件music_player.bdf如下:31music_player.bdflibraryieee;libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityKey_Controlisport(clk,start:instd_logic;KBCol:instd_logic_vector(0to3);song:bufferstd_logic;play:outstd_logic;--1music_play;0:Elc_keyboard;sel:outstd_logic;--1:music_play;0:Elc_keyboard;Key_Note:bufferintegerrange0to16;KBRow:bufferstd_logic_vector(0to3));endentity;architecturecontrolofKey_Controlissignalclk_kb:std_logic;signalcnt:integerrange0to1000;signaltemp:STD_LOGIC_VECTOR(7downto0);signalstate:std_logic_vector(1downto0):=“00“;signalcount:std_logic_vector(1downto0):=“00“;signalkey:integerrange0to16;signalkeynum:integerrange0to16;signalTempKey:integerrange0to16;signalsong_chg:std_logic:=”0”;beginprocess(clk)--產(chǎn)生鍵盤掃描beginifrising_edge(clk)thenifstart=”1”thenifcnt=499then--仿真時改為ifcnt=10thenclk_kb<=notclk_kb;cnt<=0;endif;endprocess;

endif;

elseendif;

cnt<=cnt+1;process(clk_kb)beginifrising_edge(clk_kb)thenifstate=“11“thenstate<=“00“;endprocess;process(state)

endif;

elseendif;

state<=state+1;begincasestateisendcase;endprocess;

when“00“=>KBRow<=“1110“;when“01“=>KBRow<=“1101“;when“10“=>KBRow<=“1011“;when“11“=>KBRow<=“0111“;whenothers=>KBRow<=“1111“;temp<=KBRow&KBCol;process(clk_kb)beginifstart=”1”theniffalling_edge(clk_kb)thenifKBCol=“1111“thenifcount=“11“thenkey<=0;count<=“00“;else

elseendif;

count<=count+1;--count<=“00“;casetempisendif;

when“11101110“=>key<=16;when“11101101“=>key<=15;when“11101011“=>key<=14;when“11100111“=>key<=13;when“11011110“=>key<=12;when“11011101“=>key<=11;when“11011011“=>key<=10;when“11010111“=>key<=9;when“10111110“=>key<=8;when“10111101“=>key<=7;when“10111011“=>key<=6;when“10110111“=>key<=5;when“01111110“=>key<=4;when“01111101“=>key<=3;when“01111011“=>key<=2;when“01110111“=>key<=1;whenothers=>key<=0;endcase;endif;elsekey<=0;endif;endprocess;process(clk)variablecount:std_logic_vector(4downto0);--仿真時改為(1downto0)beginifrising_edge(clk)thenifkey/=TempKeythenTempKey<=key;count:=“00000“;--仿真時改為”00”else

ifcount=“11111“then--仿真時改為”11”keynum<=key;count:=“00000“;--仿真時改為”00”endif;endprocess;

endif;

elseendif;

count:=count+1;process(clk_kb)beginifstart=”1”thenif(rising_edge(clk_kb))thenif(keynum<9orkeynum=12orkeynum=16)thenKey_Note<=keynum;song<=”0”;else

Key_Note<=0;ifkeynum=11thensong<=”1”;--產(chǎn)生脈沖else

song<=”0”;if(keynum=9)thenplay<=”1”;sel<=”1”;elsif(keynum=10)thenplay<=”0”;sel<=”0”;endif;endif;elseplay<=”1”;sel<=”0”;

endif;

endif;Key_Note<=0;--stopsong<=”0”;endif;endprocess;endcontrol;librarylibraryieee;useieee.std_logic_1164.all;entityElectronic_keyboardisport(clk:instd_logic;play:instd_logic;EN:instd_logic;--0:Elc_keyboard;key:inintegerrange0to16;note_code:OUTintegerrange0to31);endentity;architectureElc_keyBoardofElectronic_keyboardisbeginprocess(key,play,EN,clk)variablesign:integerrange0to2:=0;beginifplay=”0”andEN=”0”thenif(rising_edge(clk))thenifkey=12thensign:=0;--midelsifkey=16thensign:=1;--lowelsifkey=8thensign:=2;--highendif;ifkey>=1andkey<=7then--1~7note_code<=key+10*sign;elseendif;elsenote_code<=0;sign:=0;endif;endprocess;

endif;

note_code<=0;--stopendElc_keyBoard;樂曲自動演奏模塊〔music_Play.bdf〕文件32music_Play.bdflibraryieee;uselibraryieee;useieee.std_logic_1164.all;entitycounter_romisport( tick_num :inintegerrange0to31;clk :instd_logic;song :instd_logic;);endentity;

play :instd_logic;EN :instd_logic;q :outintegerrange0to511architecturertlofcounter_romisconstantCLK_FREQ:integer:=1000000;--1MHzconstantSONG1_ADDR:integer:=7;-1constantSONG2_ADDR:integer:=80;-2constantSONG3_ADDR:integer:=184;-3constantSONG_LEN:integer:=500;signalSONG_ADDR:integerrange0to1000:=0;--樂曲存儲地址signalsong_chg:std_logic:=”0”;signalchg_ok:std_logic:=”0”;signalnum:integerrange0to2:=0;signalstart:std_logic:=”0”;--signalmeterbeginprocess(song,play,EN)beginif(start=”1”)thenif(song”eventandsong=”1”)thenifnum<2thenelseendif;

num<=num+1;num<=0;elseendif;

elseendif;casenumisendcase;num<=0;

song_chg<=”1”;when0=>SONG_ADDR<=SONG1_ADDR;--song1when1=>SONG_ADDR<=SONG2_ADDR;--song2when2=>SONG_ADDR<=SONG3_ADDR;--song3whenothers=>SONG_ADDR<=null;if(chg_ok=”1”)thensong_chg<=”0”;endif;endprocess;process(play,EN)beginstart<=playandEN;endprocess;---------ROMprocess(clk,start)variablecount :integerrange0toSONG_LEN;variablecnt :integerrange0to4*CLK_FREQ;beginif(start=”1”andcount<SONG_LEN)thenif(rising_edge(clk))thenifsong_chg=”1”then--ResetthecountertoSONG_ADDRcount:=SONG_ADDR;chg_ok<=”1”;cnt:=0;elseendif;

chg_ok<=”0”;if(cnt<(tick_num*CLK_FREQ)/4)thencnt:=cnt+1;endif;elsecount:=0;cnt:=0;endif;

elseendif;

cnt:=0;count:=count+1;--Outputthecurrentcountq<=count;endprocess;endrtl;note_romtick_rom2.2.2librarylibraryieee;useieee.std_logic_1164.all;entityAud_Pro_Disisport(clk:instd_logic;note_code:inintegerrange0to31;endentity;

pitch:outstd_logic_vector(1downto0);disp7:out std_logic_vector(6downto0);--digtaldisplaysound_out:outstd_logic);architecturebehavofAud_Pro_Disissignaldivider_mod:integerrange0to4096;signalcount:integerrange0to4096:=0;beginprocess(note_code) --divider_modbegincasenote_codeiswhen11=>divider_mod<=3822;pitch<=“01“;disp7<=“0110000“;--low1when12=>divider_mod<=3405;pitch<=“01“;disp7<=“1101101“;when13=>divider_mod<=3034;pitch<=“01“;disp7<=“1111001“;when14=>divider_mod<=2863;pitch<=“01“;disp7<=“0110011“;when15=>divider_mod<=2551;pitch<=“01“;disp7<=“1011011“;when16=>divider_mod<=2273;pitch<=“01“;disp7<=“1011111“;when17=>divider_mod<=2025;pitch<=“01“;disp7<=“1110000“;--low7when1=>divider_mod<=1911;pitch<=“00“;disp7<=“0110000“;--mid1when2=>divider_mod<=1703;pitch<=“00“;disp7<=“1101101“;when3=>divider_mod<=1517;pitch<=“00“;disp7<=“1111001“;when4=>divider_mod<=1432;pitch<=“00“;disp7<=“0110011“;when5=>divider_mod<=1276;pitch<=“00“;disp

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論