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

下載本文檔

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

文檔簡(jiǎn)介

1、具有自動(dòng)樂(lè)曲演奏功能的電子琴設(shè)計(jì)先給出設(shè)計(jì)結(jié)果視頻鏈接:具有自動(dòng)樂(lè)曲演奏功能的電子琴視頻實(shí)錄本文為本人于2012年下學(xué)期做的eda數(shù)字系統(tǒng)設(shè)計(jì),文章詳細(xì)介紹了“具有自動(dòng)樂(lè) 曲演奏功能的電子琴”的fpga設(shè)計(jì)原理與方法,使用了 rom存儲(chǔ)音符和節(jié)拍,矩陣鍵盤(pán) 控制整個(gè)系統(tǒng)。一、選題目的電子設(shè)計(jì)自動(dòng)化,簡(jiǎn)稱(chēng)eda ( electronic design automation ),發(fā)展迅速,應(yīng)用范圍 日益擴(kuò)大。它以計(jì)算機(jī)為工具,設(shè)計(jì)者在eda軟件平臺(tái)上,用硬件描述語(yǔ)言vhdl完成設(shè) 計(jì)文件,然后由計(jì)算機(jī)自動(dòng)地完成邏輯編譯、化簡(jiǎn)、分割、綜合、優(yōu)化、布局、布線(xiàn)和仿真, 直至對(duì)于特定目標(biāo)芯片的適配編譯、邏

2、輯映射和編程下載等工作。eda技術(shù)的出現(xiàn),極大 地提高了電路設(shè)計(jì)的效率和可操作性,減輕了設(shè)計(jì)者的勞動(dòng)強(qiáng)度。本文應(yīng)用vhdl硬件描述語(yǔ)言,以quartuslls.0為開(kāi)發(fā)工具設(shè)計(jì)了一個(gè)具有自動(dòng)演奏樂(lè) 曲功能的電子琴系統(tǒng),它能將預(yù)先存儲(chǔ)在rom中的多首樂(lè)曲自動(dòng)播放出來(lái),并同時(shí)顯示音 符,此外,還具有電子琴?gòu)椬嗟墓δ?。選題新穎、實(shí)用,趣味性、綜合性較強(qiáng)。二、設(shè)計(jì)目標(biāo)1. 采用44矩陣鍵盤(pán)作為:電子琴按鍵,高、中、低音選擇鍵,自動(dòng)播放和電子琴?gòu)椬喙δ?選擇鍵,樂(lè)曲選擇鍵。2. 使用rom存儲(chǔ)樂(lè)曲,達(dá)到只要在其中存儲(chǔ)樂(lè)曲音符節(jié)拍的信息即可自動(dòng)播放的目的, 對(duì)樂(lè)曲的編碼要簡(jiǎn)單易用。3. 可自動(dòng)播放世上只有

3、媽媽好、長(zhǎng)亭送別、十年三首歌曲,帶選歌和自動(dòng)循環(huán)播 放的功能。4. 實(shí)時(shí)顯示正在播放的音符。5. 設(shè)計(jì)要具有模塊化,層次化的特點(diǎn)。6. 波形仿真時(shí)采用時(shí)序仿真,以更加貼近實(shí)際,使系統(tǒng)的實(shí)際效果達(dá)到最佳。三、實(shí)現(xiàn)方案1.原理框圖數(shù)碼管具有自動(dòng)樂(lè)曲演奏功能的電子琴系統(tǒng)的原理結(jié)構(gòu)框圖如下:4x4矩陣 鍵盤(pán)圖1硬件系統(tǒng)結(jié)構(gòu)框圖音符碼音符發(fā) 聲及顯 示模塊鍵盤(pán)碼=>圖2軟件系統(tǒng)結(jié)構(gòu)框圖節(jié)拍時(shí)鐘信號(hào)樂(lè)曲選擇使能*使能2m據(jù)取制ro數(shù)讀控誥圖3樂(lè)曲自動(dòng)播放模塊結(jié)構(gòu)框圖吋鐘信予使能.掃抖模 盤(pán)消碼 鍵描編塊鍵盤(pán)碼 =>使能1使能2圖4樂(lè)曲彈奏模塊結(jié)構(gòu)框圖2.設(shè)計(jì)流程圖節(jié)拍rom存儲(chǔ)模塊音符rom存

