分享

单片机学习:按键扫描

 xpxys99 2017-05-14

1、按键消抖

通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。

单片机学习:按键扫描

消抖的方法有硬件消抖和软件消抖两种。

硬件消抖

在键数较少时可用硬件方法消除键抖动。下图所示的RS触发器为常用的硬件去抖。

单片机学习:按键扫描

图中两个'与非'门构成一个RS触发器。当按键未按下时,输出为0;当键按下时,输出为1。此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开B),只要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。也就是说,即使B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。这一点通过分析RS触发器的工作过程很容易得到验证。

软件消抖

如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程序,5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。一般来说,软件消抖的方法是不断检测按键值,直到按键值稳定。实现方法:假设未按键时输入1,按键后输入为0,抖动时不定。可以做以下检测:检测到按键输入为0之后,延时5ms~10ms,再次检测,如果按键还为0,那么就认为有按键输入。延时的5ms~10ms恰好避开了抖动期。

2、键盘扫描

矩阵式键盘结构:输出行线锁存器,输入列线缓冲器。

工作过程: 1.CPU先使行线P1.0为低,其余行线为高 2.CPU读入输入缓冲器的状态,以确定哪条列线为0状态,若此时P1.7为0,则'C'键按下;若P1.5为0,则'E'键按下 3.若输入缓冲器(列线)状态全部为1,说明P1.0行没有键盘按下,CPU急继续使P1.1为0,其余行线为高,再读入输入缓冲器的状态,以确定哪条列线为0,从而判断是哪个键盘按下 4.当判断那个键盘按下后,程序转入相应的键盘处理程序

单片机学习:按键扫描

矩阵式键盘结构:输出行线锁存器,输入列线缓冲器。 工作过程: 1.CPU先使行线P1.0为低,其余行线为高 2.CPU读入输入缓冲器的状态,以确定哪条列线为0状态,若此时P1.7为0,则'C'键按下;若P1.5为0,则'E'键按下 3.若输入缓冲器(列线)状态全部为1,说明P1.0行没有键盘按下,CPU急继续使P1.1为0,其余行线为高,再读入输入缓冲器的状态,以确定哪条列线为0,从而判断是哪个键盘按下 4.当判断那个键盘按下后,程序转入相应的键盘处理程序 把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,经过比对之后就可知道是哪个键被按下。 比如说扫描码送入01111111,前面的0111是代表此时扫描第一行P1.0列,而后面的1111是让读取的4行接脚先设為VDD,若此时第一行的第三列按键被按下,那读取的结果就会变成01111101(注意1111变成1101),其中LSB的第三个bit会由1变成0,这是因為这个按键被按下之后,会被垂直的扫描码电位short,而把读取的LSB的bit电位拉到0,此即为扫描原理。

3、实例电路

单片机学习:按键扫描

4、扫描程序(仅供参考)

//键盘扫描程序

uchar Keys_Scan()

{

uchar Tmp,KeyNo=0;

//高四位置0,放入四行

P1=0x0F;

DeMS(1);

Tmp =P1^0x0F;

//判断按键发生于0~3列的哪一列

switch(Tmp)

{

case 1:KeyNo=0;break;

case 2:KeyNo=1;break;

case 4:KeyNo=2;break;

case 8:KeyNo=3;break;

default:KeyNo=16; //无键按下

}

//低四位置0,放入四列

P1=0xF0;

Tmp =P1>>4^0x0F;

//0~3行分别附加起始值0,4,8,12

switch (Tmp)

{

case 1:KeyNo +=0;break;

case 2:KeyNo +=4;break;

case 4:KeyNo +=8;break;

case 8:KeyNo +=12;

}

return KeyNo;

}


本篇由小编整理发布,侵删。希望对大家有帮助。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多