触摸屏驱动中的坐标转换问题

quq   2009-4-22 21:30 楼主
#define TOUCH_MAX_X 1000 // 950
#define TOUCH_MIN_X 30 // 90
#define TOUCH_MAX_Y 980 // 960 // 910
#define TOUCH_MIN_Y 30 // 70 //50
#define TOUCH_X        800
#define TOUCH_Y        480
VOID Touch_CoordinateConversion(INT *px, INT *py)
{
        INT TmpX, TmpY;
        INT TmpX0, TmpY0;
       
        TmpX0 = *px; TmpY0 = *py;
       
        TmpX = (*px >= TOUCH_MAX_X) ? (TOUCH_MAX_X-1) : *px;
        TmpY = (*py >= TOUCH_MAX_Y) ? (TOUCH_MAX_Y-1) : *py;
       
        TmpX -= TOUCH_MIN_X;
    TmpY -= TOUCH_MIN_Y;

//#ifdef YC_2440_SUPPORT
#ifndef YC_2440_SUPPORT
        TmpX = (TmpX >= 0) ? TmpX : 0;
    TmpY = (TmpY >= 0) ? TmpY : 0;
#else
    TmpX = (TmpX) ? TmpX : 0;
    TmpY = (TmpY) ? TmpY : 0;
#endif
   
        *px = ((TmpX * TOUCH_X) / (TOUCH_MAX_X-TOUCH_MIN_X))*4;
        *py = ((TmpY * TOUCH_Y) / (TOUCH_MAX_Y-TOUCH_MIN_Y))*4;
请教朋友们,这里面的TOUCH_MAX_X,等参数是怎么取得的啦,这个驱动与下面这个的转换区别在哪里呀!!!
TSP_TransXY(INT *px, INT *py)
{
        *px = (*px - TSP_MINX) * TSP_LCDX / (TSP_MAXX - TSP_MINX);
        *py = (*py - TSP_MINY) * TSP_LCDY / (TSP_MAXY - TSP_MINY);

        if (*px  <        0) *px = 0;
        if (*px >= TSP_LCDX) *px = TSP_LCDX - 1;

        if (*py  <        0) *py = 0;
        if (*py >= TSP_LCDY) *py = TSP_LCDY - 1;
}
其中#define TSP_MINX                                                60
#define TSP_MINY                                                60

#define TSP_MAXX                                                3000
#define TSP_MAXY                                                3000


#define TSP_LCDX                                                (LCD_XSIZE_TFT * 4)
#define TSP_LCDY                                                (LCD_YSIZE_TFT * 4)

回复评论 (1)

写一个不带系统的触摸屏程序,有按下是在超级终端输出点击的值,然后得到最大值和最小的值。。。
一般误差不大的情况影响不大,定义他们的目的是触摸屏一般比屏幕大一点,那些比屏幕大的部分.我觉得最重要的是要将没有用的点滤掉掉。
我之前也遇到过这样的问题,后来实在搞不定就转去搞其他方面了。
楼主解决的话麻烦你把驱动发一份给我啊。
点赞  2009-4-22 23:19
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复