独立按键
按键介绍
接触式按键(又称轻触开关)
·两个引脚距离长的之间为导通
其工作的原理图如下
1、2、3、4 分别对应按键的四个引脚,其中蓝色的线表示按键未被按下之时的状态,为初始状态,它是不导通的;而绿色的线是却永久导通的。其实是两个相同的结构连在一起了。只要将需要按键开关作用的线路分别接在1、3 和2、4 的任意取一组合,概括起来就是(1,2)、(1,4)、(3,2)、(3,4)四种组合,都可以起到预期的开关作用。
按键消抖
通常按键所用的开关都是机械弹性开关,当机械触点断开、闭合时,由于机械触电的弹性作用,一个按键开关在闭合时不会马上就稳定接通,在断开时也不会一下子就彻底断开,而是在闭合和断开的瞬间伴随了一连串的抖动。
如图所示:
(上方为理想状态,下方为实际情况)
由于抖动的时间都是由按键的机械特性决定的,一般都会在10ms内,为了确保程序对按键的一次闭合或者一次断开只响应一次,必须进行按键的消抖处理。当检测到按键状态变化时,不是立即去响应动作,而是先等闭合或者断开稳定后再进行处理。按键消抖分为硬件消抖和软件消抖。
硬件消抖一般是在按键上并联一个电容,如图所示,利用电容的充放电特性来对消抖过程中产生的电压毛刺进行一个平滑的处理,从而实现消抖。但是在实际运用当中并不是很好,而且还增加了成本和电路的复杂性。
在绝大多数情况下是用软件进行消抖。最简单的消抖就是当检测到按键状态变化后,先等待个10ms左右的延时时间,让消抖之后再进行一次按键状态的判断,若与刚才检测到的状态相同,就可以确认按键已经稳定动作了。
示例:利用独立按键实现点亮一个LED
代码如下:
#include <reg52.h>
typedef unsigned int u16; //对数据类型进行声明定义 u16=unint
typedef unsigned char u8; // u8 = unchar
sbit key1 = P3^1; //按键的定义
sbit LED = P2^0;
void delay(u16 i) //延时函数
{
while(i--);
}
void main()
{
LED = 1;
while(