名称:通用音乐播放器代码,蜂鸣器播放音乐
软件: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. 仿真图
整体仿真图
按键模块
音乐控制模块
频率控制模块