单片机程序中多个按键的消除抖动怎么处理呢

2025-01-01 04:54:58
推荐回答(5个)
回答1:

有个想法,不知道行不行。对100个键进行编码。
先扫描一次所有的键,保存可能被按下的键码进数组,延时,再根据保存数组中的键码进行扫描,得到被按下的键的键码

回答2:

你可以采用硬件消抖,就是用R-S触发器组成一个硬件消抖电路!希望你采纳!

回答3:

#include
#define uchar unsigned char
#define uint unsigned int
sbit dula=P3^7;
sbit we1=P2^0;
sbit we2=P2^1;
sbit we3=P2^2;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};
uchar num,temp,num1;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar aa) //num11是形参不能和定义中的一样
{
dula=1;
P0=table[aa-1];
dula=0;
}
uchar keyscan()
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5); //延时去抖
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0) //判断确实输入了
{
temp=P3;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;

}
while(temp!=0xf0) //松手检测
{
temp=P3;
temp=temp&0xf0; //低四位全为0
}

}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5); //延时去抖
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0) //判断确实输入了
{
temp=P3;
switch(temp)
{
case 0xed :num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8;
break;

}
while(temp!=0xf0) //松手检测
{
temp=P3;
temp=temp&0xf0; //低四位全为0
}

}
}P3=0xfb;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5); //延时去抖
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0) //判断确实输入了
{
temp=P3;
switch(temp)
{
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;

}
while(temp!=0xf0) //松手检测
{
temp=P3;
temp=temp&0xf0; //低四位全为0
}

}
}P3=0xf7;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5); //延时去抖
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0) //判断确实输入了
{
temp=P3;
switch(temp)
{
case 0xe7:num=13;
break;
case 0xd7:num=14;
break;
case 0xb7:num=15;
break;
case 0x77:num=16;
break;

}
while(temp!=0xf0) //松手检测
{
temp=P3;
temp=temp&0xf0; //低四位全为0
}

}
}
return num;
}

void main()
{
dula=1;
P0=0;
dula=0;
we1=0;
we2=0;
we3=0;
num=17;
while(1)
{
display(keyscan());
}
}

回答4:

我觉得可以给每个按键设置一个标志位,当按键按下之后,延时10ms,记录每个按键的标志位的状态,然后同时比较100个标志位在按下前后的值。检测是否100个按键同时按下。这样相当于100按键只需要10ms的延时,而且这样还可以有2的100次方个状态,可以进行多个处理、

回答5:

这个月15日??
我现做也够呛~~~你只能找专门收费做毕业设计的给你做了。我必须把本职工作做完才有空干别的

前2年上大四我同学要人做全套的毕业设计价格是2000-3000 北京的
是从网上找的,能接受价格的话自己仔细找找把