4、儲(chǔ)模塊鍵碼音模轉(zhuǎn)符塊音符碼音符發(fā) 聲及顯 示模塊音符碼、=>音頻輸出音符發(fā) 聲及顯 示模塊音頻輸出具有自動(dòng)樂(lè)曲演奏功能的電子琴系統(tǒng)的vhdl程序設(shè)計(jì)流程圖如下圖5 :圖5程序設(shè)計(jì)流程圖四、設(shè)計(jì)過(guò)程1.音樂(lè)基礎(chǔ)知識(shí)簡(jiǎn)譜應(yīng)該說(shuō)是一種比較簡(jiǎn)單易學(xué)的音樂(lè)記譜法。它的最大好處是僅用7個(gè)阿拉伯?dāng)?shù)字 -1234567,就能將萬(wàn)千變化的音樂(lè)曲子記錄并表示出來(lái),并能使人很快記住而終身不忘; 同時(shí)涉及其他的音樂(lè)元素也基本可以正確顯示。簡(jiǎn)譜雖然不是出現(xiàn)在中國(guó),但是好像只有在 中國(guó)得到非常廣泛的傳播。樂(lè)音的特性:它由四個(gè)方面組成:音高、音值、音量、音色。音高:由物體在一定的時(shí)間內(nèi)震動(dòng)的次數(shù)決定,震動(dòng)次數(shù)多,因則

5、高,反之,則低。音值:即音的長(zhǎng)短,是由音的延續(xù)時(shí)間的不同而決定的,音的延續(xù)時(shí)間長(zhǎng),音則長(zhǎng), 反之,則短。音量:即音的強(qiáng)與弱,由震幅的大小決定,震幅大,音則強(qiáng),反之,則弱。音色:有發(fā)音體的性質(zhì)決定,發(fā)音體的形狀及泛音的多少?zèng)Q定音色的不同,例如,小 提琴、鋼琴等各種樂(lè)器的音色都是不同的,在合奏時(shí),人們可清楚地辨認(rèn)。樂(lè)音體系:在音樂(lè)使用中有固定音高的音的總和叫樂(lè)音體系。音級(jí):樂(lè)音體系中的各音叫音級(jí),音級(jí)有基本音級(jí)與變化音級(jí)兩種?;疽艏?jí):在音樂(lè)中經(jīng)常使用的七個(gè)具有獨(dú)立名稱(chēng)的音叫基本音級(jí)?;疽艏?jí)的名稱(chēng) 用字母或唱名兩種方式來(lái)標(biāo)記。音名:用c、d、e、f、g、a、b來(lái)標(biāo)記基本音級(jí)的叫音名,它表示一定的

