OpenEdv-开源电子网

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

4.3寸电容屏触摸太灵敏的问题!!!

[复制链接]

14

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
219
金钱
219
注册时间
2016-9-27
在线时间
43 小时
发表于 2017-3-22 20:39:21 | 显示全部楼层 |阅读模式
5金钱
做一个多级菜单的界面,但是由于电容触摸屏不知道什么原因,我按了一下触摸屏,进入下级菜单,然后下级菜单的这个位置的按钮也启动了。。。这个要怎么处理,,,急急急!就算延时也没有用啊!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

51

帖子

0

精华

高级会员

Rank: 4

积分
654
金钱
654
注册时间
2016-12-14
在线时间
332 小时
发表于 2017-3-22 20:41:39 | 显示全部楼层
这个按键要放开才能触发下一个按键程序问题吧
回复

使用道具 举报

14

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
219
金钱
219
注册时间
2016-9-27
在线时间
43 小时
 楼主| 发表于 2017-3-22 20:50:44 | 显示全部楼层
szjx1212 发表于 2017-3-22 20:41
这个按键要放开才能触发下一个按键程序问题吧

如何检测是否放开呢?
回复

使用道具 举报

0

主题

51

帖子

0

精华

高级会员

Rank: 4

积分
654
金钱
654
注册时间
2016-12-14
在线时间
332 小时
发表于 2017-3-22 21:10:09 | 显示全部楼层
ken233333 发表于 2017-3-22 20:50
如何检测是否放开呢?

读点,读不到就是放开了
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3347
金钱
3347
注册时间
2013-4-10
在线时间
333 小时
发表于 2017-3-22 21:10:31 | 显示全部楼层
本帖最后由 likunxue 于 2017-3-22 21:24 编辑
ken233333 发表于 2017-3-22 20:50
如何检测是否放开呢?

做个软件计数器,多少时间内没有触摸,就发送弹起消息
如果资源不紧张,用一个定时器设置为单脉冲摸式,当有触摸发生时,检测是否是有效触摸,如果是,给定时器的计数器付一个初值,并开启计时器,在这段时间内如果手没有离开触屏,会产生重复触摸检测,每次都给定时器重置计数初值,这样,如果要触摸的时间不大于弹起的时间,定时器就不会产生中断,当没有触摸的时间大于定时器的计数值后,定时器产生中断,发送弹起消息,自动关闭定时器,

当然如果是多任务,可以开启一个任务来单独处理触摸屏事件,用消息机制的方式处理触摸的按下,弹起,长按,点按,及向下或向下滑动等!

/********************************************************************************************
函 数 名: 根据初点与终点反回滑动方向
调    用: CTP_HUADONGSHIBIE(void)
参    数: 在全局数据结构体中        
反 回 值: 0示滑动,1向上,2向下,3向左,4向右
********************************************************************************************/   
char CTP_HUADONGSHIBIE(void)
     {
     if(CTP.JiShuQi >= 2 )
       {
       int dy = CTP.my - CTP.By; //计算坐标变化值
       int dx = CTP.Bx - CTP.mx;  
       if((CD_abs(dx) > 10)||(CD_abs(dy) > 10))
         { //做滑动方向识别  
         float fa = atan2(dy,dx)*57.29578f;//得到角度  
         if(fa >= -45 && fa < 45)return CHUMOXIAOXI_YOU;     //向右
         if(fa >= 45 && fa < 135)return CHUMOXIAOXI_SHANG;   //向上
         if(fa >= -135 && fa < -45)return CHUMOXIAOXI_XIA ;  //向下  
         if((fa >= 135 && fa <= 180)||(fa >= -180 && fa < -135))return CHUMOXIAOXI_ZUO; //向左
         }
       }
     return 0;
     }       





回复

使用道具 举报

14

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
219
金钱
219
注册时间
2016-9-27
在线时间
43 小时
 楼主| 发表于 2017-3-22 21:18:34 | 显示全部楼层
likunxue 发表于 2017-3-22 21:10
做个软件计数器,多少时间内没有触摸,就发送弹起消息

怎么样才能判断弹起啊?
回复

使用道具 举报

14

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
219
金钱
219
注册时间
2016-9-27
在线时间
43 小时
 楼主| 发表于 2017-3-22 21:19:16 | 显示全部楼层
szjx1212 发表于 2017-3-22 21:10
读点,读不到就是放开了

需要再次检测吗?
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3347
金钱
3347
注册时间
2013-4-10
在线时间
333 小时
发表于 2017-3-22 21:28:53 | 显示全部楼层
本帖最后由 likunxue 于 2017-3-22 21:30 编辑
ken233333 发表于 2017-3-22 21:18
怎么样才能判断弹起啊?

原子哥的电容屏,一有个输出信号,可以用外中断来读取
/****************************************************************************************
函数名: 外部中断5~9服务程序函数
调  用: 无
参  数: 无
返回值: 无      
****************************************************************************************/
void EXTI9_5_IRQHandler(void)
     {                 
     #if SYSTEM_SUPPORT_UCOS                     //如果使用ucos,
     OSIntEnter();                                 //进入中断            
     #endif         
     EXTI->PR = 1<< 8;                           //清除LINE8上的中断标志位      
     if(CT_INT == 0)
       {
       CTP.tpsta |= 0x80;                        //有触摸中断,标记有效触摸   
       CTP.mx = CTP.Bx;                          //前一次触摸坐标存副本
       CTP.my = CTP.By;               
       if(GT811_ReadPoint() == ERR_OK)           //扫描GT811 函数(只读取第一触摸坐标)      
         {
         TP_JISHUQI_CNT        = TP_DANQISHIJIAN;       //重置弹起时间计数器         
         if(TP_JISHISHINENG == 1)CTP.JiShuQi++;         
         else{
             TP_JISHISHINENG = 1;                //使能计数器           
             CTP.JiShuQi = 1;                  
             }
         OSMboxPost(sem_CTP_RS,(void*)0xe5);     //有效触模产生         
         }
       EXTI->PR = 1<< 8;                         //清除LINE8上的中断标志位     
       }     
     #if SYSTEM_SUPPORT_UCOS                     //如果使用ucos,
     OSIntExit();                                //触发任务切换软中断            
     #endif  
     }


回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-25 03:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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