25M电子琴实现

module qin
(
input clk,
output reg beep,
input [3:0] col,
output [3:0] row_data,
output [7:0]out ,
input rst_n
);
wire [3:0] key;
wire en;
parameter STOP=0,
DOD=47708,//262,
RED=42516,//294,
MD=37876,//330,
FAD=35816,//349,
SOD=31886,//392,
LAD=28408,//440,
SID=25302,//494,
DOM=23900,//523,
REM=21294,//587,
MM=18968,//659,
FAM=17908,//698
SOM=15943,//784
LAM=14204,//880
SIM=12651,//988
DOG=11950,//1046
REG=10638;//1175
reg f[15:0];
reg[19:0] cnt1;
reg[19:0] cnt2;
reg[19:0] cnt3;
reg[19:0] cnt4;
reg[19:0] cnt5;
reg[19:0] cnt6;
reg[19:0] cnt7;
reg[19:0] cnt8;
reg[19:0] cnt9;
reg[19:0] cnt10;
reg[19:0] cnt11;
reg[19:0] cnt12;
reg[19:0] cnt13;
reg[19:0] cnt14;
reg[19:0] cnt15;
reg[19:0] cnt16;
juzhen1 juzhen_ut
(
.clk(clk),
.rst_n(rst_n),
.col_data(col),
.row_data(row_data),
.key_flag(),
.key_flag_r0(en),
.key_value(key),
.out(out)
);
[email protected](posedge clk)
begin
if(cnt1==DOD*2-1)begin f[0]<=1;cnt1<=0;end
else if(cnt1<=DOD)begin f[0]<=1;cnt1<=cnt1+1;end
else begin cnt1<=cnt1+1;f[0]<=0;end
//[email protected](posedge clk)
if(cnt2==RED*2-1)begin f[1]<=1;cnt2<=0;end
else if(cnt2<=RED)begin f[1]<=1;cnt2<=cnt2+1;end
else begin cnt2<=cnt2+1;f[1]<=0;end
//[email protected](posedge clk)
if(cnt3==MD*2-1)begin f[2]<=1;cnt3<=0;end
else if(cnt3<=MD)begin f[2]<=1;cnt3<=cnt3+1;end
else begin cnt3<=cnt3+1;f[2]<=0;end
//[email protected](posedge clk)
if(cnt4==FAD*2-1)begin f[3]<=1;cnt4<=0;end
else if(cnt4<=FAD)begin f[3]<=1;cnt4<=cnt4+1;end
else begin cnt4<=cnt4+1;f[3]<=0;end

//[email protected](posedge clk)
if(cnt5==SOD*2-1)begin f[4]<=1;cnt5<=0;end
else if(cnt5<=SOD)begin f[4]<=1;cnt5<=cnt5+1;end
else begin cnt5<=cnt5+1;f[4]<=0;end
//[email protected](posedge clk)
if(cnt6==LAD*2-1)begin f[5]<=1;cnt6<=0;end
else if(cnt6<=LAD)begin f[5]<=1;cnt6<=cnt6+1;end
else begin cnt6<=cnt6+1;f[5]<=0;end

//[email protected](posedge clk)
if(cnt7==SID*2-1)begin f[6]<=1;cnt7<=0;end
else if(cnt7<=DOD)begin f[6]<=1;cnt7<=cnt7+1;end
else begin cnt7<=cnt7+1;f[6]<=0;end

//[email protected](posedge clk)
if(cnt8==DOM*2-1)begin f[7]<=1;cnt8<=0;end
else if(cnt8<=DOM)begin f[7]<=1;cnt8<=cnt8+1;end
else begin cnt8<=cnt8+1;f[7]<=0;end

