新手上路 
 
	- 积分
 - 44
 
        - 金钱
 - 44 
 
       - 注册时间
 - 2018-7-9
 
      - 在线时间
 - 24 小时
 
 
 
 | 
 
 
发表于 2020-2-3 17:24:07
|
显示全部楼层
 
 
 
请问各位大佬有没有遇到如下问题: gt911   1024*600的屏幕会在没有触摸的情况下,错误的进入GT911_Scan 这个回调函数,然后获取的坐标是上次的坐标?? 
- u8 GT911_Scan(u8 mode)
 
 - {
 
 -         u8 buf[4];
 
 -         u8 i = 0;
 
 -         u8 res = 0;
 
 -         u8 temp;
 
 -         static u8 t = 0;                                                                //控制查询间隔,从而降低CPU占用率   
 
 -         
 
 -         t++;
 
 -         if((t%10)==0||t<10)                                                                //空闲时,每进入10次CTP_Scan函数才检测1次,从而节省CPU使用率
 
 -         {
 
 -                 GT911_RD_Reg(GT911_GSTID_REG, &mode, 1);        //读取触摸点的状态  
 
 -                 
 
 -                  if(mode&0X80&&((mode&0XF)<6))
 
 -                 {
 
 -                         temp=0;
 
 -                         GT911_WR_Reg(GT_GSTID_REG,&temp,1);                //清标志
 
 -                 }                
 
  
-                 if((mode&0XF)&&((mode&0XF)<6))
 
 -                 {
 
 -                         temp=0XFF<<(mode&0XF);                                        //将点的个数转换为1的位数,匹配tp_dev.sta定义 
 
 -                         tp_dev.sta=(~temp)|TP_PRES_DOWN|TP_CATH_PRES; 
 
 -                         for(i=0;i<5;i++)
 
 -                         {
 
 -                                 if(tp_dev.sta&(1<<i))                                //触摸有效?
 
 -                                 {
 
 -                                         GT911_RD_Reg(GT911_TPX_TBL[i],buf,4);                                //读取XY坐标值 
 
  
-                                         if(tp_dev.touchtype&0X01)//横屏                                                        
 
 -                                         {
 
 -                                                 tp_dev.x[i]=(((u16)(buf[1]&0X0F)<<8)+buf[0]);        //lcddev.width-
 
 -                                                 tp_dev.y[i]=((u16)(buf[3]&0X0F)<<8)+buf[2];
 
 -                                         }
 
 -                                         else
 
 -                                         {
 
 -                                                 tp_dev.y[i]=((u16)(buf[1]&0X0F)<<8)+buf[0];
 
 -                                                 tp_dev.x[i]=((u16)(buf[3]&0X0F)<<8)+buf[2];
 
 -                                         }
 
 -                                 }                        
 
 -                         } 
 
 -                         res=1;
 
  
-                         if(tp_dev.x[0]>lcddev.width||tp_dev.y[0]>lcddev.height)                        //非法数据(坐标超出了)
 
 -                         { 
 
 -                                 if((mode&0XF)>1)                                        //有其他点有数据,则复第二个触点的数据到第一个触点.
 
 -                                 {
 
 -                                         tp_dev.x[0]=tp_dev.x[1];
 
 -                                         tp_dev.y[0]=tp_dev.y[1];
 
 -                                         t=0;                                                        //触发一次,则会最少连续监测10次,从而提高命中率
 
 -                                 }
 
 -                                 else                                                                //非法数据,则忽略此次数据(还原原来的)  
 
 -                                 {
 
 -                                         tp_dev.x[0]=tp_dev.x[4];
 
 -                                         tp_dev.y[0]=tp_dev.y[4];
 
 -                                         mode=0X80;                
 
 -                                         tp_dev.sta = temp;                                //恢复tp_dev.sta
 
 -                                 }
 
 -                         }
 
 -                         else
 
 -                         {
 
 -                                 t=0;                                                                //触发一次,则会最少连续监测10次,从而提高命中率
 
 -                         }
 
 -                 }
 
 -         }
 
 -         
 
 -         if((mode&0X8F)==0X80)                                                        //无触摸点按下
 
 -         { 
 
 -                 if(tp_dev.sta&TP_PRES_DOWN)                                        //之前是被按下的
 
 -                 {
 
 -                         tp_dev.sta&=~(1<<7);                                        //标记按键松开
 
 -                 }
 
 -                 else                                                                                //之前就没有被按下
 
 -                 { 
 
 -                         tp_dev.x[0]=0xffff;
 
 -                         tp_dev.y[0]=0xffff;
 
 -                         tp_dev.sta&=0XE0;                                                //清除点有效标记        
 
 -                 }         
 
 -         }         
 
 -         if(t>240)
 
 -         {
 
 -                 t=10;                                                                                //重新从10开始计数
 
 -                 //printf("运行到SCAN\r\n");
 
 -         }
 
 -         return res;
 
 - }
 
  复制代码 |   
 
 
 
 |