电容按键检测
/**
* @brief 按键扫描函数
* @param 无
* @retval 1:按键有效,0:按键无效
*/
uint8_t TPAD_Scan(void)
{
// keyen:按键检测使能标志
// 0:可以开始检测
// >0:还不能开始检测,表示按键一直被按下
// 注意:keytn 这个变量由 static 修饰,相当于一个全局变量,但是因为是在函数内部定义,
// 所以是相当于这个函数的全局变量,每次修改之前保留的是上一次的值
static uint8_t keyen=0;
uint8_t res=0,sample=3;
uint16_t scan_val;
// 根据sample值采样多次,并取最大值,小的一般是干扰或者是误触摸
scan_val = TPAD_Get_MaxVal(sample);
// 当扫描的值大于空载值加上默认的门限值之后,表示按键按下
// 这个TPAD_GATE_VAL根据硬件决定,需要实际测试
if(scan_val > (tpad_default_val+TPAD_GATE_VAL))
{
// 再次检测,类似于机械按键的去抖
scan_val = TPAD_Get_MaxVal(sample);
if( ( keyen == 0 )&& (scan_val > (tpad_default_val+TPAD_GATE_VAL)))
res = 1; // 有效的按键
// 如果按键一直被按下,keyen的值会一直在keyen的初始值和keyen-1之间循环,永远不会等于0
keyen = 2;
}
// 当按键没有被按下或者keyen>0时,会执行keyen--
if( keyen > 0)
keyen--;
return res;
}