6235|14

89

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于ST触摸按键连续响应 [复制链接]

用STM8S做了一个触摸按键,按下按键后通过UART发送一个数据

     能不能实现我手指触摸按键后,就不停的发送数据,手指离开按键的时候就停止发送呢?
     我用sSCKeyInfo[1].Setting.b.DETECTED这个变量做循环控制条件好像不行

    多谢
此帖出自stm32/stm8论坛

最新回复

                                 按下按键后通过UART发送数据,其实没有必要。 调试STM8的触摸按键,有更好的方式,就是在watch窗口加入需要看的变量,比如sSCKeyInfo[1].Setting.b.DETECTED,然后点右键打开read-on-the-fly,就会不停刷新watch窗口的变量了。  详情 回复 发表于 2010-5-26 10:35
点赞 关注
 

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 可以增加一个变量,然后你的想法就很容易实现了。
此帖出自stm32/stm8论坛
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 其实用sSCKeyInfo[0].Setting.b.DETECTED作为判断条件,也可以实现的
此帖出自stm32/stm8论坛
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
谢谢你啊

我用sSCKeyInfo[0].Setting.b.DETECTED作为判断条件的时候,串口会不停的发送数据,调试状态下sSCKeyInfo[0].Setting.b.DETECTED的值始终为1,不发生改变,循环无法停止。

如果增加变量,思路如何,请指教!多谢!
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 

那你手指离开的时候,又没把这个变量清掉呢?
个人想法,如果有手指触发,那么等待发送完毕,检测是否还有手指按着,又继续发送数据,没有清楚这个变量状态,不知道这样说对不对
此帖出自stm32/stm8论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢你啊

我用sSCKeyInfo[0].Setting.b.DETECTED作为判断条件的时候,串口会不停的发送数据,调试状态下sSCKeyInfo[0].Setting.b.DETECTED的值始终为1,不发生改变,循环无法停止。

如果增加变量,思路如何,请指 ...
调试状态下sSCKeyInfo[0].Setting.b.DETECTED的值始终为1,这说明触摸按键还没有正常工作?
正常情况下,手指离开后sSCKeyInfo[0].Setting.b.DETECTED的值应该变成0
此帖出自stm32/stm8论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

7
 



   也就是说sSCKeyInfo[0].Setting.b.DETECTED这个位变量初始为0
   当我手指触摸按键后,就会自动变为1,手指移开就自动恢复为0
   如果是这个原理,应该可以实现我想要的结果
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

8
 
                                 楼主所说的,通过稍微修改下现有软件应该不难实现
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(中级)

9
 
6# IJK  


   也就是说sSCKeyInfo[0].Setting.b.DETECTED这个位变量初始为0
   当我手指触摸按键后,就会自动变为1,手指移开就自动恢复为0

正常情况就是这样
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 


   大哥,我遇到不正常情况了


void ExtraCode_StateMachine(void)
{
if ((TSL_GlobalSetting.b.CHANGED) && (TSLState == TSL_IDLE_STATE))
  {
   
  TSL_GlobalSetting.b.CHANGED = 0;
   
    if (sSCKeyInfo[0].Setting.b.DETECTED) /* KEY 1 touched */
  {
      if (Led1State == OFF)
      {
        LED1_ON();
      }
      else
      {
        LED1_OFF();
      }
      
    UART2_DR = key1;
    while (!(UART2_SR & 0x80));
      
    }
   
    if (sSCKeyInfo[1].Setting.b.DETECTED) /* KEY 2 touched */
    {
      if (Led2State == OFF)
      {
        LED2_ON();
      }
      else
      {
        LED2_OFF();
      }
   while (sSCKeyInfo[1].Setting.b.DETECTED == 1)
   {
   UART2_DR = key2;
   while (!(UART2_SR & 0x80));
    }
    }
   
    if (sSCKeyInfo[2].Setting.b.DETECTED) /* KEY 3 touched */
    {
      if (Led3State == OFF)
      {
        LED3_ON();
      }
      else
      {
        LED3_OFF();
      }
   UART2_DR = key3;
   while (!(UART2_SR & 0x80));
    }
  }
}

   我的程序是上面这段,我按下key2后,就进入死循环,串口不停的输出数据key2;单步执行,发现sSCKeyInfo[1].Setting.b.DETECTED的值为1保持不变,只有经过((TSL_GlobalSetting.b.CHANGED) && (TSLState == TSL_IDLE_STATE))这行代码后才变为0;
   对这个软件库不熟悉,还请指教如何实现我想要的效果,增加变量也行啊!
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(中级)

11
 
代码写得有问题。
不应该在 ExtraCode_StateMachine函数里面通过串口发送数据
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

12
 
                                 可以增加一个变量试试
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(中级)

13
 
代码写得有问题,在 ExtraCode_StateMachine函数里用while是不妥的,改成这样应该可行

    if (sSCKeyInfo[1].Setting.b.DETECTED) /* KEY 2 touched */
    {
      if (Led2State == OFF)
      {
        LED2_ON();
      }
      else
      {
        LED2_OFF();
      }
     if(UART2_SR & 0x80) /* 如果串口2 可以发送数据 */
     {
       UART2_DR = key2;
      }
    }
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

14
 
                                 让串口一直不停地发数据不是个好办法,串口太过繁忙, 有可能会影响程序的其他地方
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

15
 
按下按键后通过UART发送数据,其实没有必要。

调试STM8的触摸按键,有更好的方式,就是在watch窗口加入需要看的变量,比如sSCKeyInfo[1].Setting.b.DETECTED,然后点右键打开read-on-the-fly,就会不停刷新watch窗口的变量了。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表