音乐播放器综合项目报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常州信息职业技术学院
可编程逻辑器件开发应用
综合项目设计报告
2015 —2016 学年第二学期
项目:音乐播放器的设计与实现
班级:计应143
学号:1408143321
姓名:段新浩
授课教师:聂章龙
制定日期:2016年06月25日
目录
1 总体设计
1.1主要实现的功能
1.2功能框图
2 软件设计
2.1 主模块
2.2 按键去抖动和分频模块
2.3 音乐播放时间模块
2.4 音乐显示时间模块
3 程序测试
4 结束语
1 总体设计
基于Verilog HDL的音乐播放器系统是以ALTERA公司的MAXⅡ系列芯片 EPM1270T144C5为主控单元,根据音乐发生的原理,将复杂可编程逻辑器件作为发生音乐的核心器件,用高速集成电路硬件描述语言Verilog HDL编程控制音乐发生的乐谱,配合周边硬件电路,由蜂鸣器发声器件发出音乐声,实验表明,采用该方法设计的音乐发生器成本低、修改方便。
1.1主要实现的功能
①在4位动态数码管上显示音乐播放的时间;
②在8*8点阵屏上显示相应歌曲的名字(汉语拼音或英文字母);
③在1位静态数码管上显示高(H)、中(Z)、低(L)音调,并且利用8个小灯的亮灭来标识相应的音符(音符是几就亮第几盏小灯);
④通过开始/暂停按键控制音乐的开始、暂停,通过乐曲选择按键控制音乐的选择;
⑤选择时单个数码管上显示歌曲编号。
1.2功能框图
实现音乐播放器的功能,其动能框图如图1—1所示:
图1-1 音乐播放器功能框图
2 软件设计
2.1 主模块
module music(clk,keyin,keyin1,buzzout,ledout,led,ldoa,ldob,seg,sl);
input clk,keyin,keyin1;
output buzzout;
output[7:0] ledout,led,ldoa,ldob,seg,sl;
wire[7:0] num;
f_1M Q1(clk,clk0,sec); //按键去抖动和分频模块 key Q2(clk0,keyin,keyin1,key,key1); //按键取值模块
music1 Q3(key,key1,clk,buzzout,ledout,led); //音乐程序模块
dtled Q4(ldoa,ldob,clk,key1); //汉字显示模块
music_time Q5(sec,key1,num); //音乐播放时间
display Q6(clk,num,sl,seg); //音乐显示时间Endmodule
目的:主模块的设计能够很清晰的理清各个模块之间的关系,很容易实现该功能的实现。
2.2 按键去抖动和分频模块
module f_1M(clk,clk0,sec);
input clk;
output clk0,sec;
reg clk0,sec;
reg[17:0] count;
reg[23:0] count1;
always@(negedge clk)
begin
count=count+1;
if(count==18'd240000) //10ms执行一次
begin
clk0=~clk0; //clk0取反
count=0;
end
end
always@(negedge clk)
begin
count1=count1+1;
if(count1==24'd1*******) //0.5s执行一次
begin
sec=~sec; //sec取反
count1=0;
end
end
Endmodule
目的:解决按键按下时不稳定的问题,以及获得周期为1s的信号。
2.3 音乐播放时间模块
module music_time(sec,key1,num);
input sec,key1;
output[7:0] num;
reg[7:0] num;
reg[7:0] one,two,three;
reg flag;
reg temp;
Initial
begin
one=8'h12;
two=8'h16;
three=8'h11;
end
always@(posedge sec or negedge key1)
begin
if(key1==0)
begin
flag=flag+1; //flag加1
if(flag==3)
flag=0;
temp=0;
end
else
begin
if(!temp)
begin
temp=1;
case(flag)
0:num=one;
1:num=two;
2:num=three;
endcase
end
else
begin
if(num>1)
if(num[3:0]==0)
begin
num[3:0]<=4'h9;
num[7:4]<=num[7:4]-1;
end
else
num[3:0]<=num[3:0]-1;
else
temp=0;
end
end
endmodule
目的:将音乐播放的时间程序写出来以备音乐播放时间的显示。