野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 189690|回复: 566

[emWin] 【emWin5.20使用教程】第六期:触摸矫正-------详解

  [复制链接]
发表于 2013-6-23 13:11:30 | 显示全部楼层 |阅读模式
本帖最后由 Alice2013 于 2013-6-23 13:15 编辑

   
      先简单的说下原理,详细的可以看附件。
      程序采用的是两点矫正,下面以X轴为例说明(X轴和Y轴是分别算的):
  1  程序给出左上角和右下角的两个坐标(也就是逻辑坐标X1,X2)。
  2  手去分别触摸的话会得到ADC采样的数值(也就是物理坐标Y1,Y2)。
  3  先回忆一下初中的知识,根据初中学的直线方程
      y = ax + b  ..........................................................(1)
      两点确定一条直线,代入坐标数值(X1,Y1),(X2,Y2), 从而可以求得a和b的数值。
      a = (Y1 - Y0) / (X1 - X0)....................................... .....(2)
      b = Y0 - (Y1 - Y0) * X0/(X1 - X0) 或 Y1 - (Y1 - Y0) * X1/(X1 - X0).. (3)

      y =  Y0 + (Y1 - Y0) * (x - X0) / (X1 - X0) (ucGUI用的是这个)...... (4)
      y =  Y1 + (Y1 - Y0) * (x - X1) / (X1 - X0) (或者使用这个)..........(5)
      这样的话,给定逻辑坐标就能确定物理坐标,给定物理坐标也能确定逻辑坐标                                 
   4  ucGUI 又是如何矫正的呢,采用下面的函数   
    xyMinMax[Coord].Min= _Log2Phys(l0, Log0, Log1, Phys0, Phys1);
        // Coord = 0 矫正X Coord = 1 矫正Y
        xyMinMax[Coord].Max = _Log2Phys(l1, Log0,Log1, Phys0, Phys1);
    _Log2Phys的作用就是上面的公式 (4),当然公式(5)也是可以的。
    当x = 0时得到
    GUI_TOUCH_AD_LEFT = xyMinMax[Coord == 0 ].Min = Y0 + (Y1 - Y0) * (0 - X0) / (X1 - X0)
    当x = LCD_SIZEX时   
    GUI_TOUCH_AD_RIGHT = xyMinMax[Coord == 0 ].Max = Y0 + (Y1 - Y0) * ( LCD_SIZEX - X0) / (X1 - X0)
    同理可以得到
    GUI_TOUCH_AD_BOTTOM   
    GUI_TOUCH_AD_TOP
5.  实际应用的时候会调用下面的函数将物理坐标转换成逻辑坐标
    有了上面的说明,下面的函数也很好的解释了(以X轴为例进行说明)。
    只不过现在的两个坐标变成了
   (0,xyMinMax[GUI_COORD_X].Min),(GUI_TOUCH_XSIZE - 1,xyMinMax[GUI_COORD_X].Max)
    从而得到新的坐标变换公式
    b = xyMinMax[GUI_COORD_X].Min
    a = (xyMinMax[GUI_COORD_X].Max - xyMinMax[GUI_COORD_X].Min)/ (GUI_TOUCH_XSIZE - 1)

    x = (y - b) / a = (y - xyMinMax[GUI_COORD_X].Min) * (GUI_TOUCH_XSIZE - 1) /

                      (xyMinMax[GUI_COORD_X].Max -  xyMinMax[GUI_COORD_X].Min)
    由这个公式就可以得到逻辑坐标,下面计算X,Y轴就是采用的这个公式


    staticint _AD2X(int adx);// Convert physical value into coordinates.
    staticint _AD2Y(int ady);// Convert physical value into (logical) coordinates.
    staticint _AD2X(int adx) {
    I32 r = adx - xyMinMax[GUI_COORD_X].Min;
    r *= GUI_TOUCH_XSIZE - 1;
    return r / (xyMinMax[GUI_COORD_X].Max -xyMinMax[GUI_COORD_X].Min);

    }
    staticint _AD2Y(int ady) {

    I32 r = ady - xyMinMax[GUI_COORD_Y].Min;
    r *= GUI_TOUCH_YSIZE - 1;
    return r/(xyMinMax[GUI_COORD_Y].Max -xyMinMax[GUI_COORD_Y].Min);   
    }
