打印
[技术问答]

关于触摸开关的这个问题,该如何解决?

[复制链接]
4229|54
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lmn2005|  楼主 | 2023-9-7 12:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lmn2005 于 2023-9-7 12:49 编辑

近日应用了SC92F84H3的触摸功能,调试正常,就是有一个问题,不知道怎样解决。请各位大佬指教,谢谢!

 while (1)
        {
                /*<UserCodeStart>*/ /*<SinOne-Tag><14>*/
        if(SOCAPI_TouchKeyStatus & 0x80)
        {
            /*<UserCodeStart>*//*<SinOne-Tag><22>*/
            SOCAPI_TouchKeyStatus &= 0x7f;
            /*<UserCodeEnd>*//*<SinOne-Tag><22>*/
            /*<UserCodeStart>*//*<SinOne-Tag><18>*/
            exKeyValueFlag = TouchKeyScan();
            /*<UserCodeEnd>*//*<SinOne-Tag><18>*/
            /*<UserCodeStart>*//*<SinOne-Tag><35>*/        
                if(exKeyValueFlag & TK17)        i++;
            //UserCode();
            /*<UserCodeEnd>*//*<SinOne-Tag><35>*/
            /*<UserCodeStart>*//*<SinOne-Tag><36>*/
            TouchKeyRestart();
            /*<UserCodeEnd>*//*<SinOne-Tag><36>*/
        }
                TM1636_display(i/100, i/10%10, i%10,25, 0);//显示
                /***User program***/
                /*<UserCodeEnd>*/ /*<SinOne-Tag><14>*/
                 /*<Begin-Inserted by EasyCodeCube for Condition>*/
        }

如果使用上面的代码来获取触控信号并处理数据(i++)时,每次i加1的幅度太大、速度太快,长按触摸开关时,i在不断增加,当然i都在取值范围内。
如果采用下面的代码,效果也不如愿以偿:
  
 while (1)
        {
                /*<UserCodeStart>*/ /*<SinOne-Tag><14>*/
        if(SOCAPI_TouchKeyStatus & 0x80)
        {
            /*<UserCodeStart>*//*<SinOne-Tag><22>*/
            SOCAPI_TouchKeyStatus &= 0x7f;
            /*<UserCodeEnd>*//*<SinOne-Tag><22>*/
            /*<UserCodeStart>*//*<SinOne-Tag><18>*/
            exKeyValueFlag = TouchKeyScan();
            /*<UserCodeEnd>*//*<SinOne-Tag><18>*/
            /*<UserCodeStart>*//*<SinOne-Tag><35>*/        
                if(exKeyValueFlag & TK17)        
                {
                while(TouchKeyScan()& TK17);//等待按键弹起
                i++;        
                }
            //UserCode();
            /*<UserCodeEnd>*//*<SinOne-Tag><35>*/
            /*<UserCodeStart>*//*<SinOne-Tag><36>*/
            TouchKeyRestart();
            /*<UserCodeEnd>*//*<SinOne-Tag><36>*/
        }
                TM1636_display(i/100, i/10%10, i%10,25, 0);//显示
                /***User program***/
                /*<UserCodeEnd>*/ /*<SinOne-Tag><14>*/
                 /*<Begin-Inserted by EasyCodeCube for Condition>*/
        }


如果采用上述代码来获取触控信号并处理数据的话,变量 i 加1的速度却显得太慢,也就是在按键弹起后,不随即加1,大约要延迟1秒以上才加1,不像普通轻触开关的速度。

请问大佬,像这种情况,该如何修改代码,才能使触控的效果与普通轻触开关一样,按一下、上来,i 才随即加1不延迟?

使用特权

评论回复
沙发
supernan| | 2023-9-7 22:28 | 只看该作者
不懂,坐等高手

使用特权

评论回复
板凳
zwsam| | 2023-9-8 09:01 | 只看该作者
不错啊

使用特权

评论回复
地板
lmn2005|  楼主 | 2023-9-8 14:21 | 只看该作者
关于触摸的所有函数原型,都打包在一个叫SC92F8XHX_HighSensitive_lib_T1_L_V1.0.0.lib的函数库中,至于每个函数或中断具体是怎样实施的,只有赛元工程师才清楚,我们这帮用户都是不得而知的。

使用特权

评论回复
5
xiaochentongzhi| | 2023-9-18 13:44 | 只看该作者
这个函数因为是采用扫描的关系,扫一轮的时间与你的按键个数有关系,放此处时间会不准确,正确做法是放一个标志位,在定时器中断里面去判断累计时间即可。

