简易电子琴演奏器

您所在的位置:网站首页 数码管显示1234567 简易电子琴演奏器

简易电子琴演奏器

2023-12-22 14:15| 来源: 网络整理| 查看: 265

一、 设计课题的任务要求 1、基本要求

1、 用8×8点阵显示“1 2 3 4 5 6 7”七个音符构成的电子琴键盘。其中点阵的第一列用一个 LED点亮表示音符“1”,第二列用二个 LED点亮表示音符“2”,依此类推。当音符为低音 1至7时,点阵显示为绿色;当音符为中音1至7时,点阵显示为红色;当音符为高音1~7 时,点阵显示为黄色; 在这里插入图片描述

2、 用BTN7~BTN1七个按键模拟电子琴手动演奏时的“1 2 3 4 5 6 7”七个音符。当某个按键按下时,数码管DISP7显示相应的音符,点阵上与之对应的音符显示列全灭,同时蜂鸣器演奏相应的声音;当按键放开时数码管显示的音符灭掉,点阵显示恢复,蜂鸣器停止声音的输出。

2、提高要求

1、增加手动演奏的音符存储、播放功能。 2、自拟其他功能。

3、实验原理

因为音阶的频率我们是知道的,设为f,而maxII板上的clk信号是50MHz,所以要得到需要的f,只需要n=50M/f就可以得到分频的倍数了。以下是己知的所需频率f。 在这里插入图片描述

二、 系统设计 1、设计思路

本实验主要涉及到了数码管的译码、点阵、不同音符所对应分频系数的选择、音乐的存储和自动播放五部分。 ①数码管的译码:BTN7~BTN1分别对应1234567,同时要求只有一个七段数码管DISP7显示,故cat阵列应为“01111111”。 ②点阵:G_COL:绿色发光二极管列信号;R_COL:红色发光二极管列信号;ROW:行信号(发光二极管公共端)。点阵上某个点显示红色(中音)的条件:控制该点行的引脚输出低电平,控制该点红色发光二极管列信号引脚输出高电平,控制该点绿色发光二极管列信号引脚输出低电平。点阵上某个点显示绿色(低音)的条件:控制该点行的引脚输出低电平,控制该点红色发光二极管列信号引脚输出低电平,控制该点绿色发光二极管列信号引脚输出高电平。点阵上某个点显示黄色(高音)的条件:控制该点行的引脚输出低电平,控制该点红色发光二极管列信号引脚输出高电平,控制该点绿色发光二极管列信号引脚输出高电平。 ③分频系数的选择:首先对高中低音进行判断,然后再根据BTN输出相应的频率。 ④音乐的存储:首先做一个计数器(取决于储存音乐的长度,我取的是模8计数器),然后根据计数器的计数依次输出BTN。 ⑤自动播放:根据存储部分依次输出的BTN经过第③部分,得到相应的分频系数,就能得到相应的音符。

2、总体框图

在这里插入图片描述

三、仿真波形及波形分析 10000分频器divider

在这里插入图片描述

clk:初始时钟信号; rclk:经过10000分频后的时钟信号,10000个clk周期=1个rclk周期即10000分频; 这里用10000分频器的目的是为了将50MHz频率的时钟信号变为较小频率(5000Hz)的时钟信号,从而减小运算时间。

1250分频器

在这里插入图片描述

clk:初始时钟信号; rclk:经过1250分频后的时钟信号,1250个clk周期=1个rclk周期即1250分频。 目的是为了将经过divider得到的5000Hz的时钟信号转换为4Hz即周期为0.25s的时钟信号,对应的是1/4个节拍,为以后存储的音乐做好准备。

模8计数器count_8421

在这里插入图片描述

clk:时钟信号; a:三位二进制数,每经过一个时钟上升沿计数,计数结果为“012345670123……”; SW1:复位信号,当SW1=1时,计数归零;当SW1=0时,正常计数。

模8计数器count_8;

在这里插入图片描述

clk:时钟信号; a:三位二进制数,每经过一个时钟上升沿计数,计数结果为“012345670123……”;

自动播放autoplay

在这里插入图片描述

a:前面的模8计数器输入的计数信号;由于我的电子琴自动播放的乐曲是“1234567”,所以采用模8计数器来完成自动演奏。 clk:时钟信号; BTN:BTN7~BTN0分别对应音符1234567; BTN_OUT:实际输出的BTN; SW0:选择手动演奏或自动播放 由上仿真图可见,此时SW0=1,为自动播放,输出存储的音乐“1234567”。

不同音符对应分频系数的选择e_organ

在这里插入图片描述

在这里插入图片描述

a:模8计数,实现点阵G_COL、R_COL、ROW的扫描; BTN:BTN7~BTN1分别对应音符1234567; G_COL:绿色发光二极管列信号; R_COL:红色发光二极管列信号; ROW:发光二极管公共端行信号; symbol:检测BTN是否为有效信号,1代表有效,0代表无效; tone:根据音符选择出的分频系数; SW[7:5]:100,高音黄色;010,中音红色;001,低音绿色;else不发音且数码管不显示。且只有SW为100、010、001时BTN信号才有效即symbol=1。 在这里插入图片描述

用tone=1100 0101 1010 1111时来分析,1100 0101 1010 1111换算成十进制数为50607。则50607对应的就是中音7的分频系数,50MHz/50607Hz=988Hz,对应中音7的987Hz。 在这里插入图片描述

根据输入的分频系数发出相应频率的音div

在这里插入图片描述

clk:时钟信号; beep:分频后的信号; symbol:判断信号tone的有效性,1有效,0无效; tone:输入的分频系数。

数码管译码器deco

在这里插入图片描述

BTN:按键BTN7~BTN0分别对应1234567; y:7段数码管; cat:分别代表8个7段数码管模块。 由图可见:cat=01111111表示只有第一个7段数码管有显示;当BTN=1000000,此时y=00000110即数字1;当BTN=0010000,此时y=01001111即数字3;当BTN=0000100,此时y=01101101即数字5;当BTN=0000001,此时y=00000111即数字7,以此类推。

顶层文件elec_organ

在这里插入图片描述

BTN:BTN7~BTN1分别对应音符1234567; clk:时钟信号; G_COL:绿色发光二极管列信号; R_COL:红色发光二极管列信号; seg:7段数码管; cat:分别代表8个7段数码管模块; frq:输出的分频系数; SW[7:5]:100高音黄色;010中音红色;001低音绿色; SW0:控制手动演奏或者自动播放; SW1:复位信号,当SW1=1时,计数归0,当SW1=0时,正常计数。 SW0=1即自动播放,此时播放的音乐为储存的音乐,当SW1=1时,自动播放会一直播放当前的那一个音符,当SW=0时,自动播放将按照存储的音符按顺序播放。

四、源程序 10000分频器divider module divider(clk, rclk); input clk; output rclk;//经过4分频后的时钟信号 reg rclk; reg [13:0] n; always @(posedge clk) begin if (n == 9999) n


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3