【按键】短按,长按,按键释放,三种模式的按键扫描程序(软件消抖动)

先来说一下这三种模式的意思:

1. 短按模式:单击按键时,返回一次有效按键值;长按时也只返回一次有效按键值。这样可以有效地排除因不小心长按带来的返回多次有效按键,进而执行多次按键处理程序。

2. 长按模式: 单击按键时,返回一次有效按键;长按时,返回多次有效按键值。这样可以很快的调节某个较大的参数,比如时间的时分秒参数。

3. 按键释放模式:这个模式与短按模式是相对的。短按模式只要按键按下去,立即返回有效键值,进而试行按键处理程序;二按键释放模式,却是要等到按下键,释放之后,才会返回有效键值,进而执行按键处理程序。


接下来说一下扫描程序:
1)采用的是轮询的方式(非中断)
2)消抖动的方式:多次扫描,来确定按键值。下面的程序的是设定了5次。主要是根据扫描周期来确定,次数的多少。
注:
扫描周期:从进入按键扫描程序开始,直到到下一次进入按键扫描程序时 结束,之间所用的时间。

下面是整个按键扫描程序的源码,可以读一读,语句都很简单,而且每一句都有注释,一步一步看下去,应该能明白。
如果不明白,可以留言谈论。
以下是 KeyScan.c 文件的内容,

以下是KeyScan.h文件内容


使用注意:
1.作为按键使用的相应IO口,必须设置为输入模式(如果是51单片机的话,无需关心)
2.按键的硬件连接必须是一端接GND,一端接IO口。

下面介绍一下程序的使用方法:
这里以51单片机的 按键点亮和熄灭LED灯作为例子。
硬件:
1)按键使用单片机的P0端口
2)LED灯使用P1.0的IO口,低电平点亮

返回的按键值:
没有键按下, 返回键值是0xFF
如果P0.0按下,返回键值是0xFE
如果P0.1按下,返回键值是0xFD
如果P0.2按下,返回键值是0xFB
如果P0.3按下,返回键值是0xF7

如果P0.7按下,返回键值是0x7F

下面是例子的参考源码:

Pillar Peng
2015.5.25 – 18:23

log:
感谢 友“Shiow1984”的提醒,有漏掉和不足的地方,我已经修改。
之前写的文章意在按键程序的思路,就没有将定时扫描程序添加进去,怕影响按键程序的理解,若要稳定地运用于程序中,就要使用定时扫描了,这样按键扫描的时间就可以确定,调节好扫描次数后,几乎就没有什么误触了。

我也在上面的程序中添加了定时扫面程序。


扩展篇:
该方法的矩阵键盘程序

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2015年9月12日
下一篇 2015年9月12日

相关推荐