一位CSDN牛人的详尽触摸屏校正方法

original:http://blog.csdn.net/gooogleman/archive/2008/11/05/3219498.aspx

多个LCD下修改DISPLAY与TOUCHP驱动的经验

首先说明,我所做的是基于s3c2410的wince平台。
更换LCD之后一般需要修改DISPLAY与TOUCHP驱动。建议大家把公共一些宏提取出来,独立写个头文件使用。需要参考的文件除了2个驱动对应的c/cpp文件还有s2410.h。cfw.c里面也有关于LCD的问题。如果你有对他做了修改,那么自己需要注意了。我之前自己的包就是。

我提取的部分信息:
... ... ...
#define LCD_TYPE  TFT640_480
#if ( LCD_TYPE == TFT640_480 )
  #define SRC_WIDTH           (640)
  #define SRC_HEIGHT          (480)
  #define MemSize             (0xA0000)
  #define LCD_XSIZE_TFT       (SRC_WIDTH)   
  #define LCD_YSIZE_TFT       (SRC_HEIGHT)
  //触摸区域修改下面的值
  #define TOUCH_MAX_X 1080
  #define TOUCH_MIN_X 10
  #define TOUCH_MAX_Y 980
  #define TOUCH_MIN_Y 30

  #define TOUCH_X SRC_WIDTH          
  #define TOUCH_Y SRC_HEIGHT

  //屏幕显示时隙设置 参考LCD厂商给出的资料 
  #define VBPD                ((20) & 0xff)
  #define VFPD                ((2)  & 0xff)
  #define VSPW                ((1)  & 0x3f)

  #define HBPD                ((121) & 0x7f)
  #define HFPD                ((15)  & 0xff)
  #define HSPW                ((13)  & 0xff)

  //#define ADC_DELAY_TIME 5000   看你具体情况我独立放开来,因为有好几种液晶。
#elif (...)
... ... ...
#endif
... ... ...
以后不管什么LCD需要处理,直接修改LCD_TYPE就行了。如果你跟我一样,同种大小也有几种不同厂商提供的LCD,那么你还需要定义一个宏来区分厂商的,写好以后需要换就修改1-2个宏的值就可以了,同时提取出来的宏再原来的文件中记得注释掉,免得重定义。不要去覆盖好几个地方。当然这样或许不完美,还存在触摸需要校正的问题。下面再说说我的做法。

1.首先拿到LCD,烧完让他跑起来。
2.用wince自带的校正程序校正。然后用PB或者EVC的工具连接wince的注册表。找到下面对应的值。
[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH]
"CalibrationData"="这里每人的值都不一样"
在$(_FLATRELEASEDIR)目录下的platform.reg里面找到“[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH]”
修改"CalibrationData"的值为找到的。然后make一下。重新写进去测试。
这个时候特别需要测试的是屏蔽的边缘的触摸效果,如果正常,那么恭喜你,可以了。如果边缘有问题,进行下一步3。
3.修改触摸区域。
  #define TOUCH_MAX_X 
  #define TOUCH_MIN_X 
  #define TOUCH_MAX_Y 
  #define TOUCH_MIN_Y 
调整这个区域(一般我见到的情况是边缘没反映或者点击后效果靠中心,所以把区域放到就行)。然后转1再进行测试。

一般几步就OK了。
最后记得把CalibrationData的值保存起来放到platform.reg里面,以后如果更换LCD,那么直接修改platform.reg文件,把对应的值放出来,其他的注释调编译一下就可以了。根本不需要再校正。

gooogleman小结触摸屏定位校准:
第一种方法:
修改platform.reg这个文件中
[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH]
"MaxCalError"=dword:7
; portrait
"CalibrationData"="644,471 1160,83 100,75 104,831 1172,843 "
关于touch的参数,这个参数可能在不同得环境下有不同。可以先在wince启动后,在控制
面板-笔针一项重新校准触摸屏得值,然后用usb线连接pc机,然后通过pb-tool下的注册
表工具。查看设备得硬件得触摸屏相关参数,将其拷贝,并粘贴到platform.reg中。再将
platform.reg文件拷贝到release目录下。make image即可重新编译一个wince出来了。这
时触摸屏就比较准了。
第二种方法:
如果TOUCH_MAX_X TOUCH_MIN_X TOUCH_MAX_Y TOUCH_MIN_Y 这四个值能调准,就不用再
调整注册表的值,即可以关闭注册表该项。而如果注册表的值有调整,以注册表为准

posted on 2010-05-28 18:06  xilentz  阅读(1032)  评论(0编辑  收藏  举报