按键消抖原理实现

本文介绍了按键消抖的原理,特别是在电子设计中如何使用FPGA通过计时来消除按键机械特性引起的抖动。实验设计了一个计数器,当检测到按键变化时清零并累加,达到预设时间(如10ms)即视为按键稳定。同时,该消抖模块还包含了上升沿和下降沿检测。在顶层模块中,当计数器达到特定值时,输出按键状态。LED显示模块则用于辅助验证。
摘要由CSDN通过智能技术生成

原理

按键做为基本的人机输入接口,在很多电子设计中都能见到,由于机械特性,在按键按下或松开的时候,按键输入值是有抖动的,无论按下去是多平稳,都难以消除抖动,按键消抖方式有很多,本实验主要是通过FPGA计时来消抖。实验中设计了一个计数器,当按键输入有变化时,计时器清零,否则就累加,直到加到一个预定值(例如10ms),就认为按键稳定,输出按键值,这样就得到以后没有抖动的按键值。由于在很多地方需要用到按键下降沿或上升沿的检测,按键消抖模块直接集成了上升沿和下降沿检测的功能。
在这里插入图片描述

模块

顶层模块

module key_debounce(
	//Differential system clocks
	input                       sys_clk_p,
	input                       sys_clk_n,
	input                       rst_n,
	input                       key,
    output [3:0]                led
);
wire                            sys_clk;
wire                            button_negedge; //Key falling edge
wire[3:0]                       count;
assign led = ~count;
IBUFDS sys_clk_ibufgds
(
	.O                          (sys_clk                  ),
	.I                          (sys_clk_p                ),
	.IB                         (sys_clk_n                )
);

ax_debounce#(.FREQ(200)) ax_debounce_m0
(
    .clk                        (sys_clk),
    .rst                        (~rst_n),
    .button_in                  (key),
    .button_posedge             (),
    .button_negedge             (button_negedge),
    .button_out                 ()
);

count_m10 count10_m0(
    .clk                       (sys_clk),
    .rst_n                     (rst_n),
    
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值