6、音高,簡(jiǎn) 譜中用1,2,3,4,5,6,7來(lái)標(biāo)記。唱名:用do、re、mi、fa、sol、la、si作為音級(jí)名稱(chēng)的叫唱名。音符:用以記錄音的長(zhǎng)短高低的符號(hào)叫音符(以符頭在譜表上的位置來(lái)表示音的高低, 以形狀表示音的長(zhǎng)短,音符有符頭、符干、符尾三部分或其中某些部分組成,而在簡(jiǎn)譜中以 1 2 34567或其上下加點(diǎn)來(lái)表示不同音高,以短下劃線(xiàn)(或橫(一)來(lái)表示音的長(zhǎng)短)下面重點(diǎn)介紹組成音樂(lè)的兩個(gè)最基本的要素:每個(gè)音符發(fā)音的頻率及其持續(xù)的時(shí)間。1.1音符和頻率的關(guān)系樂(lè)曲的十二平均律規(guī)定:每2個(gè)八度音(如簡(jiǎn)譜中的中音1與高音1 )之間的頻率相 差一倍。在2個(gè)八度音之間,又可分為12個(gè)半音,每2個(gè)半音的頻

7、率比為專(zhuān)。另外,簡(jiǎn) 譜中的低音6的頻率為440hz ,音符7到1之間、3到4之間為半音,其余為全音。由此 可計(jì)算出簡(jiǎn)譜中從低音1至高音7之間每個(gè)音符的頻率,如下表1所示: 表1簡(jiǎn)譜中音符與頻率的關(guān)系音名頻率(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.51.2音符的長(zhǎng)短表示

8、音樂(lè)的長(zhǎng)短需要有一個(gè)相對(duì)固定的時(shí)間概念。簡(jiǎn)譜里將音符分為全音符、二分音 符、四分音符、十六分音符、三十二分音符等,如下表2。在這幾個(gè)音符里面最重要的是四 分音符,它是一個(gè)基本參照度量長(zhǎng)度,即四分音符為一拍。這里一拍的概念是一個(gè)相對(duì)時(shí)間 度量單位。一拍的長(zhǎng)度沒(méi)有限制,可以是1秒 也可以是2秒或半秒。假如一拍是一秒的長(zhǎng) 度,那么二拍就是兩秒;一拍定為半秒的話(huà),兩拍就是一秒的長(zhǎng)度。一旦這個(gè)基礎(chǔ)的一拍定 下來(lái),那么比一拍長(zhǎng)或短的符號(hào)就相對(duì)容易了。正如五線(xiàn)譜的附點(diǎn)一樣,數(shù)字后方加一點(diǎn)會(huì) 將音符長(zhǎng)度增加一半。表2簡(jiǎn)譜中音符長(zhǎng)度音符名稱(chēng)記法時(shí)值編碼全音符5四拍16二分音符5 二拍8四分音符5拍4八分音符半拍

9、2十六分音符四分之一拍1三十二分音符八分之一拍2. vhdl程序設(shè)計(jì)2.1頂層文件采用原理圖輸入法設(shè)計(jì),其原理圖如下:圖 6 music_player 原理圖各模塊的設(shè)計(jì)如下。2.2音符的編碼及音樂(lè)的存儲(chǔ)2.2.1音符的編碼休止符的編碼為:0 ;音符長(zhǎng)度的編碼見(jiàn)表2o音名的編碼如下表3所示:音名編碼音名編碼音名編碼低音111中音11吉立a 冋曰721低音212中音22冋曰n22低音3 43中音33高音323低音414中音44高音424低音515中音55*= z. c 冋曰s25低音616中音66高音626低音717中音77=t3±. "7 冋曰/27表3音名的編碼2.2.2

10、音樂(lè)的存儲(chǔ)以十進(jìn)制將音樂(lè)分別存儲(chǔ)于note_rom和tick_rom兩個(gè)模塊中,前者為音符,后者為 音符的長(zhǎng)度,下面給出世上只有媽媽好的存儲(chǔ)過(guò)程。在quartus ii主窗體中選擇 toolsmegawizard pluge-ln manager.,彈出如下對(duì)話(huà)框,單擊 next 繼續(xù)。megawizard plug-in manager page 1耳the megawizard plug in manager helps you create or modify design files that contain custom variations of megafunctions.whi

11、ch action do you want to petfoim?g create a new custom megafunction variationedit an existing custom megafunction variationcopy an existing custom megafunction vaiiation< bad | 電| xh |copyright ?1991 -2008 altera cocpocationcancel圖 7 megawizard pluge-ln manager 第一頁(yè) 按下圖選擇并填入文件名,點(diǎn)擊nextomega wizard

12、plug-in manager page 2axwhich megafunction would you like to customize? select a megafunction from the list below 剛 installed pluo ln,altera sopc builder arithmeticcommunicationsdsp gateswhich device family will you be using?i cyclone ii(±) fii i/oe interfacese j tag-accessible exte n$ion$b 心 m

13、emory compilercamfifofifo partitioner 1 1 ' 卩八 flash memory ram initializerram: 1-port ram: 2-port ram: 3-portwhich type of output hie do you want to create?c ahdl2 vhdlveiilog hdlwhat name do you want for the output fde?browse.ic: mj $er$liud esktop 電子孚 susijplayef 5oteom! ryi rui h0丨rrg! hirbr

14、om: 1 port廠(chǎng) return to this page for another create operationnote: to compile a project $ucce$mly in the quartus ii software, your design ties must be in the project directory, in the global user libraries specified in the options dialog box (tools menu), or a user bbcary specified in the user librar

15、ies page of the settings dialog box (assignments menu).your current user library directories are:目 rom: 2 port zj shift register (ram based) e storage回圈 ip megastorecancel圖 8 megawizard pluge-ln manager 第二頁(yè)由于音符編在16到32之間,所以q選為5位即可,容量選為1024個(gè)字如下圖所note rom;ddress90megawizard plug-in manager - rom: 1-por

16、t page 3 of 7o 回 | n4rom: 1-portaboutdocumentation .m parameter settings| general|re<js/cicens/adrsmemlnit|currently selected "vice famiy:cydonens? match project/defejtblock type autowhat doddng method would you bke to use? <?>sngledodcresource usage2m4kcaned <back next > rntsho

17、dual dock: use separate rput1 and 'output' docks在下圖中取消©output port”前面的勾,點(diǎn)擊next繼續(xù)。rom: 1-portt parameter eda 巨summarysettings.dockblock type autogeneral、|regs/clkens/adrs| memlnit address9 06p0w2m ro e ncreate one dodc enable signal for each dock signal. al regrstered ports are controled

18、 by the enable signai(s). create a byte enable portwhat is the width of a byte for byte enable?which ports should be regtered? data* input port 0 address* nput portcreate an ,adr, asynchronous dear for the registered ports7 bitsaboutmore options more options resource usagecaned | <ba& | *xt &

19、gt; | &ish |2m4k在下圖中,按圖示選擇并填入note_rom.mif ,點(diǎn)擊next繼續(xù)。rom: 1-portqpcumen taboom parameter tl h)ai i generalregs/dkens/adrsmem initnote rom8ddress(9.o 占do you want to spedfy the initial content of the memory?o no, leave it blank imbabze memory content data to xx.x on power-up ri smulabonstock type

20、autoyes, use this file for the memory content data(you can use a hexadedmal (intel-format) fde .hex or a memory initelization fic .mif)the inibal content file should conform to which port's dnensions?noneallow in-system memory content editor to capture and update content ndependentiy of the syst

21、em dockthe instance id1 of this rom is:resource usage2m4kcancel <back next > finish|t summaryrom: 1-portnote rom;(address【9.obbck typ* autoq4.0ltum on the ffes you wish to generate. a gray checkmark indicates a file that is automaticaly generated and a red checkmark indicates an optional file.

22、 ckck finish to generate the selected fies. the state of each checkbox is maintdined in subsequent megawizard plug-in manager sessions.the mega wizard plug-in manager creates the selected files in the following drectory:uaersmw desktop 噸 子 gvnusc rayerfie0" noleom vhd note.rorriinc0 noterom cmp

23、3 note.rom bdp note_rom_in$t.vhdd note_rom_waveforms, html 匚 note_rom_ wavex. ipgdescriptionvariation fifeahdl include filevhdl component declaration file quartus ii symbol file instantiation template file sample waveforms in summary sample waveform file($)resource usage 2m4kcaned| <back |岀xt>

24、 |finish圖12完成rom的定制2.2.3建立rom初始化文件初始化rom的數(shù)據(jù)文件有.mif格式和.hex格式,這里采用.mif格式,可以用文本編輯 器編輯,也可以用quartus ii自帶的功能產(chǎn)生rom數(shù)據(jù)文件。定制一個(gè)512*8的rom的初始化.mif文件可按下列步驟進(jìn)行:選擇菜單file | new ,在對(duì)話(huà)框中選擇memory initialization file ,然后輸入512和8 ,如下圖13(a)所示,點(diǎn)擊ok隨即打開(kāi)mif文件,如下圖13 ( b )所示,然后可在其中輸入數(shù)據(jù),默認(rèn)為十進(jìn)制。addr丄2丄5刑170h000000080000000016000000

25、0024000000003200000000400 lj0000 10004800000000560000000064000000007200000000(a ) rom的初始化設(shè)置(b )初始化的空的rom文件圖13 rom初始化2.2.4在rom中存儲(chǔ)音樂(lè)以世上只有媽媽好為例,其簡(jiǎn)譜如下圖所示:世上只有媽媽好形片世上只有媽媽好主獨(dú)歌離ci田詞古韋“諂56媽螞 1«均 5*有3只只5-上上6世世341沒(méi)23子干5 15孩6-的的5嗎蚪1盤(pán)23-ffff6-的的5-hh5 ish5*t.h-.6-不豊12- s3- aa5-pt圖14世上只有媽媽好簡(jiǎn)譜1-根據(jù)前述對(duì)音符的編碼規(guī)則,可

26、知第一個(gè)音為中音6 ,時(shí)值為2拍,存儲(chǔ)為6和6 ;再如第二個(gè)音符為中音5 ,時(shí)值2拍,存儲(chǔ)為5和2 ;又如第五個(gè)音符為高音5 ,時(shí)值1拍, 存儲(chǔ)為21和4o依此類(lèi)推,可將整首樂(lè)曲存儲(chǔ)如下:addr0 | *1 | *2 | *3 i m5 | % |0100000008653521656163565321162453202350325632153240116115653s48216563565563211653226435s6321s723211611500 (a ) note_rom.mif 文件addr| 7 | “23“5*670 pi10101018624442281642242222

27、2422806240322262862240222862444842284224s622222284642422628672221222822(b ) tick_rom.mif 文件圖15世上只有媽媽好簡(jiǎn)譜在rom中的存儲(chǔ) 其它兩首樂(lè)曲的存儲(chǔ)與此類(lèi)似 且存儲(chǔ)在同一個(gè)note_rom.mif和tick_rom.mif文件中即可。3鍵盤(pán)控制模塊3.1掃描及編碼矩陣式鍵盤(pán)是一種常見(jiàn)的輸入裝置,根據(jù)其電路連接有共陰極和共陽(yáng)極兩種連接方 式,可以采用逐行或逐列掃描法獲得按鍵值。本文根據(jù)實(shí)驗(yàn)室提供的共陽(yáng)極矩陣鍵盤(pán)設(shè)計(jì), 其示意圖如圖16所示,定義各功能鍵如下圖仃所示,其中17對(duì)應(yīng)簡(jiǎn)譜的17音符,h、 m、

28、l分別為高、中、低音選擇鍵auto play )為自動(dòng)播放選擇鍵,e0( electronic organ )為電子琴?gòu)椬噙x擇鍵,song為自動(dòng)播放時(shí)的歌曲選擇鍵,三個(gè)短“”代表休止符。vcc行1行2行3行4yyyyyyy丫丫丫xyyy 列1列2列3列3ooo®圖16共陽(yáng)極矩陣式鍵盤(pán)示意圖圖17本系統(tǒng)矩陣鍵盤(pán)功能鍵示意下面介紹掃描原理,采取逐行掃描法,以0111. 1011. 1101. 1x0的順序依次掃 描,然后讀取列引腳的電平信號(hào)即可判斷哪個(gè)按鍵按下。例如,當(dāng)掃描信號(hào)為1011時(shí),表 示在掃描第二行,若列讀出的電平信號(hào)為1101 ,則可知第3列的鍵被按下,即第二行第3 列的鍵“

29、7”被按下,其它按鍵依次類(lèi)推,下表4中列出了 04矩陣鍵盤(pán)掃描時(shí)的情況表4按鍵掃描信息對(duì)照表列行0111101111011110111101111234無(wú)1011567h無(wú)1101apeosongm無(wú)1110l無(wú)對(duì)該矩陣鍵盤(pán)按從上到下、從左至右的順序編碼,依次為1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16。掃描時(shí),選取的掃描頻率為1khz ,由1mhz分頻得到,具體見(jiàn)源程序。3.2消抖通常的按鍵所用開(kāi)關(guān)為機(jī)械彈性開(kāi)關(guān),當(dāng)機(jī)械觸點(diǎn)斷開(kāi)、閉合時(shí),由于機(jī)械觸點(diǎn)的彈性 作用,一個(gè)按鍵開(kāi)關(guān)在閉合時(shí)不會(huì)馬上穩(wěn)定地接通,在斷開(kāi)時(shí)也不會(huì)一下子斷開(kāi)。因而在閉 合及斷開(kāi)的瞬間均伴隨

30、有一連串的抖動(dòng),如右圖。抖動(dòng)時(shí)間的長(zhǎng)短由按鍵的機(jī)械特性決定, 一般為5ms 10ms。這是一個(gè)很重要的時(shí)間參數(shù),在很多場(chǎng)合都要用到。圖18按鍵抖動(dòng)常見(jiàn)的消抖方法有采樣型防抖微分電路、d型觸發(fā)器、移位寄存器、計(jì)數(shù)器,結(jié)合各消抖法的特點(diǎn),本文采用計(jì)數(shù)器法。3.3鍵盤(pán)控制模塊如右圖9所示圖19鍵盤(pán)控制模塊圖20鍵盤(pán)控制模塊仿真波形為方便仿真及觀察仿真結(jié)果,仿真時(shí)采用周期為100ns的elk,且將key.control.vhd 中的獲得clk_kb信號(hào)的程序中的if cnt=499 then ,(即具體見(jiàn)源程序中斜體注釋部分)改為 if cnt=10 then ,再將延時(shí)近程中clk_kb改為elk

31、, count改為3位,然后對(duì)kbcol0.3賦值 (如圖),即可得到上圖所示結(jié)果。注意觀察圖中圈圈的部分,可以看出,第一個(gè)圈,對(duì)應(yīng)“ap”鍵,他不在音符范圍內(nèi), 故key_note為0 ,且play , sei均為1 ,表示選擇自動(dòng)播放;第二個(gè)圈,對(duì)應(yīng)“5”鍵,在音 符范圍內(nèi),故key.note為5 ;第三個(gè)圈,對(duì)應(yīng)“e0”鍵,他不在音符范圍內(nèi),故key.note 為0 ,且play , sei均為0 ,表示選擇電子琴?gòu)椬?;第四個(gè)圈,對(duì)應(yīng)“song”鍵,產(chǎn)生一個(gè)脈沖,仔細(xì)分析還應(yīng)當(dāng)發(fā)現(xiàn)由于消抖,使輸出遲了 1個(gè)掃描時(shí)鐘(0.001s),但對(duì)本系統(tǒng)無(wú)影響。4. 樂(lè)曲自動(dòng)播放模塊此模塊的框圖如圖

