蜂鸣器音乐发生器实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

蜂鸣器音乐发生器实验报告

一、实验目的

(1)学习用数控分频器设计蜂鸣器音乐发生电路。

(2)了解乐谱的基本知识,可以将乐谱转换为Quartus II 文件,掌握其演奏的原理。

(3)掌握设计中各模块的功能,能够填入并演奏新的曲子。

二、实验设备与器件

Quartus II 软件、EP2C8Q208C8实验箱

三、实验方案设计

1. 实验可实现的功能

(1)蜂鸣器可以演奏四首音乐,四首音乐通过两个拨码开关控制,可以随意更改想听的曲目。

(2)在播放音乐的同时,用一位数码管显示当前音乐的简谱,并且用两个发光二极管显示高、中、低不同的音调。

(3)在用拨码开关选择曲目的同时,可以在LCD1602液晶屏上看到当前音乐的名称。

2. 音频方案设计

蜂鸣器音乐发生器的基本原理:组成乐曲的每个音调的频率值以及音长所延续的时间是乐曲能够连续演奏的两个基本数据,所以只要控制输出到蜂鸣器的时钟信号频率的高低和持续的时间,就可以使蜂鸣器发出连续的乐曲声。

(1)音调频率值的控制

简谱中音调与音频的对应关系如表3.2.1所示,表中的低、中、高音的频率遵循二倍规则,就是说中音1是低音1频率的2倍,高音1是中音1频率的2倍,以此类推。

已知低音的频率,可以通过如下的MATLAB程序计算出中、高音的频率,并且可以得出各音调的分频值与频率预直数,其中预置数是用11位计数器来表示的。

计算中、高音及各音调分频值与频率预置数的MATLAB程序:

clc;

f=50000000; %50MHz

bilv=2^(1/12); %相邻音调频率之间的比率

a(6)=440.0; %低音6的频率为440Hz

a(7)=a(6)*bilv*bilv; %低音7的频率

a(5)=a(6)/bilv/bilv; %低音5的频率

a(4)=a(5)/bilv/bilv; %低音4的频率

a(3)=a(4)/bilv; %低音3的频率

a(2)=a(3)/bilv/bilv; %低音2的频率

a(1)=a(2)/bilv/bilv; %低音1的频率

b=a*2; %中音的频率

c=b*2; %高音的频率

counter=2^11; %分频值对应的位数为11位

f=f/50/2; %50MHz,50分频,再2分频

for i=1:7

zhia(i)=counter-f/a(i); %低音的分频预置数

zhib(i)=counter-f/b(i); %中音的分频预置数

zhic(i)=counter-f/c(i); %高音的分频预置数

end

音调、分频值及频率预置数的表格如下:

(2)音调持续时间的控制

音乐中的银除了有高低音之分外,还有长短之分。简谱中用一条横线“—”在音符的右面或者下面来标注音的长短。表3.2.2列出了常用音符及其长度标记。

四分音符 1 一拍

八分音符 1 半拍

十六分音符 1 四分之一拍

从表3.2.2可以看出横线有记在音符后面的,也有记在音符下面的,横线标记的位置不同,被标记音符的时值也不同。要使音符时值延长,在四分音符右边加横线“—”,这时的横线叫做延时线。延时线越多,音调持续的时间就越长。

音乐中除了有音的高低、长短之外,也有音的休止。表示音的休止的符号叫休止符,用“0”标记。每增加一个0,就增加一个四分休止符的时值。

3.系统工作原理

本系统共分为4个模块组成,其中Songer.v是顶层设计文件,其内部有4个功能模块:jianpu.v、zhuanhuan.v、fenpin.v、lcd1602.v,功能模块如图3.3.1所示。

图3.3.1 系统功能模块电路

(1)音符的频率可以由图3.3.1中的模块fenpin获得。这是一个数控分频器,由其clk端输入50MHz的时钟信号,通过fenpin分频之后由spkout输出。fenpin 对clk输入信号的分频比由11位预置数tone决定。Spkout的输出频率将决定每一音符的音调。这样,分频预置数tone与spkout的输出频率就对应起来了。

(2)音符的持续时间是根据乐曲的速度及每个音符的节拍数来确定的,图

3.3.1中模块zhuanhuan的功能首先是为fenpin提供决定所发音符分频预置数,而此数在fenpin输入口停留的时间即为此音符的节拍值。模块zhuanhuan是乐曲简谱与相应的分频预置数之间的转换电路,其中设置了高、中、低音全部音符所对应的分频预置数,共21个,每一音符的停留时间由音乐节拍和音调发生器模块jianpu的clk的输入频率决定,这里为4Hz。这21个值的输入由对应于zhuanhuan的5位输入值index确定,而index最多有32种可选值。Toneindex输向zhuanhuan中的index,其值与持续时间由模块jianpu决定。

(3)在jianpu中设置了,一个9位二进制计数器,作为简谱数据ROM的地址指针。这个计数器的计数频率选为4Hz,即每一计数值的停留时间为0.25s,恰为当全音符设为1s时,四四拍的4分音符的持续时间。ROM中的低音用0~7表示,中音在低音的基础上再加7,用8~14表示,同理高音用15~21表示。当jianpu中的计数器按4Hz的时钟速率做加法计数时,ROM中的简谱通过toneindex 端口输向zhuanhuan模块,乐曲就可以连续的演奏了。

此外还设置了一个两位的乐曲选择端sel,当sel为00时,可演奏高、中、低音的循环演奏;当sel为01时,演奏《两只老虎》;当sel为10时,演奏《天空之城》;当sel为11时,演奏《快点告诉你》。

(4)在lcd1602模块中设置了歌曲名称显示功能,由sel作为选择端口,当sel 为00时,可以在lcd1602液晶显示屏的第一行显示“gao zhong di yin”;当sel

为01时,显示“liang zhi lao hu”;当sel为10时,显示“tiankongzhicheng”;当sel为11时,显示“kuaidiangaosuni ”。

4.各模块程序设计

(1)蜂鸣器音乐发生器顶层程序设计

module Songer(song_sel,clk,ledpos,ledneg,spkout,sms,smb,rst_n,lcd_data,lcd_e, lcd_rs,lcd_rw,SEL0,SEL1,SEL2);

input [1:0] song_sel; //对四首乐曲进行选择

input clk; //音调频率信号

input rst_n; //节拍频率信号

output [1:0] ledpos; //发光二极管的阳极

output [3:0] ledneg; //发光二极管的阴极

output [7:0] sms; //数码管的段选

output [7:0] smb; //数码管的位选

output spkout; //蜂鸣器输出

output [7:0] lcd_data; //数据总线

output lcd_e; //使能信号

相关文档
最新文档