OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4117|回复: 2

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

[复制链接]

3

主题

13

帖子

0

精华

高级会员

Rank: 4

积分
701
金钱
701
注册时间
2017-7-19
在线时间
91 小时
发表于 2017-7-20 13:53:42 | 显示全部楼层 |阅读模式

我用的是探索者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\r\n",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\r\n",keyen);    //此处的printf对实验有很大的影响                                    
        keyen=5;                //至少要再过4次,因为以防按下时,rval的值不稳定出现连续小于tpad_default_val+TPAD_GATE_VAL值的情况。
    }
    if(keyen)keyen--;               
    return res;
}

请大神给出一些建议。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

13

帖子

0

精华

高级会员

Rank: 4

积分
701
金钱
701
注册时间
2017-7-19
在线时间
91 小时
 楼主| 发表于 2017-7-21 20:08:52 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

高级会员

Rank: 4

积分
701
金钱
701
注册时间
2017-7-19
在线时间
91 小时
 楼主| 发表于 2017-7-21 20:10:00 | 显示全部楼层

原子哥,求解惑
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-12-23 03:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表