Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3425573
  • 博文数量: 864
  • 博客积分: 14125
  • 博客等级: 上将
  • 技术积分: 10634
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-27 16:53
个人简介

https://github.com/zytc2009/BigTeam_learning

文章分类

全部博文(864)

文章存档

2023年(1)

2021年(1)

2019年(3)

2018年(1)

2017年(10)

2015年(3)

2014年(8)

2013年(3)

2012年(69)

2011年(103)

2010年(357)

2009年(283)

2008年(22)

分类: C/C++

2008-06-23 13:12:16

触摸屏本身有自己的指标分辨率, 比如2048*2048, 也就是它的坐标系, 要说的是,设计过程中,它和我们LCD显示屏的坐标系(比如大点的,1024*768)是两个概念。 我们通过ADS控制器的SPI/I2C总线读取到的触摸屏的坐标信息,是触摸屏(贴在LCD上面很像包装纸的一层薄膜)以它本身坐标原点O(物理的,固定的,4个边角的某一个,很可能该原点在装配过程中已经被切割掉, 但没关系,不影响坐标确定)为参考的坐标对(X,Y)。(也好像是两个电压值(Nx,Ny),根据触摸屏X,Y方向的参考电压,做个线性比较,一样很容易得到其坐标值(X,Y), 记不清楚了...)。
---
实际使用过程中, 其他设计者和使用者当然不会关心某个时刻触摸屏的坐标定位是什么,我们唯一的参考定位是LCD屏的坐标系(x,y), 所以整个触摸屏的设计,就是把两个2维线性坐标系通过几个样值的比较,对应起来, 即(X,Y)--->(x,y), 具体的做法是:
---
(1)编写一段计算程序,调用LCD显示驱动程序,在LCD上打印几个个亮点,选择方便计算的,比如( x1,y1),(x2,y2)...
---
(2) (触摸屏驱动程序应该还没有设计完成, 这里只需要做到其触摸屏控制器初始化函数、坐标数据读取函数和相应的点击中断程序工作就可以了)分别点击这些点,程序中读出这些点对应的触摸屏坐标值(X1,Y1),(X2,Y2)...
---
(3) 这时候,就可以得到了两个坐标系的对应关系,具体就是代入程序中读到的采样值求解下面对应方程的6个系数(a,b,c,d,e,f):
{   x=aX+bY+c, y=eX+fY+g   }
---
上面的情况是普遍适用的, 全面,精度较高,但求解的未知数多,需要的采样值也多; 事实上,现在的装配工艺完全可以保证两个坐标系的相位差为90度的整数倍, 也就是说,上面的对应方程简化为
{ x=aX+b, y=cY+d   } 或者 { x=aY+b, y=cX+d }
这样,只需要2组采样值, 就可以确定对应系数!   两个坐标系的对应关系就明确了, 一切触摸屏坐标都将根据这个对应关系式转化成LCD坐标系中相应的坐标, OK.
---
当然, 具体设计工程中, 也有很多的技巧, 主要是误差处理方面,比如采样过程中的多次平均, 去抖动算法,选择采样点的位置等等。
阅读(1382) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~