OpenEdv-开源电子网

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

触摸层选择问题,望提供一些方法或思路,谢谢!自己更改后显示重叠了。

[复制链接]

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2018-7-10
在线时间
45 小时
发表于 2020-1-9 16:06:51 | 显示全部楼层 |阅读模式
20金钱
阿波罗H743+1024*600,以下为红色部分为更改的代码,触摸之后显示直接部分重叠和背景图片显示错误,望能提供建议,谢谢。
  1. //TOUCH任务
  2. void touch_task(void *p_arg)
  3. {
  4.         OS_ERR err;
  5.        

  6.         while(1)
  7.         {
  8. <font color="#ff0000">                OSSchedLock(&err);
  9.     tp_dev.scan(0);
  10.                 OSSchedUnlock(&err);
  11.                 //GUI_TOUCH_Exec();       
  12.                 OSTimeDlyHMSM(0,0,0,20,OS_OPT_TIME_PERIODIC,&err);//延时5ms</font>
  13.         }
  14. }
复制代码

  1. u8 FT5206_Scan(u8 mode)
  2. {
  3.         u8 buf[4];
  4.         u8 i=0;
  5.         u8 res=0;
  6.         u8 temp;
  7.         GUI_PID_STATE State;

  8.        
  9.         static u8 t=0;//控制查询间隔,从而降低CPU占用率   
  10.         t++;
  11.         if((t%10)==0||t<10)//空闲时,每进入10次CTP_Scan函数才检测1次,从而节省CPU使用率
  12.         {
  13.                 FT5206_RD_Reg(FT_REG_NUM_FINGER,&mode,1);//读取触摸点的状态  
  14.                 if((mode&0XF)&&((mode&0XF)<6))
  15.                 {
  16.                         temp=0XFF<<(mode&0XF);//将点的个数转换为1的位数,匹配tp_dev.sta定义
  17.                         tp_dev.sta=(~temp)|TP_PRES_DOWN|TP_CATH_PRES;
  18.                         for(i=0;i<5;i++)
  19.                         {
  20.                                 if(tp_dev.sta&(1<<i))                //触摸有效?
  21.                                 {
  22.                                         FT5206_RD_Reg(FT5206_TPX_TBL[i],buf,4);        //读取XY坐标值
  23.                                         if(tp_dev.touchtype&0X01)//横屏
  24.                                         {
  25.                                                 tp_dev.y[i]=((u16)(buf[0]&0X0F)<<8)+buf[1];
  26.                                                 tp_dev.x[i]=((u16)(buf[2]&0X0F)<<8)+buf[3];
  27.                                         }else
  28.                                         {
  29.                                                 tp_dev.x[i]=lcddev.width-(((u16)(buf[0]&0X0F)<<8)+buf[1]);
  30.                                                 tp_dev.y[i]=((u16)(buf[2]&0X0F)<<8)+buf[3];
  31.                                         }  
  32.                                         if((buf[0]&0XF0)!=0X80)tp_dev.x[i]=tp_dev.y[i]=0;//必须是contact事件,才认为有效
  33.                                         //printf("x[%d]:%d,y[%d]:%d\r\n",i,tp_dev.x[i],i,tp_dev.y[i]);
  34.                                 }                       
  35.                         }
  36.                         res=1;
  37.                         if(tp_dev.x[0]==0 && tp_dev.y[0]==0)mode=0;        //读到的数据都是0,则忽略此次数据
  38. <font color="#ff0000">      else
  39.                         {
  40.                                 #if GUI_NUM_LAYERS == 1
  41.                                          State.Layer = 0;
  42.                           #elif GUI_NUM_LAYERS == 2
  43.                                         State.Layer = 1;
  44.                           #endif
  45.                                 State.Pressed=1;
  46.                                 State.x=tp_dev.x[0];
  47.                                 State.y=tp_dev.y[0];
  48.                           GUI_PID_StoreState(&State);
  49.                         }</font>
  50.                         t=0;                //触发一次,则会最少连续监测10次,从而提高命中率
  51.                 }
  52.         }
  53.         if((mode&0X1F)==0)//无触摸点按下
  54.         {
  55.                 if(tp_dev.sta&TP_PRES_DOWN)        //之前是被按下的
  56.                 {
  57.                         tp_dev.sta&=~(1<<7);        //标记按键松开
  58.                 }else                                                //之前就没有被按下
  59.                 {
  60.                         tp_dev.x[0]=0xffff;
  61.                         tp_dev.y[0]=0xffff;
  62.                         tp_dev.sta&=0XE0;        //清除点有效标记       
  63.                 }
  64. <font color="#ff0000">                #if GUI_NUM_LAYERS == 1
  65.                                 State.Layer = 0;
  66.           #elif GUI_NUM_LAYERS == 2
  67.                                         State.Layer = 1;
  68.                 #endif
  69.                 State.Pressed=0;
  70.                 State.x=-1;
  71.                 State.y=-1;
  72.           GUI_PID_StoreState(&State);</font>               
  73.         }        
  74.         if(t>240)t=10;//重新从10开始计数
  75.         return res;
  76. }
复制代码


最佳答案

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-1-9 16:06:52 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-11 13:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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