普通按键和电容按键扫描函数

阅读: 评论:0

普通按键和电容按键扫描函数

普通按键和电容按键扫描函数

普通按键和电容按键扫描函数

今天学习电容按键的时候发现那个扫描函数中的mode有点理解不了,上网查询后明白了,特此记录一下。我看的博客地址为:点这里

现阶段主要接触的按键函数有普通按键扫描函数和 电容按钮扫描函数,这两个函数如下:

普通按键函数
u8 KEY_Scan(u8 mode)
{	 static u8 key_up=1;//按键按松开标志if(mode)key_up=1;  //支持连按		  if(key_up&&(KEY0==0||KEY1==0||WK_UP==1)){delay_ms(10);//去抖动 key_up=0;if(KEY0==0)return 1;else if(KEY1==0)return 2; else if(WK_UP==1)return 3;}else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1; 	    return 0;// 无按键按下//*/
}

其他地方都挺好理解的,我就主要讲一下mode的应用。

在这个函数中mode为0时不支持连按,当mode为1时支持连按。每次只有当key_up为1的时候才会扫描按键,而如果mode==1,则每次进入函数的时候都会将key_up置为1,也就是每次执行这个函数都是有效的(注意key_up是static的,也就是它的值不会随着函数生命周期的结束而结束)。而如果不支持连按的话,则只有当所有按键都没有被按下的时候key_up才会置1。也就是必须要松开所有按键后的下一次按键才有效。

电容按键函数
#define TPAD_GATE_VAL  100
u8 TPAD_Scan(u8 mode) {static u8 keyen = 0;u8 times = 3, res = 0;u16 retVal;if(mode) {keyen = 0;times = 6;}retVal = TPAD_Get_MaxVal(times);if(retVal > (tpad_default_value + TPAD_GATE_VAL)) {if(keyen == 0) res = 1;keyen = 3;}if(keyen) keyen--;return res;
}

支持连按还是很好理解,主要是为什么当mode == 0 的时候是不支持连按的(其实也挺好理解的,主要是我太笨了),当mode=0的时候,当执行过一次有效扫描后keyen=3;然后keyen–后变成2,如果这时候我们的手没有松开,那么下一次执行这个函数的时候仍然会进入

if(retVal > (tpad_default_value + TPAD_GATE_VAL)) {if(keyen == 0) res = 1;keyen = 3;}

这个判断语句体,也就是说keyen又会被置为3,也就是如果我们的手没有松开,那么keyen永远不会等于0,所以永远无效。

如果我们的手松开了,那么keyen就不会被置为3了,就会随着keyen–的执行逐渐变为0,最终有效。

本文发布于:2024-02-05 01:24:37,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170720874061773.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:按键   电容   函数
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23