• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

音樂播放器蜂鳴器播放AX301開發(fā)板verilog切歌

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

1-23101R22QC93.doc

共1個(gè)文件

名稱:音樂播放器蜂鳴器播放音樂按鍵切歌(代碼在文末付費(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

  • 1-23101R22QC93.doc
    下載

相關(guān)推薦