使用特权

评论回复
评论
lmn2005 2023-9-19 08:02 回复TA
不知道触摸的中断在哪里,没办法设置标志位。 
6
zhu1982lin| | 2023-9-22 01:18 | 只看该作者
一般代码中都不能使用 while循环等待.
正常做法是在  if(exKeyValueFlag & TK17) 设置一个 按键按下标志(如:keyDown = 1),
然后在后面 if(TouchKeyScan()& TK17)判断 改为 if((keyDown == 1) && (TouchKeyScan()& TK17));//按键弹起后的处理.
--------------
if(exKeyValueFlag & TK17)        
{
       while(TouchKeyScan()& TK17);//等待按键弹起
       i++;        
}
---------  改为 ---------
if(exKeyValueFlag & TK17)        
{
   keyDown = 1;
   i  ++;
}
if( (keyDown == 1) && (TouchKeyScan()& TK17) )
{
    keyDown = 0;
    //按键弹起 后的处理
}

使用特权

评论回复
评论
lmn2005 2023-9-26 10:58 回复TA
试了,上面的思路看是没有错,就是实际上也不好用。 
lmn2005 2023-9-25 15:48 回复TA
有空试一试。 
7
lmn2005|  楼主 | 2023-10-8 19:07 | 只看该作者
看起来这个问题是无法解决的了

使用特权

评论回复
8
caigang13| | 2023-10-8 20:48 | 只看该作者
加个延时判断处理

使用特权

评论回复
9
tpgf| | 2023-10-9 16:37 | 只看该作者
需要在每次循环的时候加一个小小的延时吗

使用特权

评论回复
10
drer| | 2023-10-9 16:48 | 只看该作者
还是应该使用其他判定语句 这样容易死循环

使用特权

评论回复
11
wiba| | 2023-10-9 17:19 | 只看该作者
用示波器看一下实际的电平是不是回复正常了

使用特权

评论回复
12
kxsi| | 2023-10-10 16:25 | 只看该作者
上边的代码基本没有时间间隔 下边的代码长时间等待也不好

使用特权

评论回复
13
coshi| | 2023-10-10 16:48 | 只看该作者
考虑使用中断方式来解决这个问题吗

使用特权

评论回复
评论
lmn2005 2023-11-2 10:45 回复TA
找不到中断的入口,估计集成在SC92F8XHX_HighSensitive_lib_T1_L_V1.0.0.lib中 
lmn2005 2023-10-10 18:46 回复TA
中断函数原型,可能打包在一个叫SC92F8XHX_HighSensitive_lib_T1_L_V1.0.0.lib的函数库中 
14
qcliu| | 2023-10-10 17:34 | 只看该作者
只能采用一种折中的办法了  这样不太耗费资源

使用特权

评论回复
15
udaidfa002| | 2023-11-2 09:20 | 只看该作者
使用中断进行识别试试。

使用特权

评论回复
评论
lmn2005 2023-11-2 10:44 回复TA
找不到中断的入口,估计集成在SC92F8XHX_HighSensitive_lib_T1_L_V1.0.0.lib中 
16
LLGTR| | 2023-12-4 18:19 | 只看该作者
只能有一个折衷的解决方案,不会太耗费资源

使用特权

评论回复
评论
lmn2005 2023-12-4 18:57 回复TA
现在都搁置了,因为暂时找不到有效的方法。 
17
lmn2005|  楼主 | 2024-4-9 14:59 | 只看该作者
请问SC92F8XHX触控开发,可以直接用代码不再用厂方的.lib库了吗?

使用特权

评论回复
18
RDS小定| | 2024-4-9 18:50 | 只看该作者
lmn2005 发表于 2024-4-9 14:59
请问SC92F8XHX触控开发,可以直接用代码不再用厂方的.lib库了吗?

触摸必须使用厂家提供的触摸库

使用特权

评论回复
19
RDS小定| | 2024-4-9 18:53 | 只看该作者
每个触摸MCU都有触摸例程和配套文档,照搬例程里的框架,这都是经过了无数次验证的。  

使用特权

评论回复
评论
lmn2005 2024-4-9 19:01 回复TA
请提供一下配套文档的下载网址,谢谢! 
20
chenqianqian| | 2024-4-9 20:05 | 只看该作者
逻辑上处理就行,当检测到触摸有效,先不执行下一步,等检测到触摸失效后,才执行下一步。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

522

帖子

1

粉丝