【发明内容】
本发明的要解决的技术问题,在于提供一种触摸屏的两点触摸处理方法,可以同时支持多个触摸信号的操作,可以使一些显示界面的操作更加灵活,从而实现更多的操作功能。
本发明是这样实现的:一种触摸屏的两点触摸处理方法,包括如下步骤:
(1)系统初始化;
(2)变量初始化:定义4个变量x1、y1、x2、y2用于保存两个触摸点的坐标,并赋予每个变量以坐标空值,同时定义变量X_bak、Y_bak用于备份先接触到屏幕的触摸点的坐标;
(3)扫描:单片机从左到右扫描X轴坐标时,得到一个或两个X轴坐标值,再从下到上扫描Y轴坐标,得到一个或两个Y轴坐标值;
(4)扫描值处理:排除触摸点的异常情况;
(5)坐标值处理:记录第一个接触点的坐标值并赋给变量X_bak、Y_bak,并将扫描所得的X轴坐标值和Y轴坐标值分别赋给变量x1、x2、y1、y2,再将上述变量x1、x2、y1、y2的值处理后得到正确的坐标值,再重新赋给变量x1、x2、y1、y2;
(6)判断触摸点的位置:将上述变量x1、x2、y1、y2的终值发送给上位机,上位机即判断出两个触摸点的所在位置。
当没有触摸信号时的,因没有扫描到任何触摸信号而得到空坐标,从而不进行何处理;
当两个触摸点的连线与Y轴平行时,上述步骤(5)中,是将扫描X轴所得唯一值赋给变量x1,x2仍为空值,同时将扫描Y轴所得两个值分别赋给变量y1、y2;再去掉x2的空值,将x1的值重新赋给变量x2。
当两个触摸点的连线与X轴平行时,上述步骤(5)中,是将扫描Y轴所得唯一值赋给变量y1,y2仍为空值,同时将扫描X轴所得的两个值分别赋给变量x1、x2;再去掉y2的空值,将y1的值重新赋给变量y2。
当两个触摸点为交叉情形时,上述步骤(5)中,是将扫描X轴所得两个值分别赋给变量x1、x2,将扫描Y轴所得两个值分别赋给变量y1、y2;然后将两对x1、y1值分别与X_bak、Y_bak值进行比较,相等即两则个触摸点为正交叉,保留变量x1、x2、y1、y2的扫描值,不相等则个触摸点为反交叉,则将x1、x2的扫描值互换重新赋给变量x1、x2,同时将与x1、x2新值对应的y1、y2的坐标值重新赋给变量y1、y2。
【具体实施方式】
图5和图6是本发明对先后两个触摸点处理方法原理示意图。
本发明的触摸屏是红外触摸屏,其是利用X、Y方向上密布的红外线矩阵来检测并定位用户的触摸。红外触摸屏在显示器的前面安装一个电路板外框,请参阅图1,电路板在屏幕四边排布红外发射管1和红外接收管2,一一对应形成横竖交叉的红外线矩阵。所述红外发射管1和红外接收管2的设置没有严格的限制,只要满足一一对应形成横竖交叉的红外线矩阵即可。用户在触摸屏幕时,手指就会挡住经过该位置的横竖两条红外线,因而可以判断出触摸点在屏幕的位置。任何不小于其分辩率的触摸物体都可改变触点上的红外线而实现触摸屏操作。屏幕四边排布红外发射管和红外接收管的密度越大,触摸屏的触摸分辨率也就越高。
为了提高系统的抗干扰能力,系统将信号调制成38KHz的红外光发送。系统工作的基本流程如图2所示:38KHz的信号由振荡源输出到红外线发射电路,同时微控制器发出扫描控制信号控制发射电路中的发射管阵列轮流选通,被选通的发射管发出38KHz的红外信号,此时与该发射管对应的接收管也被选通(因为发射电路和接收电路的扫描控制信号是同步的),在正常情况下接收管可以收到38KHZ信号,若接收管没有收到信号则说明屏上有触摸物体挡住了红外光。同时红外接收电路将38KHZ信号解调输出成与XY坐标有关的数据到微控制器,微控制器就可以根据这些数据判断出触摸点在屏幕上的位置,最后微控器将这些数据处理后通过PS/2发送到上位机(计算机或机顶盒)。
再如图3所示,其总的工作流程为:首先系统初始化微控制器中的一些具体模块(只执行一次),如IO模块,串口模块等,以使各个模块能够正常工作。由于程序在执行一轮后,一些变量的值会发生相应改变,所以在每一轮执行之前必须重新初始化变量。扫描模块除了完成扫描工作外,还要记录与触摸信号坐标有关的扫描值。如果扫描完成,则执行扫描值处理,扫描值处理模块通过扫描值的类型的判断来确定触摸屏上是否有触摸信号或者判断是否有异常情况出现,如操作者将整个手掌接触触摸屏等,如果没有触摸信号或有异常情况就不进行扫描值处理,返回重新进行扫描;如果有正常的触摸信号则进行扫描值处理,经过处理后的扫描值再由坐标处理模块进行扫描值坐标转换。最后将坐标通过串口或PS/2发送到上位机。并开始新的一轮扫描。
请参考图4a至图4d,显示两个触摸点的4种不同排布方式,其处理方法如下:
定义4个变量x1、x2、y1,y2用于保存坐标,在扫描前赋予每个坐标空值255(也可取其它值,只要满足是空值即可,空值与屏幕四边排布的红外发射管和红外接收管的数量有关,即分别超过红外发射管和红外接收管的数量即为空值),即扫描前x1=255,x2=255,y1=255,y2=255。此实施例的坐标范围是X坐标值为0-40,Y坐标值为0-30,所以表示坐标的空值不应是0-40内的任何值,而是大于或等于41的值,习惯上我们取值255代表坐标空值。再定义X_bak、Y_bak用于存放先接触到屏幕的触摸体的坐标,因为不管何种情况总有一个触摸体先接触屏幕,而且当第二个触摸体还没接触到屏幕前无法判断接下来触摸信号的情况,而交叉情况的处理必须利用X_bak、Y_bak值来判断后接触到屏幕的触摸体坐标(具体详见触摸点交叉情况的处理)。
第一种、没有触摸信号时的情况:
单片机先扫描X坐标,再扫描Y坐标,当没有扫描到任何触摸信号时,则得到空坐标x1=255,x2=255,y1=255,y2=255,单片机判断是空坐标后不进行何处理(这就是为什么要定义一个空坐标的目的)。
第二种、两个触摸点的连线与X轴平行即Y值相等的情况:
如图4a所示,假设两触摸点的实际坐标是(x1,y1)=(2,3)、(x2,y2)=(3,3)。首先单片机从左到右扫描X坐标,依次得到两个横坐标值,分别为x1=2,x2=3。接着单片机从下到上扫描Y坐标,由于两个点的Y坐标重合,只得到y1=3这个坐标值,因此y2=255为空,此时便将y1的值赋于y2,即令y2=y1=3,此时得到正确的坐标(x1,y1)=(2,3)、(x2,y2)=(3,3),并发送给上位机,上位机通过此坐标就可以判断两个触摸点的所在位置。
第三种、两触摸点的连线与Y轴平行即X值相等的情况:
如图4b所示,假设两触摸点的实际坐标是(x1,y1)=(3,2)、(x2,y2)=(3,3)。首先单片机从左到右扫描X坐标时,由于两个点的X坐标重合,只得到x1=3这个坐标值,因此x2=255为空,接着单片机从下到上扫描y坐标,依次得到两个纵坐标y1=2,y2=3。此时将x1的值赋于x2,即令x2=x1=3,此时得到正确的坐标(x1,y1)=(3,2)、(x2,y2)=(3,3),并发送给上位机,上位机通过此坐标就可以判断两个触摸点的所在位置。
第四种、两触摸点为正交叉的情况:
所谓正交叉是指两触摸点坐标关系为:x1<x2,y1<y2。如图4c所示,假设两触摸点的实际坐标是(x1,y1)=(2,2)、(x2,y2)=(3,3)。首先单片机从左到右扫描X坐标时,依次得到x1=2,x2=3;再从下到上扫描Y坐标时,依次得到y1=2,y2=3。得到坐标(x1,y1)=(2,2);(x2,y2)=(3,3),将(x1,y1)=(2,2)与备份值(X_bak,Y_bak)=(2,2)比较,两坐标值相等,所得坐标是正确的坐标,并发送给上位机,上位机通过此坐标就可以判断两个触摸点的所在位置。
第五种、两触摸点为反交叉的情况:
所谓反交叉是指两触摸点坐标关系为:x1<x2,但y1>y2。如图4d所示,假设触摸点实际的坐标是(x1,y1)=(3,2),(x2,y2)=(2,3)。从左到右扫描X坐标时,依次得坐标x1=2,x2=3;再从下到上扫描Y坐标时,依次得到坐标y1=2,y2=3,得到坐标(x1,y1)=(2,2),(x2,y2)=(3,3),然而所得的这两坐标是错误的坐标,因为图中触摸点实际的坐标是(x1,y1)=(3,2),(x2,y2)=(2,3)。这是两触摸点为反交叉时特有的情况,如何才能得到正确的坐标是困扰触摸屏技术从业人员已久的难题,本发明采用分时处理的方式,就可以使这个问题得到解决。
所谓的分时处理就是在两个时间段分别记录不同的坐标值并进行比较,去掉一个错误的坐标值,保留正确的坐标值即可。在实际情况中当有两个触摸物体要触摸屏幕时,总有一个先接触屏幕,紧接着另一个触摸体也接触屏幕(当然也有可能是同时接触,但这种概率极低,因只要有微小差别即可分辨)。如图5和图6所示,当第一触摸体接触屏幕时,首先记录其坐标为(X_bak,Y_bak)=(3,2)作为备用;当第二触摸体也接触到屏幕时,经扫描X、Y轴的值,得到两坐标值(x1,y1)=(2,2),(x2,y2)=(3,3)。再将(x1,y1)=(2,2)与备用值(X_bak,Y_bak)=(3,2)作比较,因为两个坐标值不相等,因此可判断(x1,y1)=(2,2)是错误的坐标值,必须排除并进行进一步处理,此处理将x1、x2两值对调后重新赋给x1、x2,得到正确坐标值x1=3,x2=2,经过调整从而得到两个触摸体的正确坐标(x1,y1)=(3,2),(x2,y2)=(2,3),就此解决了上述的问题。
综上所述,本发明的处理方法可将两触摸点所有处在不同的位置均可进行判断,处理得出正确的坐标值,从而解决了现有的触摸屏只支持单个触摸点操作的问题,实现了可支持两个触摸点的操作,使一些显示界面的操作更加灵活,实现更多的操作功能。