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

               

多个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文件,把对应的值放出来,其他的注释调编译一下就可以了。根本不需要再校正。

BTW:csdn的插入代码怎么没有C/C++ 和pascal 呢?

           

猜你喜欢

转载自blog.csdn.net/qq_44884287/article/details/89360021