音乐播放器综合项目报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

目的:将音乐播放的时间程序写出来以备音乐播放时间的显示。

相关文档
最新文档