//[email protected](posedge clk)
if(cnt9==REM*2-1)begin f[8]<=1;cnt9<=0;end
else if(cnt9<=REM)begin f[8]<=1;cnt9<=cnt9+1;end
else begin cnt9<=cnt9+1;f[8]<=0;end
//[email protected](posedge clk)
if(cnt10==MM*2-1)begin f[9]<=1;cnt10<=0;end
else if(cnt10<=MM)begin f[9]<=1;cnt10<=cnt10+1;end
else begin cnt10<=cnt10+1;f[9]<=0;end
//[email protected](posedge clk)
if(cnt11==FAM*2-1)begin f[10]<=1;cnt11<=0;end
else if(cnt11<=FAM)begin f[10]<=1;cnt11<=cnt11+1;end
else begin cnt11<=cnt11+1;f[10]<=0;end

//[email protected](posedge clk)
if(cnt12==SOM*2-1)begin f[11]<=1;cnt12<=0;end
else if(cnt12<=SOM)begin f[11]<=1;cnt12<=cnt12+1;end
else begin cnt12<=cnt12+1;f[11]<=0;end
//[email protected](posedge clk)
if(cnt13==LAM*2-1)begin f[12]<=1;cnt13<=0;end
else if(cnt13<=LAM)begin f[12]<=1;cnt13<=cnt13+1;end
else begin cnt13<=cnt13+1;f[12]<=0;end
//[email protected](posedge clk)
if(cnt14==SIM*2-1)begin f[13]<=1;cnt14<=0;end
else if(cnt14<=SIM)begin f[13]<=1;cnt14<=cnt14+1;end
else begin cnt14<=cnt14+1;f[13]<=0;end
//[email protected](posedge clk)
if(cnt15==DOG*2-1)begin f[14]<=1;cnt15<=0;end
else if(cnt15<=DOG)begin f[14]<=1;cnt15<=cnt15+1;end
else begin cnt15<=cnt15+1;f[14]<=0;end
//[email protected](posedge clk)
if(cnt16==REG*2-1)begin f[15]<=1;cnt16<=0;end
else if(cnt16<=REG)begin f[15]<=1;cnt16<=cnt16+1;end
else begin cnt16<=cnt16+1;f[15]<=0;end
end

[email protected](key[3:0] or rst_n )
begin
if(!rst_n) beep=0;
if(en) begin
case(key[3:0])
4‘d0: begin beep<=f[0]; end
4‘d1:begin beep<=f[1]; end
4‘d2:begin beep<=f[2]; end
4‘d3:begin beep<=f[3]; end
4‘d4:begin beep<=f[4];end
4‘d5:begin beep<=f[5];end
4‘d6:begin beep<=f[6]; end
4‘d7:begin beep<=f[7];end
4‘d8:begin beep<=f[8];end
4‘d9:begin beep<=f[9];end
4‘d10:begin beep<=f[10];end
4‘d11:begin beep<=f[11];end
4‘d12:begin beep<=f[12];end
4‘d13:begin beep<=f[13];end
4‘d14:begin beep<=f[14]; end
4‘d15:begin beep<=f[15];end
default:beep<=0;
endcase
end
else beep=0;
end
endmodule

基于4*4的矩阵键盘 赋予每个按键一个音符,通过蜂鸣器(无源)输出

时间: 2024-10-11 00:11:02

25M电子琴实现的相关文章

arduino电子琴(2015-11-04)

前言 这是论坛上一个坛友问的问题,想做一个可变音调的电子琴,想着正好练练手,就顺手做一下. 接线图 代码 主程序: 1 // ---------------------------------------------------------------------------- 2 // elecKeyboard.ino 3 // 4 // Created 2015-11-04 5 // By seesea <seesea2517#gmail#com> 6 // 7 // 模拟电子琴 8 //

【创新!】蜂鸣器,与感应电子琴[定时、中断、I/O高阻工作类型]

2015年10月2日 1.驱动有源/无源蜂鸣器,发出不同频率的声音 /* 工程创建MCU选取,Atmel 89C55 单片机:STC12C4052AD 晶振:12M 功能:驱动无源蜂鸣器 连接说明:BEEP正极接VCC,负极接到 MCU的P3^7 */ #include <STC12C2052AD.H> sbit BEEP = P3^7; void DELAY_MS (unsigned int a) {     unsigned int i;     while ( --a != 0 )  {