32、3所示,元件符號(hào)如右圖下21所示,包含以下模塊:rom數(shù)據(jù)讀取控制.音符rom.節(jié)拍rom ,如下圖22所示:musicjilaydkqout(4.0)songaplayreni mtl圖21樂(lè)曲自動(dòng)播放模塊符號(hào)tick_romdockmst2 btock w aut0addressj8ii0l-q_圖22樂(lè)曲自動(dòng)播放模塊4.1 rom數(shù)據(jù)讀取控制該分模塊從tick_rom中讀取節(jié)拍,控制讀取rom數(shù)oounterromi <gk.num(4.0q(8. .0dk)1一playeninstl據(jù)的速度,從而實(shí)現(xiàn)音樂(lè)的節(jié)奏。該模塊通過(guò)可調(diào)模值計(jì)數(shù)器實(shí)現(xiàn),具體參見(jiàn)源程序。樂(lè)曲自動(dòng)播放模塊仿真波

33、形如下:i jh 哽 3 355 sscsssah8 389su7hsl3cs1|1ti|1ll3_(xuljojh 1 hi ihiiri m )bl i s: iblisli n 2)rn °rna圖23樂(lè)曲自動(dòng)播放模塊仿真波形為方便仿真,將counter_rom.vhd源程序中的clk_freq這一常量的值改為仿真時(shí) 的時(shí)鐘信號(hào)頻率100hz ,三首樂(lè)曲的前幾個(gè)音符如右圖所示,第一首的起始音符為中音6 , 時(shí)值一又二分之一拍;第二首的起始音符為中音5 ,時(shí)值為1拍;第三首的起始音符為0, 接著為1,2 ,時(shí)值分別為二分之一拍、四分之一拍、四分之一拍。對(duì)照仿真結(jié)果,可知仿真 結(jié)果

