有些时候因为需要我们的开发板的按键会不够,但是我们又需要更多的按键来控制我们的程序运行来达到我们的目的,这个时候我们会考虑来给按键添加一个多击的功能,这样一个按键就可以当作更多的按键来使用。
首先我们需要一个写出一个按键消抖,因为开发板上面的按键是物理按键,我们按下去的时候会有机械抖动,这个是不可避免的,如果我们不写按键消抖,那么你的一次按键按下,会有多次按键输出,上板的反应就是按键不灵敏,按了没效果
我的按键消抖的思想就是给按键按下添加一个延时,我们等按键稳定之后就取它的值就好了,按键抖动的时间一般为5ms~10ms,那我们就可以等到20ms再取稳定的值。
如下代码中,我们定义时间TIME20ms为20ms,输入时钟sysclk,输入复位信号rst_n,输入按键key,输出按键消抖后的信号key_flag。
定义了一个计数器cnt,当按键按下,低电平有效,这个时候计数器开始计数,计数等于TIME20ms时保持这个状态,不让计数器清零,这个时候我们根据cnt的值来判断按键按下的状态,当cnt==TIME20ms,可以判断这个按键已经稳定了,可以输出我们key_flag有效的信号,这个时候key_flag就是我们消抖后的按键信号。
module key
#(
parameter TI