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

2019-08-30 08:16发布

本人小白一个,才开始接触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;   
}

这种写法应该比较容易理解,如有不妥的地方,请批评指正,毕竟新人,多多指导。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。