乐曲自动演奏器
一、 功能介绍
使用FPGA
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
一个乐曲自动演奏控制器,将源程序下载至FPGA器件中,实现乐曲自动演奏。(本设计的乐曲是《友谊天长地久》的部分音乐)
乐曲演奏的原理是:由于组成乐曲的每个音符的频率值(音调)及其持续时间(音长)是乐曲演奏的2个基本数据,因此需要控制输出到扬声器的激励信号的频率高低和该频率信号持续的时间。频率的高低决定了音调的高低,而乐曲的简谱与各音名的频率之间也有固定的对应关系。所有不同频率的信号都是从同一基准频率分频而得来的,由于音阶频率多为非整数,而分频系数又不能为小数,故必须将计算的到的分频数进行四舍五入取整,基准频率和分频系数应综合考虑加以选择,从而保证音乐不会走调。如在4MHz时钟下,中音1(对应的频率值为523.3Hz)的分频系数应该为:4000000/(2*523.3)=0xd3821,这样只需对系统时钟进行3821次分频即可得到所要的中音1。至于其他音符,同样可求出对应的分频系数,这样利用程序可以很轻松地得到对应的乐声。此外,在程序中设置了一个状态机,每250ms改变一个状态(即一个节拍),组成乐曲的每个音符的频率值(音调)相对应于状态机的每一个状态。只要让状态机的状态按顺序转换,就可以自动播放音乐了。《友谊天长地久》乐谱见下表(注:N一拍;N两拍;N﹒四拍;N﹒八拍;N为乐谱。由于芯片存储容量太小,源程序只加入乐谱的一部分音符)
《友谊天长地久》乐谱
0 5 | 1. 1 1 3 | 2. 1 2 3 | 1. 1 3 5 | 6. 6 | 5. 3 3 1 | 2. 1 2 3 | 1. 6 6 5 | 1. 6 | 5. 3 3 1 | 2. 1 2 6 | 5 . 3 3 5 | 6. 1 | 5. 3 3 1 | 2. 1 2 3 | 1. 6 6 5 | 1. 0 ?
简谱中的音名与频率的关系
音名
频率/Hz
分频数
低音5
392
16’d5102
低音6
440
16’d4545
中音1
523.5
16’d3821
中音2
587.3
16’d3373
中音3
659.3
16’d3033
中音5
784
16’d2551
高音5
880
16’d2273
高音6
1760
16’d1913
二、 硬件设计(电路图、原器件清单)
实物元件清单:
印刷电路板一个;
电阻(10KΩ的10个,200Ω的8个,1KΩ的14个,50Ω的1个);
三极管3个;
发光二极管(红黄绿各三个);
蜂鸣器1个;
8段显示器2个;
按键4个;
4M晶振1个;
电容(104的6个,10μ的1个);
电源线1个;
芯片底座1个;
电路图:
功率放大显示部分:
核心控制部分:
三、 软件设计(
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图、源程序)
流程图
一个完整的EDA设计流程既是自顶向下设计方法的具体实施途径,也是EDA工具软件本身的组成结构。其大致的设计流程包括:设计输入、综合、适配、时序仿真和功能仿真、编程下载、硬件测试的步骤。对于目前流行的EDA工具软件,图1-1的设计流程具有一般性[3]。
图1-1 应用FPGA/CPLD的EDA开发设计流程框图
各部分源程序及说明
module song(clk,beep); //模块名称song
//I/O口说明
input clk; //系统时钟4MHz
output beep; //蜂鸣器输出端
//内部寄存器
reg beep_r; //寄存器
reg[3:0] state; //乐谱状态机
reg[15:0]count,count_end;
reg[17:0]count1;
//参数--分频系数
parameter L_5=16'd5102, //低音5
L_6=16'd4545, //低音6
M_1=16'd3821, //中音1
M_2=16'd3405, //中音2
M_3=16'd3033, //中音3
M_5=16'd2551, //中音5
M_6=16'd2273, //中音6
H_1=16 'h1913; //高音6
parameter TIME=1000000; //控制每个音的长短(250ms)
assign beep= beep_r; //输出音乐
//上升沿脉冲计数
always@(posedge clk)
begin
count<=count+1'b1; //计数器加1
if(count==count_end)
begin
count<=16'h0; //计数器取0
beep_r<=! beep_r; //输出取反
end
end
//上升沿脉冲计数
always@(posedge clk)
begin
if(count1