34、正確,程序正確。6 5 |3 5 | 1 6| 6 -世上只有螞螞 好.5 s 5 1 - i > 15 -長(zhǎng)亭外, 古適邊,0 / 13 3 2 3 1 2 1 7 6 0 蘭 |如果那兩個(gè)字沒(méi)有兪知豪木圖24三首樂(lè)曲的第一句簡(jiǎn)譜5. 電子琴模塊此模塊主要完成將上一級(jí)鍵盤(pán)控制模塊送來(lái)的音符按鍵進(jìn)行譯碼輸出,元件符號(hào)如右圖11所示。如圖12所示,使能有效后,開(kāi)始輸岀音符碼:2 ,第一個(gè)圈中key值為8 ,說(shuō)明下面的音符將轉(zhuǎn)為高音,如后面的23,26 ;第二個(gè)中key值為12,說(shuō)明下面的音符將轉(zhuǎn)為中音,如其后的6o可見(jiàn),程序正確無(wú)誤。ii bwtron cjccyboovd inot

35、71;woode(4.0ptoyenkey(4.orsts圖25電子琴模塊33 tty3圖26電子琴模塊仿真波形6. 音符發(fā)聲及顯示模塊該模塊主要將前端送來(lái)的音符碼轉(zhuǎn)換成相應(yīng)的聲音頻率以驅(qū)動(dòng)揚(yáng)聲器發(fā)聲,并在七段數(shù)碼管(實(shí)驗(yàn)室提供的為八段數(shù)碼管,但本設(shè)計(jì)只需七段)上顯示音符,且有高 低音指示燈。元件符號(hào)如右圖。七段數(shù)碼管的原理及使用很簡(jiǎn)單,在此不再熬述!本文設(shè)計(jì)的具有自動(dòng)樂(lè)曲演奏功能的電子琴系統(tǒng)選擇的基基準(zhǔn)頻率為1mhz,根據(jù)表1可計(jì)算出對(duì)應(yīng)的音符的分頻系數(shù)(dividejmod ),如下表5 :表5 1mhz下簡(jiǎn)譜中音符分頻數(shù)音名分頻系數(shù)音名分頻系數(shù)音名分頻系數(shù)低音1 3283中音11911吉

36、立a 冋曰7956低音23405中音21703古立q 冋曰n851低音33034中音31517高音3758低音42863中音41432高音4716低音52551中音51276*= z. c 冋曰s638低音62273中音61137高音6568低音72025中音71012=t3±. 7 冋曰/506為方便仿真,需將aud_pro_dis.vhd源程序中的divider_mod值改的小些,下面給 岀的仿真波形中,將中音6、低音6、及高音6對(duì)應(yīng)的divider_mod值分別改為40、80、 20 , elk周期為100ns ,分別給note_code賦以下值:6,16,26,即中音6、低音

37、6、及高音6o8a 900u ki 2 is 懺 w 2(3sts 29(8a 3c0c 知q 塚7!101 川 1jwuhl1imih】q叫皿 :5)(陽(yáng)i國(guó)i血廠(chǎng)肝)h 'pmil>:td011 1ipmmwmwmuuuuinjuuuuuuuinjmnhiihhmil圖27音符發(fā)聲及顯示模塊仿真波形由上圖可見(jiàn),數(shù)碼管顯示均為6,但高低音指示燈的值不同,pitch為高低音指示燈,pitch1為高位,且“00”代表中音,“01”代表低音,“10”代表高音??梢?jiàn)仿真結(jié)果及程序均正確。7. 五二輸入或門(mén)由于本系統(tǒng)有自動(dòng)播放和電子琴?gòu)椬鄡蓚€(gè)模塊組成,每次只能其中一個(gè)有效,但要 共用音符

38、發(fā)聲及顯示模塊,故需要將輸出的音符碼相或后送予后級(jí)處理,由于本模塊比較簡(jiǎn) 單,在此僅給出仿真波形,如下。洽1bn6111 si3c2s2c!33s2684u£550« 265 s!1廠(chǎng)ii.嚴(yán)31 i l<) x 1 i 0 j 3!)i 01 i 161 i 5 i nl )( w i m01 k 31 x 0 (31) t tol r mt t<l i to) r h i b51 31 k m til )制)(311 ) m t 19)j $) ) 3!) |2) l$l il-圖28五二輸入或門(mén)五、遇到問(wèn)題及解決方法1. 矩陣鍵盤(pán)的掃描是一個(gè)重點(diǎn)和難點(diǎn),程

