我用的是探索者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;
}
请大神给出一些建议。 |