名称:通用音乐播放器代码,蜂鸣器播放音乐
软件:Quartus
语言:Verilog
代码说明:本代码为音乐播放器通用代码,只需修改管脚即可适配其他开发板
代码功能:
设计一个音乐播放器,使用板子上的蜂鸣器播放歌曲,可以播放三首歌(歌曲任选),通过按键控制切歌,使用led显示音乐节奏。
本代码曲目为:
《两只老虎》
《妈妈的吻》
《让我们荡起双桨》
本代码已在AX301开发板验证,开发板资料:
FPGA 开发板手册.pdf
演示视频:音乐播放器蜂鸣器播放AX301开发板verilog切歌_Verilog/VHDL资源下载
代码下载:音乐播放器蜂鸣器播放AX301开发板verilog切歌_Verilog/VHDL资源下载名称:音乐播放器蜂鸣器播放音乐按键切歌(代码在文末付费下载)软件:Quartus语言:Verilog代码功能: 设计一个音乐播放器,使用板子上的蜂鸣器播放歌曲,可以播放三首歌(歌曲任选),通过按键控制切歌,使用led显示音乐节奏。本代码曲目为:《两只老虎》《妈妈的吻》《让我们荡起双桨》本代码已在AX301开发板验证,开发板资料:FPGA 开发板手册.pdf演示视频:部分代码展示//音乐
http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=193
部分代码展示
//音乐播放器
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;
   //调用频率控制字产生模块
   musicdec u_musicdec
(
.tonecode(tonecode),//输入简谱
.tonestep(tonestep)//输出频率控制字
);
   
//调用按键消抖模块
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个数组,用于存储3首歌曲
   reg [7:0] music1[0:255];
   reg [7:0] music2[0:447];  
   reg [7:0] music3[0:495];
//初始化三首歌,存入数组
initial begin
$readmemh("music1.list", music1);//music1.list存储的是两只老虎的简谱
$readmemh("music2.list", music2);//music2.list存储的是妈妈的吻的简谱
$readmemh("music3.list", music3);//music3.list存储的是让我们荡起双桨的简谱
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是根据音乐文件产生的频率控制字,不同step产生不同频率的spkout
      end
   always @(posedge sysclk)     
      begin
         if (divclk_counter == 1799999)//50M/(1799999*2)=分频到13.9Hz
         begin
            musicclk <= (~musicclk);//musicclk=13.9Hz
 
 
设计文档:
设计文档.doc
1. 工程文件

2. 程序文件


3. 程序编译

4. RTL图

5. 管脚分配

6. Testbench

7. 仿真图
整体仿真图


按键模块


音乐控制模块


频率控制模块



















![[自定义 Vue 组件] 小尾巴 Logo 组件 TailLogo](https://img-blog.csdnimg.cn/img_convert/449bcb8a6767e86ca8c4a8352341f863.png)

