在单片机与按键接口程序中,往往先进行按下消抖,而对按键状态的 判断就是指按键处理了。这里的按键处理不是执行相应的动作,而是 区分按键此刻处于何种状态,并改变相应状态变量的值,以便程序其 它地方通过检测相应的按键状态变量去执行相应的动作。比如,我们 可以把按下并抬起的短按点亮 LED,改成长按一段时间点亮 LED。总 的来讲,单片机识别按键就分为三个阶段:按键消抖---按键处理--- 按键执行。这个思路适用于所有形式的按键。至于为什么要消抖?是 因为我们在操作按键时,不可能立即按下或抬起,机械式按键接触面 不是立刻就接触或断开的,而单片机的检测速度特别快,这样往往会 发生误判,因此,我们要等待电平稳定了,再去处理按键。消抖的方 式很简单,就是利用延时,等待一个稳定电平的到来。
H:表示行;L:表示列;
| L0 P13 | L1 P12 | L2 P11 | L3 P10 |
|
H0 P17 | 0 | 1 | 2 | 3 |
|
H1 P16 | 4 | 5 | 6 | 7 |
|
H2 P15 | 8 | 9 | 10 | 11 |
|
H3 P14 | 12 | 13 | 14 | 15 |
|
|
|
|
|
|
|
我们先测试列,测试列时,把行控 IO 设置为 0,列空 IO 设置为 1
即:P1 = 0X0F;此时若有按键被按下,我们可以得到 4 组编码:
0X07,0X0B,0X0D,0X0E;每一组又对应列的四个按键。 然后我们再测试行:P1 = 0XF0;又可以得出四个按键编码,这样就可以判断是哪个键被按下了。这里依然是抬起有效。
六、 单片机程序设计思想之一
动态扫描