按键的去抖,是指按键在闭合或者松开的瞬间伴随一连串的抖动,这样的抖动将直接影响设计系统的稳定性,降低相应的灵敏度。因此,必须对抖动进行处理,及消除抖动的影响。在实际工程中有很多消抖的方案,如RS触发器消抖,电容充放电消抖,软件消抖。本章利用FPGA内部来设计消抖,即采用软件消抖。
按键的机械特性,决定着按键的抖动时间,一般抖动时间在5ms~10ms。消抖,也意味着,每次在按键闭合或者松开期间,跳过这段抖动时间,在检测按键的状态。只要通过简单的延时就可以实现按键的消抖。
1.1硬件介绍
本设计有两个用户按键分别为BTN0和BTN1。BTN0用来复位,BTN1用来控制四个用户led。BTN1每按一次,对应的LED灯反转一次。即检测按键是否有闭合和断开的过程,如果有,第一次则LED灯点亮,第二次,则LED灯熄灭。
1.2 时序设计
由于按键固有的特性,在每次闭合和断开时,经过抖动-稳定-抖动-稳定的过程。因此,检测按键是否有按下的过程,则需要进行两次消抖处理。通过检测按键输入的值,当检测到BTN1为低电平时,启动计数器,做10ms延时,在检测一次,若BTN1依然为低,则说明,BTN1被按下,设置按键按下标志(low_flag)。在检测BTN1,若BTN1为高,做10ms延迟,第二次检测,若依然为高电平,则说明BTN1已断开,设置BTN1断开标志(high_flag)。通过这两个标志位,可以判断,BTN1已经完成了一次闭合到断开的过程,则led反转一次。
采用状态机实现上面的流程是非常的方便的。通过状态机的切换,按键每次由闭合到断开的过程中,分别产生low_flag和high_flag,当这两个标志同时为高时,led灯反转一次。
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: