电阻技术触摸屏的校正算法及应用编程设计(转)

来源:互联网 发布:可变数据喷码机 编辑:程序博客网 时间:2024/05/18 01:07

1前言

  触摸屏越来越多的应用于国民生产的各个领域用来实现手写输入、查询、控制等,这些触摸屏多被装在显示器(CRT)或液晶(LCD)上,触摸屏的种类也越来越多,有矢量压力传感技术触摸屏、电阻技术触摸屏、电容技术触摸屏、红外线技术触摸屏、表面声波技术触摸屏等等,这些触摸屏都各有优缺点,介绍的文章很多,笔者就不在这里赘述了。本文主要介绍安装在LCD上的电阻技术触摸屏的校正原理、算法及其编程应用设计。

2触摸屏的校正原理

  2.1概述
  众所周知,基于电阻技术触摸屏分为四线电阻触摸屏、五线电阻触摸屏或更多线电阻触摸屏,但无论哪一类电阻触摸屏都有一个最大共性:电压成线性均匀分布。正是由于这一特性使得触摸屏的校正和使用非常方便。说到触摸屏的校正,也许有人会问触摸屏为什么还要校正呢?我们知道,触摸屏本身性能多少会有些差异,在LCD或CRT上安装时位置也难免会存在偏差,再加上使用一段时间后,触摸屏的性能参数也有可能发生改变,那么,我们在使用不同的触摸屏时,即便是在显示屏幕上的同一位置触摸也很难保证得到相同的触摸坐标。这样一来编程人员就很难用相同的程序来管理、控制触摸屏。正是基于此原因,我们才引入校正的概念,以便让使用触摸屏设备的编程人员能用统一的程序来管理触摸屏。

  2.2 五点法校正触摸屏

  2.2.1物理坐标和逻辑坐标
  为了方便理解,我们首先引入2个概念,坐标和逻辑坐标。物理坐标就是触摸屏上点的实际位置,我们通常以液晶上点的个数来度量。逻辑坐标就是触摸屏上这一点被触摸时A/D转换后的坐标值。如下图,我们假定液晶最左下角为坐标轴原点A,我们在液晶上再任取一点B(十字线交叉中心),B在X方向距离A 10个点,在Y方向距离A 20个点,那么我们就说液晶上B点所正对的解摸屏上这一点的物理坐标为(10,20)。如果我们触摸这一点时得到的X向A/D转换值为100,Y向A/D,转换值为200,我们就说这一点的逻辑坐标为(100,200)。

  2.2.2逻辑坐标的计算
  由于电阻式触摸屏的电压成线性均匀分布,那么A/D转换后的坐标也成线性。假如我们将液晶最左下角点对应的解摸屏上的点定为物理坐标原点A其物理坐标记为(XA=0,YA=0)其逻辑坐标记为(XLA,YLA)(不一定为0)。那么触摸屏上任意一点B的逻辑坐标可表达为:
  XLB=XLA+KXXB
  YLB=YLA+KYYB      式2-1
  其中KX、KY分别为触摸屏X方向和Y方向的因子系数,这就像弹簧一样(我们知道弹簧也是线性的),拉力与弹簧伸长正比。KX、KY可能为正,也可能为负,这根据具体触摸屏安装的方向和特性。每个液晶触摸屏,我们也应该单独计算每一个触摸屏的K系数。

  如果A点不是坐标原点,也是任意一点式2-1可以表达成
  XLB=XLA+KX(XB-XA)
  YLB=YLA+KY(YB-YA)     式2-2

  由式2-2我们可以推出计算K系统的公式
  KX=(XLB-XLA)/(XB-XA)
  KY=(YLB-YLA)/(YB-YA)     式2-3

  2.2.3五点法确定基坐标和K系统
  如图在液晶上固定的位置显示五个点,因为是固定的位置,所以这五个点的物理坐标是预知的。这五个点不应太靠边,因为边缘点对应的触摸屏线性一般不太好。

  (1) 首先在ABCDE对应的位置逐步用尖状物触摸,得到五个点的逻辑坐标。
  (2) 分别比较A 和C、B和D的横坐标,如果差值不在允许范围(你自己规定一个即可,比如5),则重复操作(1)(2)步。
  (3) 分别比较A和B、C和D 的纵坐标,如果差值不在允许范围(你自己规定一个即可,比如5),则重复操作(1)(2)(3)步。
  (4) 根据式2-3,用2组数据计算X向K系数平均值KX={(XLB-XLA)/(XB-XA)+(XLD-XLD)/(XD-XC)}/2
  (5) 根据式2-3,用2组数据计算Y系数平均值KY={(YLA-YLC)/(YA-YC)+(YLB-YLD)/(YB-YD)}/2
  (6) 将C点逻辑坐标作为基坐标,根据式2-2则触摸屏上任意一点F逻辑坐标与基坐标的关系为:
  XLF=XLC+KX(XF-XC)
  YLF=YLC+KY(YF-YC)     式2-4

  根据这个公式,我们也可逆推出F点的物理坐标
  XF=(XLF-XLC)/KX+XC
  YF=(YLF-YLC)/KY+YC     式2-5
  (7) 用公式2-4求出E点逻辑坐标,并与(1)步得到的E点坐标比较,如果差值不在允许范围(你自己规定一个即可,比如5),则重复操作以上步骤直到满足要求。
  (8) 将基坐标XLC、YLC、XC、YC和KX、KY记录在存储设备,触摸屏校正完成。

3触摸屏应用的编程思路

  3.1触摸区域的判定
  我们关心的是,我们如何通过用户触摸任意一点得到的逻辑坐标,来判断这一点是否在液晶的某个特定显示区内。通常我们在液晶的特定区域提供一些按钮(Button)式的矩形区域,以便用户操作,所以这个区域所对应触摸屏区域的逻辑坐标最小点(我们假定为这个区域的左下角)和逻辑坐标最大点(我们假定为这个区域的右上角)两点的物坐标是预知的。假如我们事先将这两点的物理坐标存在程序里,我们再利用已计算并存储好的基坐标和k系数,用公式2-5求出触摸任意一点的物理坐标,那么,触摸任意一点得到的物理坐标只要在这两点范围内,我们就可以判定用户触摸的位置,正是液晶上Button的矩形区域内。

  如果液晶上有若干个Button区域,那么我们将每个区域逻辑坐标最大点和最小点的物理坐标存成数组或表的形式,使用时选用公式2-5计算出触摸点的物理坐标,再从存储设备中提取出区域的两点物理坐标查表即可判定用户触摸的区域。

  3.2触摸区域的划分
  作为用户交互的操作界面,不可能只显示一个Button,也不可能在不同屏总是在同一个位置显示Button,那么怎样才能做一个统一的数据表,以满足各式各样的需求呢?在这里笔者仅讲一个网络法划分区域的办法,这个方法其实很简单,就是编程人员先确定一个最小区域的Button,再以些为最小单位将屏幕划分成网格状,如图3-1,一个Button可能包含一个或几个最小单元。我们将每个单元编上号,并将每个单元逻辑坐标最大点和最小点的物理坐标存成数组或表的形式,编程人员只要知道每一屏的每一个Button是由哪几个单元组成就可以判断触摸了哪一个Button。

图3-1

  当然这种划分方法,仍存在一些位置的限制,笔者只是提供一种方法,以求达到抛砖引玉的目的,编程人员可根据自己的经验与思路自行划分。

  3.3触摸屏的精度
  我们知道,触摸屏的精度是由A/D转换的位数决定的,有8位、9位、10位或更多,一般来说,精度越高越好,但是像LCD、CRT这样的设备上安装的触摸屏并不一定需要精度太高的A/D的转器件,LCD、CRT都有自己固定的分辨率,A/D转换器件的精度高出LCD、CRT的分辨率基本是无意义的,反而为单片机计算增加了麻烦。例如一个320点×240点的LCD,我们最多只需要1/320的精度就够了,那么最多也就需要一个9位的A/D转换。事实上,我们也不一定需要1/320的精度,在实际应用中,每一个Button都是一个较大的矩形区域,包含若干个点,任两个Button的距离也都很大,这样我们就根本用不了这样高的精度,在编程时,我们可以将A/D转的结果进行一定的右移位来降低转换精度,以求节省单片机的变量资源,增加代码执行效率,这样做有可能好几个点是同一个逻辑坐标,但是对我们的使用毫无影响。

  3.4判定用户触摸区域的程序框图

4结束语

  本文对解摸屏技术的研究已在金佰和数码一体机得到应用,已达到实用要求。由于笔者水平有限,本文在措辞、技术细节难免会存在错误,恳请谅解并指正。