触摸屏调试经验谈

来源:互联网 发布:淘宝哪家衣服好看时尚 编辑:程序博客网 时间:2024/05/27 01:06

   //========================================================================
  //TITLE:
  //    触摸屏调试经验谈
  //AUTHOR:
  //    norains
  //DATE:
  //    Thursday 19-March-2009
  //Environment:
  //    WINDOWS CE 5.0
  //========================================================================
  
  1.校准之后依然无法正确使用
  
   这种情况最容易发生驱动和硬件上的错位,很可能是因为驱动对X+,X-(或Y+,Y-)的定义与硬件不一致造成。这种情况是无法通过wince的触摸屏校准程序来转换坐标的。唯一的方法只能在驱动层对坐标进行转换,例如:
  
  #ifdef REVERSE_X
   *x = MAX_X - *x + MIN_X;
  #endif
  
  #ifdef REVERSE_Y
   *y = MAX_Y - *y + MIN_Y;
  #endif
  
  
  2.点击时会无规律飘忽不定
  
   该问题一般因为电压不稳,可以先查一下ADC芯片在工作时,电压是否处于一种稳定的状态。
  
  
  3.点击时有规律的漂移
  
   这点和第二点不同,该点主要是出在软件方面。最直观的例子是点击explorer的图标,它会呈一定规律的移动。这种情况一般发生于触摸屏大小改变,比如从4.3'变成7'。问题根源是驱动定义的数值和实际的触摸屏采样值不一致造成。比如,之前4.3的MAX_X是4300,可能更换为7'后就变成了4600。
  
   变更触摸屏后的数值,需要实际去测量。最简单的方式,就是通过代码获取数值的范围,然后通过串口打印出来,再在所获得的数据基础上进行微调。
  
   例如:
  
   int getrawdata(int * x, int * y)
   {
     ...
    
     static unsigned int iMaxX = 0,iMinX = MAX_X,iMinY = MAX_X,iMaxY = 0;
    
     ...
   
    if(bValidate != FALSE)
    {
     iMaxX = iMaxX > r_x[ValidNum] ? iMaxX : r_x[ValidNum];
    iMaxY = iMaxY > r_y[ValidNum] ? iMaxY : r_y[ValidNum];
    iMinX = iMinX < r_x[ValidNum] ? iMinX : r_x[ValidNum];
    iMinY = iMinY < r_y[ValidNum] ? iMinY : r_y[ValidNum];
    RETAILMSG(TRUE,(TEXT("iMinX:%d,iMaxX:%d,iMinY:%d,iMaxY:%d/r/n"),iMinX,iMaxX,iMinY,iMaxY));
   }
   
   ...
   }