39、序?qū)懞弥跣Ч⒉焕硐耄屑?xì)分析后, 發(fā)現(xiàn)是沒(méi)有消抖造成的,后來(lái)加入了消抖的進(jìn)程,效果得到改善。2. 電子琴?gòu)椬嗄K的實(shí)現(xiàn)過(guò)程中也出現(xiàn)了一個(gè)問(wèn)題:高、中、低音的選擇不起作用, 此模塊僅有一個(gè)進(jìn)程,如下:process(key,play,en)variable sign :integer range 0 to 2:=0;beginif play二'o' and en='o' thenif key=12 thensign:=0;-midelsif key=16 thensign :=1;-lowelsif key=8 thensign :=2;-highend if

40、;if key>=1 and key<=7 then-1 7no te_code<=key+10*sign;elsen ote_cod e<=0;-stopend if;end if;elseno te_code<=0;sign:=0;end if;end process;但仿真結(jié)果令人驚訝,只能輸出高音,仿真波形如下,錯(cuò)誤處已經(jīng)用叉號(hào)標(biāo)記出來(lái)i .6 t|i ii3.c2 t20 133 ti13h田對(duì)1 i«nm曲f3117r1廠(chǎng)曾 y;1(oi r/ x miu3j /)1xz</z4圖29未加入elk時(shí)鐘信號(hào)時(shí)的仿真結(jié)果解決辦法:給該模塊加

