FPGA—按键消抖

今天简单的说说按键消抖,原理特别好理解,其实就是延时,做一定时间的延时后取值一次,就能够得到特定的消抖后的状态了。

为什么要消抖? 见图:
在这里插入图片描述
我们可以看到,但按键按下的那一刻,存在一段时间的抖动,同时在释放按键的一段时间里也是存在抖动的,这就可能导致状态在识别的时候可能检测为多次的按键,因为运行过程中普通的检测一次状态key为1就执行一次按键操作。所以我们在使用按键时往往需要消抖。

消抖方式有很多种,这里我提供一种相对而言比较简单容易理解的方式,通过延时来消抖。
我们知道,抖动时间的长短由按键的机械特性决定,一般为5ms~10ms.

大家看原理图,其实我们要做的就是,但按键按下去后,只在中间稳定的某一个时刻(10ms)取一个真正按键的使能值就好了,详细的见代码:
(鉴于板子一般有四个按键,这里的代码是对四个按键消抖的)

/*******按键消抖*******/
module key_vibration(
    input		  	 mclk,
	input		  	 rst_n,
	input	   [3:0] key,
	output reg [3:0] key_en
	);
	
	parameter DURATION = 50_000;                           //延时10ms	
	reg [15:0] cnt; 
	
	wire ken_enable;
	assign ken_enable = key[3] | key
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值