此程序原本能进行4x3键盘扫描输入的,为了节省字数,第一个贴只贴第0~3个按键的扫描程序,其余省略。
我把按钮分开4种状态:弹起失效状态,刚按下状态,按下足够时间状态,再次弹起状态(此次按钮判断为一次有效的按下动作) timep3 是在定时器里面不断改变的值,从0~3反复变化,每变一次改变一下行输出的0位置。改变一次行的状态后,把f_chackbut置1,然后在主程序调动扫描子程序。程序返回该按钮的结果(如 fbutdo_0)。程序其他部分通过判断这个结果来进行处理。为简单起见该子程序没有返回值和参数。 按键消抖时间取决于定时器执行改变行的时间。
好处:检查按键不会对程序实时性产生任何影响。按键检查全自动操作并返回结果。 缺陷:不管任何时候按下按键,只要有效都会设置有效标志位(如fbutdo_0),程序必须加入判断这个标志位有无用,要不要清除的机制。应该根据程序的状态加入按键仲裁机制才能做到完美。
另外程序还能优化,请自行处理哈哈。 此程序思想一直稳定应用于某个产品中。
|