STEP模块——电子琴

电子琴原理 什么是声音?上过初中的朋友都知道声音是由震动所产生的.一定频率的震动就产生了一定频率的声音. 理论研究第一步,让喇叭发出do re mi fa sol la si的音,我们先不管do的频率是不是261hz,更重要的是我们必须知道,每个音之间的频率关系,初中老师说,do re mi这三个音相邻两个音是全音关系,mi 和 fa 是半音关系,fa sol la si 这四个音相邻两个音也是全音关系.全音关系意味着振动频率关系为2的开六次方,即1.12246,半音关系意味着频率关系为2的开1

关于电子琴

电子琴是一种新型乐器,通过幅频调制及滤波等,模仿乐器.本软件是通过真实采样模仿乐器,两者目的相同,但重复冲突了,对于乐器仿真,原理不同,只能二选一.难道要丢弃电子琴吗?当然本软件不是做电子琴的.仔细分析,电子琴模仿乐器并不真实,却那么动感,为什么那?就是因为“不像”才有了自己的特点,这才是“电子琴”.特别是传统立式电子琴,“牛”的不能再“牛”,完全忽略对乐器的模仿,整个以自己为中心,自信满满.本软件要模仿电子琴自己特点的一面,“牛”的一面.

纯js带音符显示功能的网页电子琴插件

Beep是一款功能非常强大的基于浏览器的电子琴js插件.该电子琴插件可以在发音的同时显示出该声音的音符,并且自带演示功能,可以播放指定曲子的完整音乐.该电子琴插件支持键盘演奏和使用鼠标滑过琴键的方式演奏. Beep是基于WebAudio API来创建合成音乐效果的电子琴javascript框架.它用于模拟真实的钢琴演奏环境.使用一行代码synth = new BEEP.Instrument()就可以创建一组触发音符的Trigger接口,每个接口的音符Notes都有自己的音调Voices.使用sy

STM32F407外部晶体改为25M后检测不到芯片的解决办法

问题描述 分享一个之前遇到的STM32F4晶体频率问题,导致单片机死机的解决办法.使用一款新的F4开发板,直接使用的正点原子STM32F407工程模板代码,管脚配置正确,下载到外部晶体为25MHz的开发板之后,LED不闪烁,串口无输出,单片机直接死机,调试器检测不到芯片. 问题分析 之前写过一篇文章:STM32串口打印输出乱码的解决办法,那个F103乱码是因为外部晶体频率12M,而程序中8M对应不上,导致的串口乱码和定时器定时不准确,但是单片机并没有死机,程序还可以正常下载,解决办法也很简单,只

25M时钟的梁祝演奏

module liangzhu(clk_50M,rst,speaker); input clk_50M,rst; output speaker; reg speaker; //分频计数器parameter wide=15;reg[7:0] cnt; //音名数reg[3:0] cnt1; //5MHz基频reg[23:0] cnt2;//节拍频率5Hzreg[wide-1:0] origin;//预置数寄存器 reg[wide-1:0] drive;reg[1:0] count;reg carr

linux学习笔记(11)df命令

linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [文件] 2.命令功能: 显示指定磁盘文件的可用空间.如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示.默认情况下,磁盘空间将以 1KB 为单位进行显示,除非环境变量 POSIXLY_CORRECT 被指定,那样将以512字节为单位进行显示 3.命令参数: 必要参数: -a 全部文件系统列表 -h

小蚂蚁学习Linux(5)——文件搜索命令find和grep(重要)

find 命令    find    [搜索范围] [搜索条件] 例如:    find    /    -name    install.log    意思:在根目录下查找文件名为install.log的文件. 注意: 1. 在生产服务器上应避免这种大范围的搜索,会非常耗费系统资源. 2. find搜索的文件名必须是一模一样的才能找到,要想进行模糊搜索,就要使用通配符,能够识别的通配符有三种,分别是:    *    ?    []    (这三个通配符的功能和作用貌似在各种语言中都是通用的,