原因:由于按键是由金属片组成,当按下松开后,会发生抖动,效果等同于在很小的时间内按下好多次,由于人的反应时间较计算机的计算能力差距很大,因此,计算机经过处理后产生的效果是人眼看不到的,为了能够看到清晰的效果,因此,需要设置按键消抖。解决方法:保证每个引脚的信号输入的脉冲周期大于
输入引脚的读取周期。
当小于脉冲周期时,发送的信号会出现部分丢失。
当大于脉冲周期时,发送的信号始终都会被接收,代码实现体现在延时读取引脚的数据。
这里借用51单片机的按键消抖程序来看具体的实现
//软件消抖的独立式键盘输入实验
#include<reg52.h> // 包含51单片机寄存器定义的头文件
sbit S1=P1^4; //将S1位定义为P1.4引脚
sbit LED0=P0^0; //将LED0位定义为P0.0引脚
//延时约30ms函数
void delay(void)
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<100;j++)
;
}
//主函数
void main(void)
{
LED0=0; //P0.0引脚输出低电平
while(1)
{
if(S1==0) //P1.0引脚输出低电平,按键S1被按下
{
delay(); //延时一段时间再次检测
if(S1==0) // 按键S1的确被按下
LED0=~LED0; //P0.0引脚取反,即实现开关灯功能
while(!S1); //等待下一次按键
}
}
}