代码如下,key线程扫描按键,并输出,但是每次按键都会执行2次输出,去掉防抖就OK了,这是怎么回事那?
static u8 key_up=1;//按键按松开标志
u8 key_scan(u8 mode)
{
if(mode)
key_up=1; //支持连按,每次扫描都认为是无按键
if(key_up&&(PGin(6)||PGin(7)))
{
rt_thread_delay(10);//去抖动
rt_kprintf("position1!
");
key_up=0;
if(PGin(6))
return 6;
else if(PGin(7))
rt_kprintf("position2!
");
return 7;
}
else if(PGin(6)==0&&PGin(7)==0)
key_up=1;
return 0;// 无按键按下'
}
void key_thread_entry(void* parameter)
{
rt_hw_key_init();
while(1)
{
switch(key_scan(0))
{
case 6:
PBout(15)=!PBout(15);
rt_kprintf("O11 is plug");
break;
case 7:
timer_conrol();
break;
default:
break;
}
rt_thread_delay(100);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>