首页 > 其他分享 >按键消抖电路如何实现?

按键消抖电路如何实现?

时间:2023-07-27 16:44:15浏览次数:40  
标签:消抖 sys 电路 key 按键 rst reg

请设计一个按键消抖电路?

按键消抖 :按键消抖_百度百科 (baidu.com)

module  key_debounce(
input         sys_clk       ,    //20ns
input         sys_rst_n     ,
input         key           ,
//output   reg  key_flag    ,    //正点原子中 将表示信号作为一路输出信号使用
output   reg  key_vaule      
);

parameter   N=4     ;         //20ms/20ns =1000_000   设置小一点的值(4) 好仿真
reg [19:0]  cnt             ;  
reg         key_reg         ;
reg         key_flag        ; //这里我将标志信号作为一个内部信号使用

always@(posedge  sys_clk or negedge sys_rst_n)  begin
    if(!sys_rst_n) begin 
        key_reg<=1'b1;
        cnt<='d0;
    end 
    else begin 
        key_reg<=key;           //寄存按键状态
        if(key_reg!=key)        //处于振荡阶段
            cnt<=N;
        else if(key_reg==key) begin  //处于稳定阶段 计数20ms
            if(cnt>'d0)
                cnt<=cnt-'d1;
            else 
                cnt<=cnt;
        end 
    end 
end 

always@(posedge sys_clk or negedge sys_rst_n) begin 
    if(!sys_rst_n) begin 
        key_flag<=1'b0;
        key_vaule<=1'b1;
    end 
    else if(cnt=='d1) begin    //处于稳定20ms 即判断按下按键
        key_flag<=1'b1;        //产生一个标志信号 表示按键按下
        key_vaule<=key;        //产生消抖的按键信号 即稳定信号
    end 
    else begin 
        key_flag<=1'b0;
        key_vaule<=key_vaule;
    end 
end 
endmodule 
`timescale  1ns/1ns
module  tb_key_debounce();
reg     sys_clk       ;    
reg     sys_rst_n     ;
reg     key           ;
//wire    key_flag      ;
wire    key_vaule     ;

initial begin 
    key                          <= 1'b1;
    sys_clk                      <= 1'b0;
    sys_rst_n                    <= 1'b0; 
    #20           sys_rst_n      <= 1'b1;  //在第20ns的时候复位信号信号拉高 
    #30           key            <= 1'b0;  //在第50ns的时候按下按键
    #20           key            <= 1'b1;  //模拟抖动
    #20           key            <= 1'b0;  //模拟抖动
    #20           key            <= 1'b1;  //模拟抖动
    #20           key            <= 1'b0;  //模拟抖动
    #170          key            <= 1'b1;  //在第300ns的时候松开按键
    #20           key            <= 1'b0;  //模拟抖动
    #20           key            <= 1'b1;  //模拟抖动
    #20           key            <= 1'b0;  //模拟抖动
    #20           key            <= 1'b1;  //模拟抖动
    #170          key            <= 1'b0;  //在第550ns的时候再次按下按键
    #20           key            <= 1'b1;  //模拟抖动
    #20           key            <= 1'b0;  //模拟抖动
    #20           key            <= 1'b1;  //模拟抖动
    #20           key            <= 1'b0;  //模拟抖动
    #170          key            <= 1'b1;  //在第800ns的时候松开按键
    #20           key            <= 1'b0;  //模拟抖动
    #20           key            <= 1'b1;  //模拟抖动
    #20           key            <= 1'b0;  //模拟抖动
    #20           key            <= 1'b1;  //模拟抖动

end 

always #10 sys_clk<=~sys_clk;

key_debounce    key_debounce_inst(
.sys_clk    (sys_clk  )   ,    
.sys_rst_n  (sys_rst_n)   ,
.key        (key      )   ,
//.key_flag   (key_flag )   ,
.key_vaule  (key_vaule)     
);

endmodule 

波形图:在设置N=4 下进行仿真

以上是本人对按键消抖电路的总结,若有不对的地方,敬请指正,万分感谢。

参考资料:1、正点原子开拓者FPGA开发按键控制蜂鸣器实验

标签:消抖,sys,电路,key,按键,rst,reg
From: https://www.cnblogs.com/yhm1314/p/17585352.html

相关文章

  • 奇分频电路如何实现? 负沿触发&非负沿触发
    请设计一个奇分频电路,占空比为50%?以下给出解答:1、带负沿触发 modulediv//带负沿触发#(parameterN=5)//定义分频参数(inputsys_clk,inputsys_rst_n,outputdiv_clk);//核心:在上下边沿的计数器......
  • BNC端口防雷击浪涌静电保护电路图
    BNC连接器(英语:BayonetNeill-Concelman,直译为“尼尔-康塞曼卡口”)是一种很常见的RF端子同轴电缆终结器,用于射频信号的传输,包括模拟或数字视频信号的传输、业余无线电设备天线的连接、航空电子设备和其他的一些电子测试设备的连接。BNC连接器没有被淘汰,主要因为同轴电缆是一种屏蔽电......
  • 永嘉微电/VINKA:电容式超强抗干扰 1按键/单通道/单键触摸触控芯片VK36N1D SOT23-6,该芯
    概述.VK36N1D具有1个触摸按键,可用来检测外部触摸按键上人手的触摸动作。该芯片具有较高的集成度,仅需极少的外部组件便可实现触摸按键的检测。提供了1个1对1输出脚,可通过IO脚选择上电输出电平,有直接输出和锁存输出2个型号可选。芯片内部采用特殊的集成电路,具有高电源电压抑制比......
  • 印制电路板中常用标准有哪些?
    在PCB电路板中一般都有哪些标准呢?一起来看看。1)IPC-ESD-2020:静电放电控制程序开发的联合标准。包括静电放电控制程序所必须的设计、建立、实现和维护。根据某些军事组织和商业组织的历史经验,为静电放电敏感时期进行处理和保护提供指导。2)IPC-SA-61A:焊接后半水成清洗手册。包括......
  • 嵌入式通用按键模块
    前言最近沉迷于收集一些大佬所开源的一些通用模块,这样在以后开发的过程中就能极大的减轻重复劳动。这次所带来的是MultiButton,一个小巧简单易用的事件驱动型按键驱动模块。①MultiButton简介这个项目非常精简,只有两个文件,可无限量扩展按键,按键事件的回调异步处理方式可以简化......
  • rk3288不改内核情况下采用中断方式挂载按键驱动(各种错误提示)
    内核不是开源的,只能选择.ko文件加载驱动主板:么么厂家的rk3288,非瑞芯微官方板子瑞芯微官网下载SDK,编译后的内核写进板子,板子无法启动,显然厂家在瑞芯微的基础上改硬件了把GPIO_KEY驱动修改成模块,然后加载,提示log:versionmagic'4.4.192mod_unloadARMv5'shouldbe'4.4.154......
  • 01、低噪声放大电路设计——ATF-54143
    内部包含低噪声放大器电路设计所需的atf54143模型以及ATC公司电容电感S2P文件-嵌入式文档类资源-CSDN文库https://download.csdn.net/download/weixin_42340855/858819100、知识储备一个低噪声放大器(LNA)的核心指标就是噪声系数和增益以及稳定性,在整个有用频率范围内不会振荡,且......
  • 射频电路的接地孔与回流问题
    前沿下图是PCB走线排板时常见的微带线(左图)和带状线(右图)的电磁场分布示意图,其电力线从走线层发出,终止于相关平面层,相关平面层不一定是地线层,可以是电源层,甚至是任意的网络层,在终止的相关平面层里会产生镜像电流,这个电流就叫走线层电流的"回流",回流与信号电流构成闭合回路......
  • 电容式触摸按键感应低功耗触摸IC芯片VK3702DM/VK3702TM/VK3702OM抗干扰触摸芯片
    产品型号(封装形式):VK3702DM  ——(SOP8)     VK3702TM  ——(SOP8)   VK3702OM——(SOP8)   产品品牌:永嘉微电/VINKA产品年份:新年份原厂,工程服务,技术支持!  产品简介:VK3702TM提供2个触摸感应按键,一对一的Toggle模式输出,提供低功耗模式,可使用于电......
  • android 按键上报流程
    Android按键上报流程Android系统提供了按键事件的上报功能,可以让开发者监听和处理用户的按键操作。本文将介绍Android按键上报的流程,并提供相关的代码示例。1.监听按键事件要监听Android设备上的按键事件,需要创建一个继承自View或Activity的类,并重写相应的方法。以下......