实验了很多次了,还是有点不明白,但是我终于发现问题在哪了,知其然但是还有点不知其所以然
u8 TPAD_Scan(u8 mode)
{
static u8 keyen=0; //0,可以开始检测;>0,还不能开始检测
u8 res=0;
u8 sample=3; //默认采样次数为3次
u16 rval;
if(mode)
{
sample=6; //支持连按的时候,设置采样次数为6次
keyen=0; //支持连按
}
rval=TPAD_Get_MaxVal(sample);
if(rval>(tpad_default_val+TPAD_GATE_VAL))//大于tpad_default_val+TPAD_GATE_VAL,有效
{
rval=TPAD_Get_MaxVal(sample);
if((keyen==0)&&(rval>(tpad_default_val+TPAD_GATE_VAL)))//大于tpad_default_val+TPAD_GATE_VAL,有效
{
res=1;
}
// printf("r:%d\r\n",rval);
keyen=5; //至少要再过5次之后才能按键有效
}
else if(keyen>2)keyen=2; //如果检测到按键松开,则直接将次数将为2,以提高响应速度
if(keyen)keyen--;
return res;
}
上面的程序红色部分就有点不明白
经测试:
1.keyen=5;到keyen=2都一样能够出现相同的现象,改成1就不行了,我个人解是因为keyen--使得keyen=0,之后就有点不解?
2. 去掉else if(keyen>2)keyen=2; 这样也一样,但是去掉if(keyen)keyen--;就不行了,抓狂?
3.还是请原子哥能够指点一下红色部分,确实犯糊。
|