名稱:音樂播放器蜂鳴器播放音樂按鍵切歌(代碼在文末付費(fèi)下載)
軟件:Quartus
語(yǔ)言:Verilog
代碼功能:
設(shè)計(jì)一個(gè)音樂播放器,使用板子上的蜂鳴器播放歌曲,可以播放三首歌(歌曲任選),通過(guò)按鍵控制切歌,使用led顯示音樂節(jié)奏。
本代碼曲目為:
《兩只老虎》
《媽媽的吻》
《讓我們蕩起雙槳》
本代碼已在AX301開發(fā)板驗(yàn)證,開發(fā)板資料:
演示視頻:
部分代碼展示
//音樂播放器 module?music(sysclk,?model_Key,?spkout,led); ???input???????????sysclk;//50M晶振 ???input???????????model_Key;//歌曲選擇鍵 ???output??????????spkout;//蜂鳴器輸出 output??????[1:0]?led;//指示燈 ??? ???wire?[7:0]?tonecode; ???wire?[9:0]?tonestep; ???wire?model_Key_down; ???//調(diào)用頻率控制字產(chǎn)生模塊 ???musicdec?u_musicdec ( .tonecode(tonecode),//輸入簡(jiǎn)譜 .tonestep(tonestep)//輸出頻率控制字 ); ??? //調(diào)用按鍵消抖模塊 key_jitter?u_key_jitter( ?????.?clkin(sysclk),??? ?????.?key_in(model_Key),//輸入 ??.?key_posedge(),//消抖后按鍵上升沿 ??.?key_negedge(model_Key_down),//消抖后按鍵下降沿 ?????.?key_value()//消抖后按鍵 ); ??? //音樂控制模塊 music_ctrl?i_music_ctrl( ???.??sysclk(sysclk),//50M晶振 ???.??model_Key_down(model_Key_down),//歌曲選擇鍵 ???.??tonecode(tonecode), ???.??tonestep(tonestep), ???.??spkout(spkout),//蜂鳴器輸出 ???.??led(led)//指示燈 );??? ??? endmodule //控制模塊 module?music_ctrl( ???input??sysclk,//50M晶振 ???input??model_Key_down,//歌曲選擇鍵 ???output?reg?[7:0]??tonecode, ???input??[9:0]?tonestep, ???output?reg???spkout,//蜂鳴器輸出 ???output?[1:0]?led//指示燈 );??? ???reg?[21:0]??????addr;//分頻控制字 ???reg?[24:0]??????divclk_counter; ???reg?????????????musicclk; ???wire?[31:0]?????musickeyshiftbuf; ???wire?[1:0]??????musicno; ??? ???wire?[9:0]??????step; ???reg?[8:0]???????codeaddr1; ???reg?[8:0]???????codeaddr2; ???reg?[8:0]???????codeaddr3; ??? //定義3個(gè)數(shù)組,用于存儲(chǔ)3首歌曲 ???reg?[7:0]?music1[0:255]; ???reg?[7:0]?music2[0:447];?? ???reg?[7:0]?music3[0:495]; //初始化三首歌,存入數(shù)組 initial?begin $readmemh("music1.list",?music1);//music1.list存儲(chǔ)的是兩只老虎的簡(jiǎn)譜 $readmemh("music2.list",?music2);//music2.list存儲(chǔ)的是媽媽的吻的簡(jiǎn)譜 $readmemh("music3.list",?music3);//music3.list存儲(chǔ)的是讓我們蕩起雙槳的簡(jiǎn)譜 end ??? ???reg?[1:0]?music_select=2'd0; assign?led=music_select; always@(posedge?sysclk) if(model_Key_down) music_select<=music_select+2'd1;//按一次按鍵,music_select加1 ???assign?step?=?tonestep; ???always?@(posedge?sysclk)????? ??????begin addr?<=?addr?+?step;//step是根據(jù)音樂文件產(chǎn)生的頻率控制字,不同step產(chǎn)生不同頻率的spkout ??????end ???always?@(posedge?sysclk)????? ??????begin ?????????if?(divclk_counter?==?1799999)//50M/(1799999*2)=分頻到13.9Hz ?????????begin ????????????musicclk?<=?(~musicclk);//musicclk=13.9Hz
設(shè)計(jì)文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. RTL圖
5. 管腳分配
6. Testbench
7. 仿真圖
整體仿真圖
按鍵模塊
音樂控制模塊
頻率控制模塊
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=193
閱讀全文