OpenEdv-开源电子网

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

战舰M3第35讲电容触摸按键实验TPAD_SCAN函数另一种写法

[复制链接]

0

主题

0

帖子

0

精华

新手入门

积分
1
金钱
1
注册时间
2018-9-12
在线时间
0 小时
发表于 2017-3-10 13:53:39 | 显示全部楼层 |阅读模式
本人小白一个,才开始接触STM32,看到电容触摸按键实验中的TPAD_SCAN函数,有点难以理解,故效仿实体按键重新写了一个TPAD_SCAN函数,不支持连续按键本人才疏学浅如有不当各位前辈指点
整个工程中仅仅TPAD_SCAN函数不一样,其余函数与例程相同,故本贴只发布TPAD_SCAN函数及相关的一些参数。
前提:1MHz的采样频率,即Tpad_Init(72),计数一次约1us。
①通过串口调试助手得到tpad_default_val的值。打开串口调试助手后,按下战舰开发板上的RESET按键可复位程序,可得到tpad_default_val的值,本人得到的值如图,因人而异
TIM图片20170310133956.png
得到的tpad_default_val的值约为18。
②确定门限值。将手指按住电容触摸按键,点击RESET按键,可得到电容按键按下后的充电时间,如图
TIM图片20170310134318.png
得到的值约为60。这样就可以确定门限值的取值范围约为1-40,我们去取中间值20,即#define TPAD_GATE_VAL 20
③编写Tpad_Scan()函数。
u8 tpad_scan()
{
    u8 flag = 0;
    u16 maxval;
    maxval = tpad_get_maxval(3);   //采样三次得到充电时间最大值
    if(maxval > (tpad_default_val + TPAD_GATE_VAL))   //电容触摸按键已按下
    {
        delay_ms(5);   //消抖
        maxval = tpad_get_maxval(1);   //采样一次
        if(maxval > (tpad_default_val + TPAD_GATE_VAL))   //再次确定按键已按下
            flag = 1;   //按下标志flag置1
        maxval = tpad_get_maxval(1);   //采样
        while(!(maxval < (tpad_default_val + 10)))   //等待按键释放
            maxval = tpad_get_maxval(1);
    }
    return flag;   
}

这种写法应该比较容易理解,如有不妥的地方,请批评指正,毕竟新人,多多指导。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

145

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
462
金钱
462
注册时间
2016-12-14
在线时间
75 小时
发表于 2017-3-13 17:30:29 | 显示全部楼层
谢谢分享。。同新手,加油
书山有路勤为径,学海无涯苦作舟!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-14 02:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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