按键工作原理
当KEY1按下时,整条电路就会导通,这个时候KEY1就是低电平;
当KEY1松开时,整条电路就会断开,这个时候KEY1就是高定平;
我们可以通过判断KEY1的高低电平来判断按键是否被按下。
为什么按键消抖
由于机械按键的物理特性缘故,按键在按下的过程中,会出现一段时间的抖动,同时在放开按键的过程中也出现一段时间的抖动,这就导致在判断时候可能检测为多次的按键按下,一般我们认为检测到一次按键为低电平,就可以认为按键被按下了,所以我们在使用按键时必须进行消抖,以保证按键被按下时只检测到一次低电平。
图1是未消消抖,可以看到按键在按下和松开是会存在抖动,一般是在20ms左右,如果在这个抖动区间对按键进行判断就会出现多次按下的结果,影响实际应用。
图2是按键消抖后的结果,我们判断到抖动后,做一个固定的时间延迟,延迟之后对按键进行对应的采样判断即可。
按键框计图
key_debouncer模块实现计数功能:当按键输入有变化时,计时器清零,否则就累加,直到加到一个预定值(例如 10ms),就认为按键稳定,输出按键值,这样就得到以后没有抖动的按键值。
edge_detect:对输出的稳定按键值做上升沿或者下降沿判断就可以了。
系统程序框架
本实验是通过按键来控制流水灯的变化,每当按键按下一次,流水灯就变化一次。