COLD音乐播放器综合项目实践报告总结.docx
- 文档编号:2428559
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:15
- 大小:142.97KB
COLD音乐播放器综合项目实践报告总结.docx
《COLD音乐播放器综合项目实践报告总结.docx》由会员分享,可在线阅读,更多相关《COLD音乐播放器综合项目实践报告总结.docx(15页珍藏版)》请在冰豆网上搜索。
COLD音乐播放器综合项目实践报告总结
常州信息职业技术学院
可编程逻辑器件开发应用
综合项目设计报告
2015—2016学年第二学期
项目:
音乐播放器的设计与实现
班级:
计应142
学号:
1408143209
姓名:
顾杉
授课教师:
聂章龙
制定日期:
2015年06月24日
一、总体设计(项目总体分析)
1、基本功能
基于VerilogHDL的音乐播放器系统是以ALTERA公司的MAXⅡ系列芯片EPM1270T144C5为主控单元,根据音乐发生的原理,将复杂可编程逻辑器件作为发生音乐的核心器件,用高速集成电路硬件描述语言VerilogHDL编程控制音乐发生的乐谱,配合周边硬件电路,由蜂鸣器发声器件发出音乐声,实验表明,采用该方法设计的音乐发生器成本低、修改方便。
基于VerilogHDL的音乐播放器实现的功能主要有在4位动态数码管上显示音乐播放的时间,在8*8点阵屏上显示相应歌曲的名字(汉语拼音或英文字母),在1位静态数码管上显示高(H)、中(Z)、低(L)音调,并且利用8个小灯的亮灭来标识相应的音符(音符是几就亮第几盏小灯),通过开始/暂停按键控制音乐的开始、暂停,通过乐曲选择按键控制音乐的选择,选择时单个数码管上显示歌曲编号,如选择“兰花草”时,显示0。
交流蜂鸣器为了增加I/O口的驱动能力采用了NPN型晶体管,这样只要在基极BUZZ上输入一定频率的脉冲,蜂鸣器BUZZ就会发出悦耳的音乐。
乐曲演奏的原理是这样的:
组成乐曲的每个音符的频率值(音调)及其持续时间(音长)是乐曲演奏的两个基本数据。
所以只要控制输出到扬声器信号的频率高低和该频率信号持续的时间就可以演奏出不同的音乐,频率的高低决定了音调的高低,而乐曲的简谱与各个音名有各自的对应关系,所有不同频率的信号都是从同一个基准频率分频得到的,由于音阶频率多为非整数,而分频系数又不能为小数,所以必须将计算得到的分频进行四舍五入取整,基准频率和分频系数应综合考虑加以选择从而保证音乐不会走调。
由于蜂鸣器具有控制简单及声响悦耳的特点,在工程项目中,常用作人机接口的重要输出设备,用以发出语音提示信息,使系统更加完善和使用。
蜂鸣器有交流和直流两种,直流蜂鸣器驱动简单,只要在二号引脚上加上直流电源它就会发出一定频率的声音,此时声音的音调和音量是固定的,而交流蜂鸣器在这方面则显得比较灵活,输入的声音信号的频率和音长可以由用户控制,因此输出的声响可以是多样的。
简谱中的音名与频率是一一对应的,因此要发出某一声乐,只需要输出该声乐所对应的频率信号就可以了,在实验板上已经为我们准备了键盘K1~K8和一个蜂鸣器BUZZ,所以完全可以用它们来实现一个简单的电子琴,为了产生一定的频率信号,我们还需要用到有源时钟clock,并且把它作为乐曲的基准频率,而所有不同的频率信号都是从这一基频分频而来的,比如在24MHz的时钟下,中音1(对应的频率值为523.3Hz)的分频系数应该是:
24*10的六次方/(523.3*2)=0x5993。
通过对有关蜂鸣器的设计案例的学习,基本上对分频和控制交流蜂鸣器发声有了一定的了解,所以在此基础上,设计音乐片段是对分频和蜂鸣器发声的综合应用,需要处理好各种简谱的播放顺序及音长。
程序设计时应该注意按键去抖动计数,注意分模块去设计每个模块并且注意模块与模块之间的关系。
在这个项目中我们还用到了汉字的显示,通过以前学习的点亮显示屏的例子,我们队LED点阵显示屏的内部结构、工作原理、驱动和编程方法有了一定的了解,同样,LED点阵显示屏可以显示汉字或字符,只是此时的汉字或字符应该以点阵的形式来表示,取点越多,汉字或字符也将越逼真,通常8*8的点阵显示屏可以用来显示一些简单的汉字。
首先把要显示的(8*8)汉字用二进制代码来表示,这一过程称之为取字模。
这样,在程序中才用逐行扫描的方法扫描整个点阵,当然在扫描对应行的同时在段码线输出对应的字模数据,于是该行的相应点被点亮。
虽然汉字是被逐行显示的,但是由于人眼的视觉差,且只要扫描速度足够快,所以看到的将还是一个完整的汉字。
由于音阶频率多为非整数,而分频系数又不能为小数,故必须将得到的分频数四舍五入取整。
由于最大的分频系数为5102,故采用13位二进制计数器已能满足分频要求。
在表中可以看到不同音阶对应的不同初始值。
对于不同的分频系数,只要加载不同的初始值即可。
采用加载初始值而不将分频输出译码反馈,可以有效地减少设计占用可编程逻辑器件的资源。
“0”表示休止符,在很多音乐中,休止符也是一个重要的音符。
对于休止符,只要将分频系数设为0,扬声器就不会发声了。
总体来说,要设计好这个项目首先要可以做出输出警报声,要了解蜂鸣器引脚与ERM1270T144C5N芯片的引脚的连接关系,理解交流蜂鸣器的工作原理及外围驱动电路,其次要能做出熟悉电子琴的设计,数字电子琴的设计需要掌握时钟分频的方法,掌握键盘与不同音频的对应关系,左右要能做出音乐播放器的设计,需要掌握交流蜂鸣器的综合应用,而能把这些结合起来尤为重要,运用我们前面所学的知识把这几块结合起来,就能设计出音乐播放器综合项目。
2、功能框图
调用:
fenpin();//分频函数,对24MHz的信号进行分频
jianpu();//要播放的音乐的简谱
yanzou();//让蜂鸣器发出声音
shanshuo();//让简谱上的数字在led小灯上显示出来
xianshi();//显示音乐名称
counttime(sec,key,min);//计时函数
3*功能模块关系图
音名、频率和分频系数对照表
2、软件设计
1、顶层模块(modulemusic())
(1)定义时钟输入、键盘输入口;
(2)定义声响输出口,定义位码输出口、数据输出口和数码管输出口,;
(3)调用函数,分别为以下几个模块:
①分频模块(对24MHz的信号进行分频):
●fenpin(clk,k,shift,clk_4Hz,key,con,swt,sec,shiftout,shift_out);
//分频函数,对24MHz的信号进行分频
②简谱、演奏模块(要播放的音乐的简谱、让蜂鸣器发出声音):
●jianpu(clk_4Hz,key,count_end,high,med,low,shiftout,shift_out);//要播放的音乐的简谱
●yanzou(clk,buzzout,count_end,key);
//让蜂鸣器发出声音
③闪烁模块(让简谱上的数字在led小灯上显示出来):
●shanshuo(high,med,low,out,clk,cmd,sled_reg,sl_reg,min,shiftout,shift_out);
//让简谱上的数字在led小灯上显示出来
④显示模块(显示音乐名称):
●xianshi(con,swt,x,y,key,shiftout);//显示音乐名称
⑤计时模块(计时函数)
●counttime(sec,key,min);//计时函数
2、分频模块(fenpin();)
*分频函数,对24MHz的信号进行分频:
(1)定义时钟输入和键盘输出;
(2)分频4Hz,按键延时,行扫描计数,显示名称的间隔时间;
(3)从24MHZ分频出1HZ(即周期为1S)信号,到0.5S后清零,取反1S信号;
(4)按键去抖动,按键计数。
主要函数:
always@(posedgeclk)
begin
……;
if(count==25'd3000000)//分频4Hz
……;
if(count1==19'd240000)//按键延时
……;
if(count2==19'd24000)//行扫描计数
……;
if(count3==24'd12000000)//显示名称的间隔时间
……;
end
always@(posedgeclk)//从24MHZ分频出1HZ(即周期为1S)信号
……
always@(posedgeset)//按键去抖动
……;
always@(negedgekey)//按键计数
……;
endmodule
3、简谱、演奏模块(要播放的音乐的简谱、让蜂鸣器发出声音)
以1/16音符为最小计数单元,而这个音符所占用的时间理论值为0.25s,所以我们在外部接入4Hz的时钟信号给计数器,已满足正常的音乐播放要求。
*音乐播放器分频模块:
分频4Hz信号。
(1)由基准时钟分频获得4Hz信号;
(2)控制交流蜂鸣器发各种音谱声;
(3)key按键按下方可计数;
(4)简谱对应高中低音及其数值;
*音乐播放器控制模块:
控制音乐播放的音频与顺序。
(1)分频得到相应简谱的频率;
(2)乐曲演奏控制。
注意:
always@(posedgeclk)
begin
count=count+1;
if(count==count_end&&key==1)
//计数到指定的数值并且允许播放的时候才能发声
begin
count=0;
buzzout=~buzzout;//产生一个高低电平蜂鸣器发声
end
end
4、闪烁模块(音符显示模块)(shanshuo();)
*让简谱上的数字在led小灯上显示出来,音乐名称显示模块:
在8*8点阵屏上显示相应歌曲的名字(汉语拼音或英文字母)。
*音符显示模块:
在1位静态数码管上显示高(H)、中(Z)、低(L)音调,并且利用8个小灯的亮灭来标识相应的音符(音符是几就亮第几盏小灯)
主要函数:
always@(count[11:
10])
begin
case(count[11:
10])
2'h0:
ledbuf=min[3:
0];//取秒的个位数据
2'h1:
ledbuf=min[7:
4];//取秒的十位数据
2'h2:
ledbuf=min[11:
8];//取分的个位数据
2'h3:
ledbuf=min[15:
12];//取分的十位数据
endcase
case(count[11:
10])//送对应位的位码
……//扫描最高位
endcase
end
always@(ledbuf)//时间显示
begin
case(ledbuf)
……
endcase
//if((count[11:
10]==2'b10)&sec)
//sled_reg=sled_reg&8'h7f;//小数点闪烁
end
音符显示模块程序框图:
否
否
是
是
5、显示模块(显示音乐名称):
xianshi(con,swt,x,y,key,shiftout);//显示音乐名称
*音符显示模块:
在1位静态数码管上显示高(H)、中(Z)、低(L)音调,并且利用8个小灯的亮灭来标识相应的音符(音符是几就亮第几盏小灯)
(1)允许播放音乐时点阵屏开始扫描;
(2)不播放音乐时点阵不扫描;
(3)显示歌名YDYAN
(4)输出对应的点阵信息;
主要函数:
always@(con)
begin
if(key==1'b1)//允许播放音乐时点阵屏开始扫描
case(con)
……;
endcase
e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- COLD 音乐 播放 综合 项目 实践 报告 总结