RTT按键扫描加防抖后,结果输出2次

2019-07-21 00:16发布

代码如下,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);
    }
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。