嗯,刚刚接触这个东西,关于按键去抖有个疑问,我在51中做的时候,直接延时10ms左右再检测一次的话效果已经比较好了,但是stm32上做的话,效果很差,不知道是什么问题,希望高手帮忙看看
[mw_shl_code=c,true]while(1)
{
if(PAin(0) == 1)
{
delay_ms(10);
if(PAin(0) == 1)
PBout(5) = !PBout(5);
}
delay_ms(10);
} [/mw_shl_code]
时间我试着改过很多值,但效果还是不是很好,原子哥的代码我看了看还有些疑问,也希望大家解答一下
[mw_shl_code=c,true]u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//°??ü°?????±ê??
if(mode)key_up=1; //?§????°?
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))
{
delay_ms(10);//??????
key_up=0;
if(KEY0==0)return KEY_RIGHT;
else if(KEY1==0)return KEY_DOWN;
else if(KEY2==0)return KEY_LEFT;
else if(KEY3==1)return KEY_UP;
}else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;
return 0;// ??°??ü°???
}[/mw_shl_code]
1.一进入函数,就将key_up = 1;那么设不设置mode = 1是不是就没有了意义?
2.同样是延时10ms,为什么我的效果那么差,原子哥的那么好?
|