OpenEdv-开源电子网

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

战舰的触摸按键实验中,TPAD_Scan函数中,有一个变量keyen不知道有什么用,求助

[复制链接]

14

主题

115

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2015-12-19
在线时间
307 小时
发表于 2015-12-19 21:13:25 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]//扫描触摸按键 //mode:0,不支持连续触发(按下一次必须松开才能按下一次);1,支持连续触发(可以一直按下) //返回值:0,没有按下;1,有按下; #define TPAD_GATE_VAL 100 //触摸的门限值,也就是必须大于tpad_default_val+TPAD_GATE_VAL,才认为是有效触摸. u8 TPAD_Scan(u8 mode) { static u8 keyen=0; //0,可以开始检测;>0,还不能开始检测 u8 res=0; u8 sample=3; //默认采样次数为3次 u16 rval; if(mode) { sample=6; //支持连按的时候,设置采样次数为6次 keyen=0; //支持连按 } rval=TPAD_Get_MaxVal(sample); if(rval>(tpad_default_val+TPAD_GATE_VAL))//大于tpad_default_val+TPAD_GATE_VAL,有效 { if((keyen==0)&&rval>(tpad_default_val+TPAD_GATE_VAL))res=1; //keyen==0,有效 //printf("r:%d\r\n",rval); keyen=3; //至少要再过3次之后才能按键有效 } if(keyen)keyen--; return res; }[/mw_shl_code]
这段代码来自战舰的触摸按键实验,其中有一个变量keyen,首先定义static u8 keyen=0;
进入
if(rval>(tpad_default_val+TPAD_GATE_VAL))//大于tpad_default_val+TPAD_GATE_VAL,有效
{  
if((keyen==0)&&rval>(tpad_default_val+TPAD_GATE_VAL))res=1; //keyen==0,有效 
//printf("r:%d\r\n",rval);           
keyen=3; //至少要再过3次之后才能按键有效   


然后这个keyen==3 还有后面的keyen-- 没啥用啊,求解释,论坛也搜索了,没找到有解释这个keyen变量的

最佳答案

查看完整内容[请看2#楼]

这个变量作用是触摸按键不支持连续触摸功能时,在一次触摸有效后必须松开后程序运行keyen——次数后再次触摸才能有效.这里keyen=3 就是一次有效触摸松开后程序要运行三次keyen--3次后,也就是一定的时间间隔后,再次触摸才有效!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

611

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1929
金钱
1929
注册时间
2014-10-6
在线时间
625 小时
发表于 2015-12-19 21:13:26 | 显示全部楼层
这个变量作用是触摸按键不支持连续触摸功能时,在一次触摸有效后必须松开后程序运行keyen——次数后再次触摸才能有效.这里keyen=3 就是一次有效触摸松开后程序要运行三次keyen--3次后,也就是一定的时间间隔后,再次触摸才有效!
回复

使用道具 举报

14

主题

115

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
358
金钱
358
注册时间
2015-12-19
在线时间
307 小时
 楼主| 发表于 2015-12-20 10:24:14 | 显示全部楼层
回复【2楼】烟酒不沾:
---------------------------------
有一点强行延时的作用哈,谢了
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
20
金钱
20
注册时间
2016-7-26
在线时间
4 小时
发表于 2016-8-11 23:25:41 | 显示全部楼层
烟酒不沾 发表于 2015-12-19 21:13
这个变量作用是触摸按键不支持连续触摸功能时,在一次触摸有效后必须松开后程序运行keyen——次数后再次触 ...

为什么要让他隔一定时间再起效呢
回复

使用道具 举报

4

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2017-4-5
在线时间
24 小时
发表于 2017-4-6 11:22:32 | 显示全部楼层
我也不是很了解
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-7-5
在线时间
4 小时
发表于 2017-7-7 22:01:26 | 显示全部楼层
原子代码有些真挺有深意的啊

回复

使用道具 举报

6

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
368
金钱
368
注册时间
2018-8-31
在线时间
115 小时
发表于 2018-11-17 08:46:20 | 显示全部楼层
烟酒不沾 发表于 2015-12-19 21:13
这个变量作用是触摸按键不支持连续触摸功能时,在一次触摸有效后必须松开后程序运行keyen——次数后再次触 ...

经过多次试验,发现keyen--3次,实现不/支持连续触摸效果并不好!!mode=0或者1,几乎效果上的区别,是不是我做错了,请指教!
回复

使用道具 举报

6

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
368
金钱
368
注册时间
2018-8-31
在线时间
115 小时
发表于 2018-11-17 09:05:13 | 显示全部楼层
烟酒不沾 发表于 2015-12-19 21:13
这个变量作用是触摸按键不支持连续触摸功能时,在一次触摸有效后必须松开后程序运行keyen——次数后再次触 ...

把代码稍作改变,之后就会达到和按键试验几乎相同的效果了[mw_shl_code=c,true]#define TPAD_GATE_VAL 3000

u8 TPAD_Scan(u8 mode)
{
        static u8 keyen=0; //0,可以开始检测;>0,还不能开始检测
        u8 res=0;
        u8 sample=3; //默认采样次数为 3 次
        u16 rval;
        if(mode)
        {
                sample=6; //支持连按的时候,设置采样次数为 6 次
                keyen=0;  //支持连按
        }
        rval=TPAD_Get_MaxVal(sample);
        if(rval>(tpad_default_val+TPAD_GATE_VAL))//大于 tpad_default_val+TPAD_GATE_VAL,有效
        {
                if(keyen==0)res=1; //keyen==0,有效
                printf("r:%d\r\n",rval);
                keyen=3; //至少要再过 3 次之后才能按键有效
        }
//        if(keyen)keyen--;
        if(rval<(200)) keyen=0;
        return res;
}[/mw_shl_code]
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2019-8-19
在线时间
11 小时
发表于 2019-10-19 18:20:20 | 显示全部楼层
我觉得从逻辑上来说 keyen=2  也是可以的啊    跑完if(keyen)keyen--;  keyen就为1  手一直放着就一直进有效rval里 但是res永远置不了1 keyen又重新赋值2 只有松开 keyen才归0。。  原子哥 这个3是出于什么考虑呢  求指导下@正点原子
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2020-7-16 18:43:04 | 显示全部楼层
FiveLu 发表于 2019-10-19 18:20
我觉得从逻辑上来说 keyen=2  也是可以的啊    跑完if(keyen)keyen--;  keyen就为1  手一直放着就一直进有 ...

其他数字也行,只要实现不连续触发功能就好
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 10:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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