名称:音乐播放器蜂鸣器播放音乐按键切歌
软件: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. 仿真图
整体仿真图


按键模块


音乐控制模块


频率控制模块





















![[正式学习java③]——字符串在内存中的存储方式、为什么字符串不可变、字符串的拼接原理,键盘录入的小细节。](https://img-blog.csdnimg.cn/85365aa00f6642c78ee6aa4a696e3280.png)