本讲任务:
单片机如何检测键盘输入。
认识一下各种按键:
轻触开关是一种电子开关,使用时,轻轻按开关按钮就可使开关接通,当松开手时,开关断开。我们使用的开关如下图:
键盘软件消抖:
按键一般是利用机械触点的闭合、断开作用,由于机械触点的弹性作用,在其闭合、断开瞬间均右抖动过程,抖动时间一般在5—10mS,稳定闭合时间由操作人员的按键动作决定,一般为零点几秒到几秒。为了保证单片机对一次闭合,仅作一次键输入操作,必须在编程时候编写必要的程序代码来去除抖动影响,称键盘软件消抖。
判断键一次按下的具体方法:
先判断键是否按下,若按下了延时10 ms,跳过按下抖动期,然后再判断按键是否按下,若是,说明按键真的按下了,否则说明是干扰信号,如果键真的按下了,则等待键释放,如果键释放了,延时10 ms,再判断键是否释放,若释放了,说明按键真的释放了,否则说明是干扰信号,如果按键真的释放了,说明一次完整的按键过程完成了。在一次完整的按键后,可以连接该键对应的功能程序段,以实现特定的功能。
例程1:
/************************按键状态指示************************
*单片机:STC89C52RC
*开发环境:KEIL
*功能:当SWITCH_S7键按下时,对应led亮;松开后,对应led灭
***************************************************************/
#include<reg51.h>
sbit SWITCH_S7=P3^4;
sbit LED_D4=P1^0;
void delay(int In,int Out) //定义延时函数
{
int i,j;
for(i=0;i<In;i++)
{for(j=0;j<Out;j++){;}}
}
void main()
{
while(1)
{
if(SWITCH_S7==0) //SWITCH_S7按下
{
delay(5,10);
if(SWITCH_S7==0) //SWITCH_S7按下
{LED_D4=0;} //点亮D4
}
else if(SWITCH_S7==1) //SWITCH_S7松开
{
delay(5,10);
if(SWITCH_S7==1) //SWITCH_S7松开
{LED_D4=1;} //熄灭D4
}
}
}
对应电路图: