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)
);
always@(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
//always@(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
//always@(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
//always@(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

//always@(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
//always@(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

//always@(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

//always@(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

//always@(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
//always@(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
//always@(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

//always@(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
//always@(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
//always@(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
//always@(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
//always@(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

always@(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的矩阵键盘 赋予每个按键一个音符,通过蜂鸣器(无源)输出

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

  1. C# WinForm制作电子琴键盘

    上一篇 http://hovertree.com/h/bjaf/y8qol2p4.htm 再上一篇的基础上,使用WinForm制作了一个电子琴键盘: 演示地址 http://hovertree.com ...

  2. STEP模块——电子琴

    电子琴原理 什么是声音?上过初中的朋友都知道声音是由震动所产生的.一定频率的震动就产生了一定频率的声音. 理论研究第一步,让喇叭发出do re mi fa sol la si的音,我们先不管do的频率 ...

  3. arduino电子琴(2015-11-04)

    前言 这是论坛上一个坛友问的问题,想做一个可变音调的电子琴,想着正好练练手,就顺手做一下. 接线图

  4. 【GMT43智能液晶模块】例程七:定时器PWM实验——简易电子琴

    实验原理: STM32定时器有PWM功能,GMT43模块上带有一无源蜂鸣器,其 PWM输入控制信号接在STM32定时器输出接口上(PB4/TIM3_CH1),可 以通过定时器的PWM输出频率从而控制蜂 ...

  5. M4修改外部晶振8M和25M晶振的方法

    共计修改三个参数: 1.HSE_VALUE   具体位置在stm32f4xx.h中 2.PLL_M          具体位置在system_stm32f4xx.c中 3.Keil编译器 工程的Opt ...

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

    问题描述 分享一个之前遇到的STM32F4晶体频率问题,导致单片机死机的解决办法.使用一款新的F4开发板,直接使用的正点原子STM32F407工程模板代码,管脚配置正确,下载到外部晶体为25MHz的开 ...

  7. 基于Basys2开发板的简易电子琴和音乐播放器设计

    背景:华中科技大学 电测综合实验 主要功能:Basys2开发板外接一个扬声器(或无源蜂鸣器也可)实现电子琴和音乐播放器的功能.其中由于开发板上只有4个按键,所以电子琴功能只做了4个音调,分别对应于4个 ...

  8. 25M时钟的梁祝演奏

    module liangzhu(clk_50M,rst,speaker); input clk_50M,rst; output speaker; reg speaker; //分频计数器paramet ...

  9. C51 原创电子琴 (蜂鸣器/计时器/中断/矩阵按键)

    需求分析 用C51的16个矩阵按键当作两个八度的琴键 按下时发出相应音调的声音,静态数码管显示相应音符的数字. 为了解锁更多曲目,两个多的琴键设计成#4,显示时加上小数点 下图分别为1和#4的显示,其 ...

随机推荐

  1. 微软CMS项目 Orchard 所用到的开源项目

    研发了Orchard一年左右了,时常遇到瓶颈,总觉得力不从心,其实并不是基础不够,关键还是概念性的东西太多,一会儿这个概念名词,一会那个,关于Orchard的技术文档也的确很少,每次看起来总是焦头烂额 ...

  2. 用 maven filter 管理不同环境的配置文件

    使用 maven profile 一个项目可以部署在不同的环境当中,maven 的 profile 针对不同的环境指定各自的编译方法.在 pom.xml 的 profile 中,可以根据不同的环境定制 ...

  3. .NET中提升UAC权限的方法总结

    [题外话] 从Vista开始,由于增加了UAC(用户账户控制,User Account Control)功能,使得管理员用户平时不再拥有能控制所有功能的管理员权限了,所以在调用很多比较重要的功能时需要 ...

  4. CSharpGL(1)从最简单的例子开始使用CSharpGL

    CSharpGL(1)从最简单的例子开始使用CSharpGL 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo ...

  5. [已招满,谢谢关注]Sogou招聘C#开发人员,有意者请进

    职位名称:c#开发工程师 工作地点:搜狐网络大厦 职责:搜狗商业平台桌面产品 职位要求: 1. 计算机或者相关专业本科或以上学历 2. 精通c#,两年以上实际项目开发经验 3. 熟悉C/S开发架构和设 ...

  6. Chrome开发者工具不完全指南(五、移动篇)

    前面介绍了Chrome开发者工具的大部分内容工具,现在介绍最后两块功能Audits和Console面板.一.Audits Audits面板会针对目前网页提出若干条优化的建议,这些建议分为两大类,一类是 ...

  7. jQuery 2.0.3 源码分析Sizzle引擎 - 超级匹配

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 通过Expr.find[ type ]我们找出选择器最右边的最终seed种子合集 通过Sizzle.compile函数编译器 ...

  8. 传智播客--ADO.net--SqlBulkCopy批量插入数据(小白必知)

    一般情况下,我们在向数据库中插入数据时用Insert语句,但是当数据量很大的时候,这种情况就比较缓慢了,这个时候就需要SqlBulkCopy这个类. SqlBulkCopy本身常用的函数有这么几个 D ...

  9. PHP新的垃圾回收机制:Zend GC详解

    概述 在5.2及更早版本的PHP中,没有专门的垃圾回收器GC(Garbage Collection),引擎在判断一个变量空间是否能够被释放的时候是依据这个变量的zval的refcount的值,如果re ...

  10. AngularJS API之$injector ---- 依赖注入

    在AngularJS中也有依赖注入的概念,像spring中的依赖注入,但是又有所不同.Spring中使用构造注入或者设值注入的方式,还需要做一些额外的操作,但是angular中只需要在需要的地方声明一 ...