先来说一下这三种模式的意思:
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进行处理,非常感谢!