ucGUI中的中的设备驱动解析(作者:UCGUI,上过http://www.UCGUI.com论坛的应该都知道)
            UCGUI中的中的设备驱动解析.zip (32.16 KB, 下载次数: 271)
注释好的程序,方便大家调试。
             TOUCH_Calibrate.zip (2.49 KB, 下载次数: 290)

程序的图片如下,和官方DEMO里面的一样。
1.png
2.png
3.png


回复

使用道具 举报

发表于 2013-6-23 20:34:09 | 显示全部楼层
太棒了,非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-6-25 16:18:23 | 显示全部楼层
学习
学习
学习
回复 支持 反对

使用道具 举报

发表于 2013-6-25 17:10:06 | 显示全部楼层
太好了,顶起~~~~
回复 支持 反对

使用道具 举报

发表于 2013-6-27 16:50:06 | 显示全部楼层
学习学习~~~~`
回复 支持 反对

使用道具 举报

发表于 2013-6-28 16:31:25 | 显示全部楼层
拿分走人呵呵,楼下继续!拿分走人呵呵,楼下继续!漂亮~
回复 支持 反对

使用道具 举报

发表于 2013-7-4 11:35:04 | 显示全部楼层
太棒了,非常感谢学习了
回复 支持 反对

使用道具 举报

发表于 2013-7-8 11:08:47 | 显示全部楼层
支持下。。。。。
回复 支持 反对

使用道具 举报

发表于 2013-7-8 11:53:48 | 显示全部楼层
先看看再说。
回复 支持 反对

使用道具 举报

发表于 2013-7-10 14:26:42 | 显示全部楼层
拿分走人呵呵,楼下继续!拿分走人呵呵,楼下继续!拿分走人呵呵,楼下继续!拿分走人呵呵,楼下继续!
回复 支持 反对

使用道具 举报

发表于 2013-7-11 01:14:45 | 显示全部楼层
拿分走人呵呵,楼下继续!
回复 支持 反对

使用道具 举报

发表于 2013-7-11 10:11:30 | 显示全部楼层
太棒了,非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-7-11 12:00:36 | 显示全部楼层
给力给力给力给力给力给力给力给力!
回复 支持 反对

使用道具 举报

发表于 2013-7-11 12:34:19 | 显示全部楼层
太好了,谢谢。
回复 支持 反对

使用道具 举报

发表于 2013-7-11 12:34:45 | 显示全部楼层
太棒了,非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-7-17 09:32:05 | 显示全部楼层
支持 支持啊啊
回复 支持 反对

使用道具 举报

发表于 2013-7-17 09:32:13 | 显示全部楼层
支持 支持啊啊
回复 支持 反对

使用道具 举报

发表于 2013-7-17 09:33:04 | 显示全部楼层
支持 支持啊啊
回复 支持 反对

使用道具 举报

发表于 2013-7-19 19:56:05 | 显示全部楼层
漂亮~
回复 支持 反对

使用道具 举报

发表于 2013-7-19 21:43:31 | 显示全部楼层
太棒了,非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-7-20 17:19:49 | 显示全部楼层
很想学习一下
回复 支持 反对

使用道具 举报

发表于 2013-7-25 15:27:51 | 显示全部楼层
太棒了,非常感谢加劲顶
回复 支持 反对

使用道具 举报

发表于 2013-7-25 20:46:14 | 显示全部楼层
认真学习,搞个合订本更好
回复 支持 反对

使用道具 举报

发表于 2013-7-26 06:26:04 | 显示全部楼层
學習一下,謝謝啦
回复 支持 反对

使用道具 举报

发表于 2013-7-27 15:14:18 | 显示全部楼层
谢谢,正需要太棒了,非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-7-29 17:05:15 | 显示全部楼层
太棒了,非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-7-31 13:05:30 | 显示全部楼层
不回复就看不到隐藏的内容啊
回复 支持 反对

使用道具 举报

发表于 2013-7-31 13:17:44 | 显示全部楼层
不回复就看不到隐藏的内容啊
回复 支持 反对

使用道具 举报

发表于 2013-8-7 13:50:08 | 显示全部楼层
kankan走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2013-8-9 20:11:30 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-8-11 10:52:25 | 显示全部楼层
好东西,收获不小
回复 支持 反对

使用道具 举报

发表于 2013-8-17 17:21:31 | 显示全部楼层
终于找到这方面的资料了,太感谢了
回复 支持 反对

使用道具 举报

发表于 2013-8-17 17:21:49 | 显示全部楼层
终于找到这方面的资料了,太感谢了
回复 支持 反对

使用道具 举报

发表于 2013-8-19 18:44:13 | 显示全部楼层
顶顶,我来学习学习
回复 支持 反对

使用道具 举报

发表于 2013-8-21 08:58:37 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-8-28 14:24:37 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-8-28 22:58:10 | 显示全部楼层
看看~学习学习
回复 支持 反对

使用道具 举报

发表于 2013-9-6 21:51:05 | 显示全部楼层
支持。。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2013-9-8 17:22:33 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-9-8 17:23:01 | 显示全部楼层
谢谢楼主的贡献
回复 支持 反对

使用道具 举报

发表于 2013-9-9 22:41:48 | 显示全部楼层
我的触摸屏好像有问题,来看看
回复 支持 反对

使用道具 举报

发表于 2013-9-11 17:23:03 | 显示全部楼层
非常感谢,謝謝樓大
回复 支持 反对

使用道具 举报

发表于 2013-9-14 11:44:09 | 显示全部楼层
hao,dingdingding
回复 支持 反对

使用道具 举报

发表于 2013-9-27 16:22:21 | 显示全部楼层
come on baby
回复 支持 反对

使用道具 举报

发表于 2013-9-30 23:30:32 | 显示全部楼层
好吧,,回复个
回复 支持 反对

使用道具 举报

发表于 2013-10-4 22:05:01 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-10-5 11:40:31 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-10-9 00:07:11 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-10-14 19:49:14 | 显示全部楼层
真棒!!非常感谢抢沙发~我来顶楼主的
回复 支持 反对

使用道具 举报

发表于 2013-10-30 21:46:27 | 显示全部楼层
好东东,正要学
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-25 23:43 , Processed in 0.051562 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表