电容按键实验程序中的u8 TPAD_Scan(u8 mode)有问题

2019-07-20 13:14发布


我用的是探索者F4板子,用原程序和论坛里修改的程序,在不支持连续按的情况下,按住后还是隔不同的时间闪烁。
不过我把程序中加了printf语句。
再修改下sample和keyen的参数就好了。
不明白这是什么原因。
刚开始以为是延时的原因,但是用延时delay_ms()函数来代替printf语句,还是不行。
实在搞不懂,这是什么原因。


以下是我的程序:
u8 TPAD_Scan(u8 mode)
{
    static u8 keyen=0;  //0,可以开始检测;>0,还不能开始检测     
    u8 res=0;
    u8 sample=10;        //默认采样次数为10次  ,因为这个电容充电时捕获的上升沿时间差异教大,有的会小于未加TPAD电容的时间。
    u16 rval;
    if(mode)
    {      
        keyen=0;        //支持连按   
    }
    rval=TPAD_Get_MaxVal(sample);
     delay_ms(10);                //此处之所以采用延时还是为了rval的值稳定
                printf("rval:%d ",rval);  //可以把延时去掉,把printf加上去,因为都是起延时的作用
                                             //若把printf去掉就必须加延时
    if(rval>(tpad_default_val+TPAD_GATE_VAL))//大于tpad_default_val+TPAD_GATE_VAL,有效
    {                           
        if(keyen==0)res=1;      //keyen==0,有效
        printf("keyen:%d ",keyen);    //此处的printf对实验有很大的影响                                    
        keyen=5;                //至少要再过4次,因为以防按下时,rval的值不稳定出现连续小于tpad_default_val+TPAD_GATE_VAL值的情况。
    }
    if(keyen)keyen--;               
    return res;
}

请大神给出一些建议。

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