41、入時(shí)鐘驅(qū)動(dòng),用上升沿觸發(fā)事件,結(jié)果得到了想要的結(jié)果,如下圖, 程序見(jiàn)該模塊源代碼。j”6 7|1 i!3 f2120 1?oi2sm4 tx3s54 s« 2s6 i46 9k tit1dkjvuuvuuinwnnmuuvuinnjumnwinjuuinjuuinnjmnnnnnminnnjd(310(a j7x f此 x3【6】)ris ) 辿 j 01 j圖30加入elk時(shí)鐘信號(hào)時(shí)的仿真結(jié)果六、實(shí)現(xiàn)結(jié)果1. 撥動(dòng)開(kāi)關(guān),使start為1 ,此時(shí)數(shù)碼管顯示短橫,揚(yáng)聲器不發(fā)聲;2. 按下矩陣鍵盤(pán)的“ap”鍵,系統(tǒng)開(kāi)始自動(dòng)播放樂(lè)曲,順序:世上只有媽媽好、長(zhǎng)亭送別沢十年循環(huán)播放;3. 按下

42、歌曲選擇鍵:“song”,自動(dòng)切換到下一首播放;4. 按下“eo”鍵,揚(yáng)聲器不發(fā)聲,按數(shù)字鍵17 ,發(fā)出do-si的音符;5. 按下“h”、“m”、“l(fā)”鍵,可切換高、中、低音;6撥動(dòng)開(kāi)關(guān),使start為0,此時(shí)數(shù)碼管顯示短橫,揚(yáng)聲器不發(fā)聲;本文設(shè)計(jì)的具有自動(dòng)演奏樂(lè)曲功能的電子琴系統(tǒng),實(shí)現(xiàn)了所有設(shè)計(jì)目標(biāo),效果優(yōu)秀,極具綜合性、趣味性!此系統(tǒng)的功能還可以進(jìn)一步完善,如增加手動(dòng)改變音樂(lè)播放的節(jié)奏、長(zhǎng)時(shí)間無(wú)按鍵系統(tǒng)自動(dòng)關(guān)閉、手動(dòng)輸入音符再自動(dòng)播放(當(dāng)然需將rom換成ram )等功能。此系統(tǒng)是我獨(dú)立開(kāi)發(fā)的一個(gè)小型系統(tǒng),且實(shí)現(xiàn)的效果很好,很有成就感,更加激發(fā)我搞科研 的熱情!七、編程調(diào)試1.具有自動(dòng)演奏

43、樂(lè)曲功能的電子琴系統(tǒng)的所有vhdl源代碼1.1 頂層文件 music_player.bdf 如下:圖 31 music_player.bdf 文件1.2鍵盤(pán)控制模塊(key_control.vhd ) vhdl源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.stdogic_unsigned.all;fokturtkbcop 3】puyktynott4.0kbrgp 3】r>tbentity key_control isport (elk,start: in stdogic;kbcol:in std_logic_vector(

44、0 to 3);song:buffer stdjogic;play:out stdogic;-1music_play; 0:elc_keyboard;sel:out stdogic;-1:music_play; 0:elc_keyboard;key_note:buffer integer range 0 to 16;kbrow:buffer std_logic_vector(0 to 3);end entity;architecture control of key_control issignal clk_kb:std_logic;signal cnt:integer range 0 to

45、1000;signal temp:std丄ogic_vector (7 downto 0);signal state:std_logic_vector( 1 downto 0):=lf00f,;signal count:stdogic_vector(1 downto 0):-'00,'signal key:integer range 0 to 16;signal keynum:integer range 0 to 16;signal tempkey:integer range 0 to 16;signal song_chg:std_logic:=,0,;beginprocess

46、(clk) 產(chǎn)生鍵盤(pán)掃描beginif rising_edge(clk)the nif start-1' thenif cnt=499 then仿真時(shí)改為 if cnt=10 thenclk_kb<=not clk_kb;cntv=o;elsecntv 二 cn t+1;end if;end if;end if;end process;process(clk_kb)beginif rising_edge(clk_kb) thenif state=h11m thenstatev 二”00”;elsestate v=state+1;end if;end if;end process;

47、process(state)begi ncase state iswhen ,00,=>kbrow<=,1110"when ,0t,=>kbrow<=,110r,; when h10h=>kbrow<=h10irf;when ,'11,=>kbrow<=',011t,;when others =>kbrow<="1111"end case;end process;temp<=kbrow & kbcol;process(clk_kb)beginif start='1&#

48、39; thenif falling_edge(clk_kb) thenif kbcol=',1111n thenif count=h11h thenkey<=0;countv 二”00”;else count<=count+1;end if;else-count<="00"case temp iswhen ll11101110lf=>key<=16;when"11101101'->key<=15;when"11101011'->key<=14;when, 1100111 &#

49、39;->key<=13;when, 1011110'->key<=12;whenh11011101'->key<=11;when, 1011011 "=>key<=10;when'*11010111 "=>key<=9;when'*10111110"=>key<=8;when"10111101"=>key<=7;whenh10111011"=>key<=6;when'*10110111 "

50、=>key<=5;when"01111110"=>key<=4;whenh01111101h=>key<=3;whenk01111011"=>key<=2;when© 110111m=>key<=1;when others =>key<=0;end case;end if;end if;elsekey<=0;end process;process(clk)variable count:stdjogic_vector(4 downto 0);“仿真時(shí)改為(1 downto 0) begi nif rising_edge(clk) thenif key/=tempkey the ntempkey<=key;count:=,00000u;-仿真時(shí)改為”00”elseif count="11111n then-仿真時(shí)改為”笛”keynu m<=key;count:二”00000”; 一 仿真時(shí)改為 ”00”elsecoun t:=co un t+1;end if;end if;en

溫馨提示

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

評(píng)論

0/150

提交評(píng)論