触摸屏校准方法

合集下载

电阻式触摸屏校准算法分析

电阻式触摸屏校准算法分析

电阻式触摸屏校准算法分析<一> 算法分析电阻式触摸屏在X,Y坐标方向上是线性的,比如S32采用的触摸屏,理论上Xmin=0,Xmax=1023,Ymin=0,Ymax=1023。

但是实际的触摸屏,往往是xmin>0,xmax<1023,ymin>0,ymax<1023。

所以就需要校准。

此文讨论的校准算法,其原理就是利用触摸屏的线性特性,针对被校准的触摸屏,获取其真正的x,y的范围,即xmin,ymin,xmax,ymax将其记录下来。

以后当触摸事件发生,将触摸屏报告的原始坐标(x,y)按比例投射到0~1023的坐标上即可。

注意,TP与LCD在相同的坐标方向上,具有相似性,即比例一致性。

看看对原始坐标的处理:If (x<xmin) x=0;Else if (x>xmax) x=xmax-xmin;Else x=1023*(x-xmin)/(xmax-xmin);If (y<ymin) y=0;Else if (y>ymax) y=ymax-ymin;Else y=1023*(y-ymin)/(ymax-ymin);可见,对原始坐标,先减去一个0位置的偏移量(x-xmin),然后求得它X范围上的比率((x-xmin)/(xmax-xmin)),再乘以1023,就得到了投射到(0~1023)上的坐标。

再看看校准算法。

在以下的讨论中,所谓物理坐标,指触摸屏上的坐标PT;所谓逻辑坐标,指LCD上的坐标PL。

LCD的宽度(W)对应TP的X方向,LCD的高度(H)对应TP的Y方向。

通过点击三个校准点Po(x,y),Px(x,y),Py(x,y),我们能得到图中内层方框的X,Y的物理坐标范围,即Xm = Px.x – Po.x Ym = Py.y – Po.y将此图投射到LCD上,有如下(物理值->逻辑值)的对应关系:Xl->Lwl,Xm->Lwm,Xr->Lwr,Yb->Lhb,Ym->Lhm,Yt->Lht。

关于触摸屏校准问题及触摸屏中断过程图解

关于触摸屏校准问题及触摸屏中断过程图解
触摸屏校准 在开始实现触摸屏功能之前,还需要解决一个问题,那就是触摸屏的校正。触摸屏和 LCD 是两种不同的物理器件。对于一个分辨率为 320×240 的 LCD,它的宽度为 320 个像素, 高度为 240 个像素。而触摸屏处理的数据是点的物理坐标,该坐标是通过触摸屏控制器采集 得到的。要想实现触摸屏上的物理坐标与 LCD 上的像素点坐标一一对应上,两者之间就需 要一定的转换,即校正。而且电阻式触摸屏由于自身的原因参数会发生变化,因此需要经常 性的校正。比较常见的校正方法是三点校正法,它的原理是:
保存下来的参数即可。
LCD 校准
3点校准:6个未知数K1,A1,B1,K2,A2,B2
校准公式:二元一次方程。
*
*
*
XZ1,YZ1 XJ1,YJ1 XZ1=K1XJ1+A1YJ1+B1 YZ1=K2XJ1+A2YJ1+B2
校准:5点
5点校准:10个未知数K1,A1,B1,K2,A2,B2
ቤተ መጻሕፍቲ ባይዱ
校准公式:二元二次方程。
设 LCD 上每个点 PD 的坐标为[XD,YD],触摸屏上每个点 PT 的坐标为[XT,YT]。要实现触 摸屏上的坐标转换为 LCD 上的坐标,需要下列公式进行转换: 30,30,28,32
XD=A×XT+B×YT+C
YD=D×XT+E×YT+F
因为其中一共有六个参数(A,B,C,D,E,F),因此只需要三个取样点就可以求得这六个参数。 这六个参数一旦确定下来,只要给出任意触摸屏上的坐标点 PT,代入这个公式,就可以得 到它所对应的 LCD 上像素点的坐标 PD。具体的求解过程就不细讲,只给出最终的结果。已 知 LCD 上 的 三 个 取 样 点 为 : PD0,PD1,PD2 , 它 们 所 对 应 的 触 摸 屏 上 的 三 个 点 为 : PT0,PT1,PT2。A,B,C,D,E,F 这六个参数最终的结果都是一个分式,而且都有一个共同的分母, 为:

屏幕4点校准算法

屏幕4点校准算法

屏幕4点校准算法介绍屏幕4点校准算法是一种用于校准触摸屏幕的方法。

通过测量用户点击屏幕时的坐标,并与屏幕上实际显示的坐标进行比较,可以计算出触摸屏幕的误差,并进行校准,从而提高触摸屏幕的准确性和灵敏度。

本文将详细介绍屏幕4点校准算法的原理、步骤和应用。

原理屏幕4点校准算法的原理基于触摸屏幕在不同位置的响应误差是不一样的。

通常情况下,由于制造过程中的一些偏差和材料差异,触摸屏幕在边缘和角落的响应误差较大,而在中心位置的响应误差较小。

因此,通过在触摸屏幕的四个角落进行校准,可以得到一个精确的校准参数,从而减小触摸屏幕的误差。

步骤屏幕4点校准算法的步骤如下:步骤1:选择参考点首先,需要选择四个参考点,一般选取屏幕的四个角落。

这四个参考点的坐标需要事先确定,并且要尽可能分布在屏幕的不同位置。

步骤2:用户操作用户需要按照指示在屏幕上分别点击四个参考点位置。

系统会记录下用户点击时的坐标。

步骤3:计算校准参数根据用户点击时的坐标和事先确定的参考点坐标,可以计算出校准参数。

校准参数可以通过线性插值或者其他数学模型得到,具体的计算方法要根据具体情况而定。

步骤4:应用校准参数最后,将计算出的校准参数应用到触摸屏幕上,以校正触摸屏幕的误差。

校准参数可以通过软件或者硬件的方式进行应用。

应用屏幕4点校准算法广泛应用于各类触摸屏设备,例如智能手机、平板电脑、工控机等。

通过校准触摸屏幕,可以提高用户的触控体验,减少误操作,并且可以精确地控制光标的位置。

总结屏幕4点校准算法是一种用于校准触摸屏幕的方法,通过选择参考点、用户操作、计算校准参数和应用校准参数等步骤,可以提高触摸屏幕的准确性和灵敏度。

该算法广泛应用于各类触摸屏设备,可以改善用户的触摸体验。

触摸屏校正方法

触摸屏校正方法

用久了出现在触摸不准不灵敏的时候的校正方法:
1、将触摸屏背面的四个拨码开关,第一个设置为ON,其余三个拨码开关位置保持不变。

正常情况下四个拨码开关均在OFF的位置,如下图:
将第一个拨码开关设置为ON (上图)
2、按一下拨码开关旁边的黑色的Reset(复位)按钮或者将人机界面重新上电。

3、人机界面启动后,会要求对触控面板进行触控校正。

校正的方法为人机界面屏幕上出现的十字光标在什么位置就触控一下这个位置,直到十字光标消失,人机界面会继续往下执行启动过程
4、校正完之后,会弹出如下对话框,询问是否要恢复为出厂设置密码如下图,请选择NO 校正完成。

记得把第一个将第一个拨码开关设置回OFF
TK6070需要把J3端子的1-2短接就行,校准完成后在恢复到7-8短接。

触摸屏校准方法

触摸屏校准方法

嵌入式Linux和MiniGUI结合的解决方案已经成为很多嵌入式系统的图形化方案之一,而触摸屏也是很多嵌入式系统首选的输入设备,因此触摸屏的校准也成为很多嵌入式系统开发过程中常常碰到的问题之一。

嵌入式Linux是一种可以进行裁减、修改使之能在嵌入式计算机系统上运行的操作系统,既继承了Internet上的无限的开放源代码资源,又具有嵌入式操作系统的特性。

该系统具有较高的稳定性和安全性、良好的硬件支持、标准兼容性和资源丰富等功能。

而触摸屏是一种方便、快捷的输入设备,附着在显示器的表面,与显示器配合使用,在工业控制场合得到了广泛的应用。

然而在实际的嵌入式程序移植的过程中,由于触摸屏尺寸的不同,以及GUI(Graphic User Interface)方案选择和IAL(Input Abstract Layer)的差异,一般开发板制造商并不提供触摸屏的校正程序。

本文介绍的正是笔者在制作实际的嵌入式Linux数控机床人机接口过程中,提出的一套基于嵌入式Linux和MiniGUI的通用触摸屏校准程序设计方案。

MiniGUI简介MiniGUI()是国内最有影响的自由软件项目之一, MiniGUI 项目的目标是为基于 Linux 的实时嵌入式系统提供一个轻量级的图形用户界面支持系统。

该项目自1998年底开始到现在,已历经7年多的开发过程,到目前为止,已经比较成熟和稳定,并且在许多实际产品或项目中得到了广泛应用。

MiniGUI 为应用程序定义了一组轻量级的窗口和图形设备接口。

利用这些接口,每个应用程序可以建立多个窗口,而且可以在这些窗口中绘制图形且互不影响。

用户也可以利用MiniGUI 建立菜单、按钮、列表框等常见的 GUI 元素。

MiniGUI 可以具有两种截然不同的运行时模式:MiniGUI-Threads或者MiniGUILite。

运行在 MiniGUI-Threads 上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程中运行。

电容屏触摸校准方法

电容屏触摸校准方法

电容屏触摸校准方法
电容屏触摸校准是确保触摸屏准确响应用户输入的重要步骤。

以下是电容屏触摸校准的一般方法:
1. 手动校准,在某些设备上,可以通过进入设置菜单中的触摸屏校准选项来手动进行校准。

在这种情况下,系统会显示一些目标点,用户需要按照指示用手指精确地点击这些点,以便系统能够准确地识别屏幕的触摸位置。

2. 自动校准,许多设备在启动时会自动进行触摸屏校准,系统会通过内置的算法自动识别触摸屏的特征并进行校准。

这种方法通常更简单,用户无需进行手动操作。

3. 使用校准工具,一些设备可能配备了专门的校准工具,用户可以通过这些工具进行更精细的触摸屏校准,以确保触摸屏在不同位置都能准确响应。

4. 软件校准,在一些情况下,触摸屏校准可以通过安装特定的校准软件来实现,这些软件通常提供了更多的参数和选项,用户可以根据自己的需求进行定制化的校准。

无论采用哪种方法,触摸屏校准都是非常重要的,它可以确保设备在日常使用中能够准确响应用户的操作,提高了用户体验。

在进行触摸屏校准时,用户需要确保环境安静,避免干扰,以获得最佳的校准效果。

同时,定期进行触摸屏校准也是一个好习惯,可以确保设备长期保持良好的触摸性能。

电容屏触摸校准方法

电容屏触摸校准方法

电容屏触摸校准方法标题:电容屏触摸校准方法详解随着科技的发展,智能手机、平板电脑等移动设备已经深入到我们的日常生活中。

这些设备大多使用电容式触摸屏,但有时我们会发现屏幕的触摸点与实际位置存在偏差,这时就需要进行触摸校准。

本文将详细介绍电容屏触摸校准的方法。

一、了解电容屏工作原理电容屏是通过人体的导电性来感知触控位置的。

电容屏由多层组成,其中最重要的是底层的玻璃板和顶层的保护层。

这两层之间有许多透明的电极,形成许多小电容。

当手指接触屏幕时,会改变这些小电容的电荷分布,从而计算出触控的位置。

二、电容屏触摸校准的重要性由于制造误差、环境温度变化等因素,电容屏的实际触摸位置可能会与设计位置产生偏差,这就需要我们进行触摸校准。

触摸校准可以确保屏幕的精确度,提高用户的操作体验。

三、电容屏触摸校准方法1. 使用系统自带的校准工具:大部分移动设备都有内置的触摸屏校准工具。

通常在设置菜单中可以找到。

按照提示完成一系列的操作,如点击指定的点,画线等,就可以完成校准。

2. 手动校准:如果设备没有提供校准工具,或者校准后仍然存在问题,我们可以尝试手动校准。

首先,我们需要找到设备的固件文件,然后使用文本编辑器打开。

在固件文件中,我们可以找到触摸屏的校准参数,包括X轴和Y轴的偏移量和灵敏度。

根据实际情况调整这些参数,然后保存并重新刷入固件,就可以完成校准。

四、注意事项1. 在进行触摸校准时,应保证设备电量充足,避免在过程中断电导致数据丢失。

2. 校准过程需要一定的耐心和细心,不要急躁,以免影响校准效果。

3. 如果多次校准后仍然无法解决问题,可能是硬件问题,需要找专业的维修人员处理。

总的来说,电容屏触摸校准是一项简单但重要的任务。

只有正确的校准,才能保证屏幕的准确性和稳定性,提高用户的使用体验。

希望以上的介绍能帮助大家更好地理解和掌握电容屏触摸校准的方法。

触摸屏的校准方法

触摸屏的校准方法

本文介绍的校准方法需要三个目标点/或测试点,然后依次进行触摸测试,以确定该显示屏特有的校准因数。

最后通过这些校准因数将触摸屏的对应点与实际显示的对应点完全对应起来。

误差的来源有几个误差源会影响触摸屏控制器,使之无法产生正确的对应点X和Y坐标。

最主要的误差源是电气噪声、机械误差及放大因子。

此外,操作者的误操作也会有所影响,如手指或铁笔按压时间不够长或压力不够大。

以上所有误差均会产生无用数据,必须对它进行纠正补偿才能使触摸屏正常工作。

在各种电气系统中,由热效应或电磁效应以及系统设计缺陷引起的电气噪声无处不在。

在触摸屏中,由于AD转换器的前端电路具有高输入阻抗,因此特别容易受到电气噪声的影响。

除了对带有触摸屏控制器的电路小心布局外,我们通常在AD转换器输入端增加低通滤波器来解决这一问题。

此外也可选择软件方法,舍弃AD转换中的最小的一、两位,并用算法将一些落在允许误差范围之外的数据点从采样流中去除。

这种软件算法也可消除由使用者产生的误差。

本文所阐述的校准方法可用来解决由于机械误差和放大因素引起的误差。

图3中的圆圈表示触摸屏下的LCD显示的图形,椭圆则表示当用户顺着LCD显示的图像画圈时,触摸屏对应点的集合,不过有所夸大。

这个重建的图形显然经过一系列旋转、移位和放大,而且在每个方向变换的参数不一样。

校准的重点则是将触摸屏上显示的这个重建图形经过变换,换算出与LCD显示的图形相一致的对应点集合。

校准的数学基础为了得到一个通用解决方案,我们将每个点描述为一个数学参量。

如图4所示,可将LCD显示器上的每个点当作一个矢量PD,而该点在触摸屏上对应的点则当作矢量P。

此外,我们假设一个参量M,通过这个参量可将PD与P进行换算,即PD=MP(1)这里的M是一个转换矩阵,也是我们要研究的对象。

如果能得到转换矩阵M中相关的数值,那么给定触摸屏上任一点P,我们就可换算出它在LCD显示器上的对应点PD。

现在假设LCD显示器上的任一点都与触摸屏上的某点相对应,但要经过旋转、移位和放大处理。

触摸屏校准方法!!!

触摸屏校准方法!!!

触摸屏及ADS7846/HT20462009-05-15 10:17四线电阻式触摸屏,上图我们看到,触摸屏一般是上线和下线为一组。

左右线为一组,用万用表可以量到阻值。

上下的线阻为(Y+ Y-)阻值为 500欧----680欧。

左右线阻(X+ X-)阻值为 350欧----450欧。

jz4740,的中断计算程序#define SPCS_HIGH v_pSSIGPIORegs->group[SPI_EN_PIN/32].DATS = 1 <<(SPI_EN_PIN%32)#define SPCS_LOW v_pSSIGPIORegs->group[SPI_EN_PIN/32].DATC = 1 << (SPI_EN_PIN%32)#define SPCK_HIGH v_pSSIGPIORegs->group[SPI_CLK_PIN/32].DATS = 1 <<(SPI_CLK_PIN%32)#define SPCK_LOW v_pSSIGPIORegs->group[SPI_CLK_PIN/32].DATC = 1 <<(SPI_CLK_PIN%32)#define SPDA_HIGH v_pSSIGPIORegs->group[SPI_DATA_PIN/32].DATS = 1 <<(SPI_DATA_PIN%32)#define SPDA_LOW v_pSSIGPIORegs->group[SPI_DATA_PIN/32].DATC = 1 <<(SPI_DATA_PIN%32)#define SPDAIN v_pSSIGPIORegs->group[SPI_DATARX_PIN/32].PIN & (1 <<(SPI_DATARX_PIN % 32))//insert 0 ,not insert 1;#define SPDABUSY v_pSSIGPIORegs->group[SPI_BUSY_PIN/32].PIN & (1 <<(SPI_BUSY_PIN % 32))//insert 0 ,not insert 1;//------------------------------------------------------------------------------ void delay(int k){int i;for(i=0;i<k;i++);}void start()//SPI开始{SPCK_LOW;SPCS_HIGH;SPDA_HIGH;SPCK_HIGH;SPCS_LOW;}void WriteCharTo7843(unsigned char num) //SPI写数据{unsigned char count=0;SPCK_LOW;for(count=0;count<8;count++){if ( (num & 0x80) == 0x80)SPDA_HIGH;elseSPDA_LOW;SPCK_LOW;delay(3);SPCK_HIGH;delay(3);num <<= 1;}}int ReadFromCharFrom7843() //SPI 读数据{unsigned char count=0;WORD Num=0;for(count=0;count<12;count++){Num<<=1;SPCK_HIGH;delay(3); //下降沿有效SPCK_LOW;delay(3);if(SPDAIN)Num++;}return(Num);}INT WINAPI SpiISR( VOID ){while ( !g_SpiISR.bISTExist ){int X=0,Y=0,X_,y_;WaitForSingleObject( g_SpiISR.hIntrEvent, INFINITE );Sleep(30);//中断后延时以消除抖动,使得采样数据更准确start(); //启动SPIWriteCharTo7843(0x90); //送控制字 10010000 即用差分方式读X坐标详细请见有关资料delay(2);while(SPDABUSY);SPCK_HIGH; delay(4);SPCK_LOW; delay(4);X=ReadFromCharFrom7843();WriteCharTo7843(0xD0); //送控制字 11010000 即用差分方式读Y坐标详细请见有关资料delay(2);while(SPDABUSY);SPCK_HIGH; delay(4);SPCK_LOW; delay(4);Y=ReadFromCharFrom7843();SPCS_HIGH;RETAILMSG(1, (TEXT("SpiISR X=%d,Y=%d\r\n"),X,Y));InterruptDone( g_SpiISR.dwSwIntr );}return ( 0 );}控制字ADS7846的控制字由表1所列,其中S为数据传输起始标志位,该位必为“1”,A2~A0进行通道选择。

android实现触摸屏校准

android实现触摸屏校准
*
* Please read
* Documentation/input/input-programming.txt for more details.
*/
staticintabs_x[3]={350,3_x,int,NULL,0);
MODULE_PARM_DESC(abs_x,"Touchscreen absolute X min, max, fuzz");
int32_t* outScancode, int32_t* outKeycode, uint32_t *outFlags,
int32_t* outValue, nsecs_t* outWhen)
JNI部分:com_android_server_KeyInputQueue.cpp.提供接口
staticJNINativeMethod gInputMethods[]={
65536
2.Android事件处理机制
a.android事件的传入是从EventHub开始的,EventHub是事件的抽象结构,维护着系统设备的运行情况(设备文件放在/dev/input里),设备类型包括Keyboard、TouchScreen、TraceBall。它在系统启动的时候会通过open_device方法将系统提供的输入设备都增加到这个抽象结构中,并维护一个所有输入设备的文件描述符,如果输入设备是键盘的话还会读取/system/usr/keylayout/目录下对应键盘设备的映射文件(修改./development/emulator/keymaps/qwerty.kl来改变键值的映射关系),另外getEvent方法是对EventHub中的设备文件描述符使用poll操作等侍驱动层事件的发生,如果发生的事件是键盘事件,则调用Map函数按照映射文件转换成相应的键值并将扫描码和键码返回给KeyInputQueue.

光洋触摸屏校准方法

光洋触摸屏校准方法

光洋触摸屏校准方法
嘿,朋友们!今天咱就来唠唠光洋触摸屏校准这档子事儿。

你想想看啊,这触摸屏就好比是我们和机器沟通的一个小窗口,要
是这个窗口歪了斜了,那咱和机器的交流不就乱套啦!所以校准它可
太重要啦!
那怎么校准呢?别急,听我慢慢道来。

首先呢,咱得找到校准的入口,就像你找家门钥匙孔一样,得找对地方才行。

一般在系统设置里
能找到相关的选项,你就可着劲儿地找吧!
然后呢,进入校准模式,这时候屏幕上可能会出现一些小点点或者
线条啥的,嘿,这就是让你瞄准的目标呢!就好像打靶一样,你得把
你的手指准确地按在那些点上。

这时候你可别马虎呀,得集中注意力,一个点一个点地认真去校准。

要是你马马虎虎的,那校准出来的效果能好吗?那肯定不行呀!
哎呀,你说这触摸屏校准不就跟咱平时走路一样嘛,得一步一步走
稳了,才能走得顺溜。

要是东倒西歪的,那不就摔跟头啦!
校准的过程中,你可能会觉得有点繁琐,但是没办法呀,谁让咱要
让这触摸屏乖乖听话呢!你就耐心点,就当是和它培养感情啦!
等你把所有的点都校准好了,嘿,那感觉,就好像你给这触摸屏整
了个容一样,焕然一新呀!
这时候你再去试试操作,哇塞,那叫一个顺手,就跟你使唤自己的胳膊腿儿一样自然。

所以说呀,朋友们,可别小瞧了这光洋触摸屏校准,它可是能让你的使用体验大大提升呢!别嫌麻烦,认真去做,你肯定会有收获的。

好好对待你的触摸屏,它也会好好为你服务的哟!这不就是咱和机器和谐共处的小秘密嘛!你说是不是呀?。

有效处理手机触摸屏失灵的情况

有效处理手机触摸屏失灵的情况

有效处理手机触摸屏失灵的情况手机触摸屏失灵是我们在日常使用手机时经常遇到的问题之一。

当我们的手机触摸屏出现失灵时,可能会给我们的生活和工作带来不便。

因此,有效处理手机触摸屏失灵的情况是非常重要的。

本文将介绍一些常见的手机触摸屏失灵原因以及相应的解决方法,帮助读者更好地应对这一问题。

一、常见手机触摸屏失灵原因1.触摸屏脏污触摸屏使用时间长了,表面容易积聚灰尘、污垢等杂质,导致触摸屏失灵。

此时,我们可以使用干净柔软的布轻轻擦拭触摸屏表面,清除污垢,恢复触摸屏的灵敏度。

2.触摸屏受潮手机触摸屏进水或者受潮后,容易导致触摸屏失灵。

在这种情况下,我们应该立即将手机关机,并将手机放入干燥通风的地方晾干。

切记不要用电吹风或者暴晒阳光直接照射手机,以免损坏手机内部元件。

3.触摸屏硬件故障有时候,手机触摸屏失灵是由于硬件故障引起的。

这时候,我们可以尝试重启手机,看是否能够解决问题。

如果重启后触摸屏仍然无法正常使用,建议及时联系手机售后维修服务中心进行检修。

二、有效处理手机触摸屏失灵的方法1.软件问题处理有时候,手机触摸屏失灵是由于软件问题引起的。

我们可以尝试通过以下方法解决:(1)清理手机缓存:打开手机设置,找到应用管理,选择清理缓存,清理手机缓存可以帮助提高手机的运行速度,并有助于解决触摸屏失灵问题。

(2)更新系统:有时候,手机触摸屏失灵是由于系统版本过旧引起的。

我们可以打开手机设置,选择系统更新,更新手机系统到最新版本,以修复触摸屏失灵问题。

2.触摸屏校准有时候,手机触摸屏失灵是由于校准问题引起的。

我们可以尝试通过以下方法进行校准:(1)打开手机设置,选择显示设置,找到触摸屏校准选项,按照屏幕上的指示进行校准操作。

(2)如果手机没有触摸屏校准选项,我们可以尝试在应用商店中搜索并下载触摸屏校准软件,按照软件的指引进行校准操作。

3.专业维修服务如果以上方法都无法解决手机触摸屏失灵问题,建议及时联系手机售后维修服务中心进行专业维修。

触摸屏为什么点不准之触摸屏校准教程

触摸屏为什么点不准之触摸屏校准教程

触摸屏为什么点不准之触摸屏校准教程嵌入式环境下,触摸屏是鼠标的替代也是升级输入设备,下面我们来研究一下触摸屏。

1.基础知识触摸屏的原理这里不讲,只说下大体思路,触摸屏硬件能够接收到来自用于的触摸,通过若干方式,把数据转换成坐标,此时,坐标是物理坐标,即触摸屏的坐标,而不是显示设备的坐标,显示设备的坐标由软件来定义,而触摸屏的物理坐标是固定的。

所以,当我们点击触摸屏,数据被送给驱动,驱动送给应用程序时,我们得到的数据还不是真正的显示设备数据哦,比如点击一点,硬件传来的是(189,123),(我们约定x在前),这时如果我们说,屏幕上的(189,123)点有点击,这时不正确的,这个很容易明白的,物理的点只是采样到的点,并不是真正意义上的显示设备的坐标,毕竟显示坐标由我们来定。

那么怎么办呢?~这时,需要校准触摸屏,所有的触摸屏使用前,必须要经过校准。

2.触摸屏校准原理以上说了触摸屏需要校准的原因,问题出在,物理坐标和屏幕坐标并不匹配,不匹配有两个方面:第一,物理坐标的1个单位和屏幕坐标的1个单位并不相等,我们知道屏幕坐标1个单位一般是一个像素,而物理坐标的1个单位并不是1个像素.第二,假设我们把屏幕的左上角定义为(0,0),那么触摸屏的左上角的物理坐标并不是(0,0)(我们点击之后的物理采样数据)。

综上,校准有两个方面:第一,物理采样坐标与屏幕像素坐标的对应关系,也就是伸缩系数,即单位物理采样数据代表几个单位屏幕像素数据,x坐标和y坐标各有一个伸缩系数,分别记作:xScale和yScale。

计算方法很简单,为了精确,可以采样屏幕上的四个点,让用户点击,比如(20,20),(20,200),(300, 200),(300,20),通过横着的线段除以物理采样的数据线段,得到了x的伸缩系数。

同理可以得到y的伸缩系数。

第二,物理坐标的相对于屏幕像素坐标的偏移,假如我们不计算偏移,只计算伸缩系数的话,假设用户在屏幕点(20,20)点击,我们经过转换物理采样数据,即乘上伸缩系数,发现,校准后的数据并不是(20,20)点,原因就是因为有偏移,原因是触摸屏的物理采样数据,在左上角并不是(0,0),而是某个正数对,采样到的数据不会是0的,这就是偏移产生的原因,所以,在计算过伸缩系数之后,比如点击屏幕(20,20),采样到的数据是(45,78),而第一步计算出的伸缩系数分别是0.78和0.67,那么物理坐标转换成屏幕坐标后是(45*0.78,78*0.67),此时虽然我们得到了物理坐标对应的屏幕坐标,但是现在屏幕坐标和我们(20,20)所在的屏幕坐标并不在一个坐标系,即(0,0)点不同,所以我们要减去一个坐标系偏移,假设分别是xOffset和yOffset,那么两个坐标做差便得到了xOffset和yOffset。

android触摸屏校准算法

android触摸屏校准算法

转]Android触摸屏校准程序的实现一,触摸校准算法触摸屏校准通用方法。

(XL, YL是显示屏坐标,XT, YT是触摸屏坐标,)XL = XT*A+YT*B+CYL = XT*D+YT*E+F由于具体计算是希望是整数运算,所以实际中保存的ABCDEF为整数,而增加一个参数Div XL = (XT*A+YT*B+C) / DivYL = (YT*D+YT*E+F) / DivTSLIB把以上的7个参数ABCDEF Div 保存在pointercal 文件中。

不校准的数据:A=1, B=0, C=0, D=0, E=1, F=0, Div=1A B C D E F Div-411 37818 -3636780 -51325 39 47065584 65536二,Android 事件处理机制android 事件的传入是从EventHub开始的,EventHub是事件的抽象结构,维护着系统设备的运行情况(设备文件放在/dev/input里),设备类型包括Keyboard、TouchScreen、TraceBall。

它在系统启动的时候会通过open_device方法将系统提供的输入设备都增加到这个抽象结构中,并维护一个所有输入设备的文件描述符,如果输入设备是键盘的话还会读取/system/usr/keylayout/目录下对应键盘设备的映射文件(修改./development/emulator/keymaps /qwerty.kl来改变键值的映射关系),另外getEvent方法是对EventHub中的设备文件描述符使用poll操作等侍驱动层事件的发生,如果发生的事件是键盘事件,则调用Map函数按照映射文件转换成相应的键值并将扫描码和键码返回给KeyInputQueue.frameworks/base/services/jni/com_android_server_KeyInputQueue.cpp根据事件的类型以及事件值进行判断处理,从而确定这个事件对应的设备状态是否发生了改变并相应的改变对这个设备的描述结构InputDevice。

如何校准触摸屏基准参数

如何校准触摸屏基准参数

如何校准触摸屏基准参数在触摸屏修理工作中,我们发觉电阻式触摸屏在嵌入式系统中用的较多,电阻式触摸屏可分为四线、五线、七线等几种,接下来,我们主要以WinCE触摸屏为例,分析如何校准触摸屏基准参数问题:在我们顺当完成驱动程序安装以及各种功能就都已经预备就绪了,现在就可以实际操作触摸屏幕了。

但一般来说,电阻式触摸屏需要校准,也就是说在驱动启动过程中MDD层要调用相应的DDSI函数来读取注册表中的校正数据校正触摸屏。

抱负状况下,校准程序只要在嵌入式设备初次加电测试过程中运行一次就可以了,参考值会被存储在非易失性存储器中,以免让用户在以后的加电启动期间再做校准。

不过,高质量的触摸屏驱动程序是应当要向用户供应一种进入校准例程的途径,从而在由于温度漂移或其它因素造成校准不精确时进行重新校准。

在抱负状况下,校正触摸屏基准只需两组原始数据,即在屏幕对角读取的最小和最大值。

但在实际应用中,由于很多电阻式触摸屏存在明显的非线性,假如只在最小和最大值之间简洁的插入位置数值会导致驱动程序特别的不精确。

因此,在WinCE中需要猎取多个校准点,常用的校准点数量为5个。

方法如下:1、首先驱动程序在函数DdsiTouchPanelGetDeviceCaps 中设置校准点的个数;2、是系统在TouchDriverCalibrationPointGet中猎取每个校准点的屏幕坐标;3、是在屏幕界面的校准点坐标处显示一个位置符号,用户需要精确地在位置符号按下触摸屏;4、驱动程序通过TouchPanelReadCalibrationPoint函数读取相应的触摸屏坐标值;5、然后再开头下一个校准点,直到循环设定的次数后将采集到的触摸屏坐标值和校准点屏幕坐标送到TouchPanelSetCalibration函数中进行处理,该函数将产生校准基准参数。

校准完成之后,触摸屏便可以开头正常的操作了。

华为触屏校准操作方法

华为触屏校准操作方法

华为触屏校准操作方法
华为触屏校准操作方法如下:
1. 进入手机的设置界面,找到并点击“显示”或“屏幕”选项。

2. 在屏幕设置页面中,查找并点击“高级显示”或“高级设置”选项。

3. 在高级显示或高级设置页面中,找到并点击“触摸屏幕校准”选项。

4. 进入触摸屏幕校准页面后,按照页面上的指示进行操作。

通常,校准过程会要求用户依次点击出现的一系列方块或小圆圈。

根据提示,用手指轻触屏幕上的方块或小圆圈,并保持按住几秒钟,以完成触摸屏幕的校准。

5. 完成校准后,系统会自动保存设置,并提示校准成功。

请注意,不同款式和型号的华为手机可能在设置页面的具体位置有所不同,以上操作方法仅供参考。

如果您无法找到“触摸屏幕校准”选项或无法完成校准,请参考手机的用户手册或联系华为客服寻求进一步帮助。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式Linux和MiniGUI结合的解决方案已经成为很多嵌入式系统的图形化方案之一,而触摸屏也是很多嵌入式系统首选的输入设备,因此触摸屏的校准也成为很多嵌入式系统开发过程中常常碰到的问题之一。

嵌入式Linux是一种可以进行裁减、修改使之能在嵌入式计算机系统上运行的操作系统,既继承了Internet上的无限的开放源代码资源,又具有嵌入式操作系统的特性。

该系统具有较高的稳定性和安全性、良好的硬件支持、标准兼容性和资源丰富等功能。

而触摸屏是一种方便、快捷的输入设备,附着在显示器的表面,与显示器配合使用,在工业控制场合得到了广泛的应用。

然而在实际的嵌入式程序移植的过程中,由于触摸屏尺寸的不同,以及GUI(Graphic User Interface)方案选择和IAL(Input Abstract Layer)的差异,一般开发板制造商并不提供触摸屏的校正程序。

本文介绍的正是笔者在制作实际的嵌入式Linux数控机床人机接口过程中,提出的一套基于嵌入式Linux和MiniGUI的通用触摸屏校准程序设计方案。

MiniGUI简介MiniGUI()是国内最有影响的自由软件项目之一, MiniGUI 项目的目标是为基于 Linux 的实时嵌入式系统提供一个轻量级的图形用户界面支持系统。

该项目自1998年底开始到现在,已历经7年多的开发过程,到目前为止,已经比较成熟和稳定,并且在许多实际产品或项目中得到了广泛应用。

MiniGUI 为应用程序定义了一组轻量级的窗口和图形设备接口。

利用这些接口,每个应用程序可以建立多个窗口,而且可以在这些窗口中绘制图形且互不影响。

用户也可以利用MiniGUI 建立菜单、按钮、列表框等常见的 GUI 元素。

MiniGUI 可以具有两种截然不同的运行时模式:MiniGUI-Threads或者MiniGUILite。

运行在 MiniGUI-Threads 上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程中运行。

相反,运行在 MiniGUI-Lite 上的每个程序是单独的进程,每个进程也可以建立多个窗口。

MiniGUI-Threads 适合于具有单一功能的实时系统,而 MiniGUI-Lite则适合于具有良好扩展性的嵌入式系统,比如要下载并运行第三方应用程序的智能手持终端。

MiniGUI在体系结构上有许多独特之处。

它的主要特色有:● 提供了完备的多窗口机制;● 对话框和预定义的控件类;● 消息传递机制;● 多字符集和多字体支持;● 全拼、五笔等汉字输入法支持;● BMP、GIF、JPEG等常见图像文件的支持;● 小巧,包含全部功能的库文件大小为300KB左右;● 可配置,可根据项目需求进行定制配置和编译;● 可移植性好。

基于以上特点,MiniGUI和Microwindows、Qt-Embedded是当前嵌入式Linux中比较流行的三大嵌入式Linux的图形用户接口的解决方案。

而MiniGUI因为其“小”的特色和对中文最好的支持以及中文参考资料的配备等独特优点,在嵌入式的实际GUI 方案选型中, MiniGUI也成为国人作实验研究或者项目所青睐的解决方案。

环境参数的设置在嵌入式系统中,多数都会选择安装触摸屏设备,然而由各种厂商生产的设备参数各不相同、驱动也不一致。

现在有的开发板厂商已经可以提供触摸屏的驱动接口,但是由于触摸屏的尺寸大小以及一些具体参数的设置失误,造成基于触摸屏操作的图形界面坐标不准,也就是说触摸屏读出的点的物理坐标和实际LCD屏幕的像素坐标不匹配,应用程序无法通过触摸屏得到正确操控。

笔者基于S3c2410的ARM9内核,使用6.4英寸,640×480的触摸屏,嵌入式Linux内核2.4.20和MiniGUI1.3.0,Lite版本,设计了一套简单可行的方案,可以方便地实现触摸屏的校准。

在开始校正触摸屏的坐标前,首先要修改MiniGUI.cfg文件使其适应触摸屏驱动,该文件一般保存在开发板的/usr/local 目录下。

所做修改如表所示。

另外,在开发板的/dev/的目录下建立连接ln-s /dev/touchscreen/Oraw ts 。

配置文件修改的主要目的是把IAL(Input Abstract Layer,输入抽象层)改为SMDK2410,输入设备改为/dev/ts,鼠标类型IMPS2取消掉,使其适应触摸屏驱动。

校正原理及编程思路1.校正原理我们传统的鼠标是一种相对定位系统,只和前一次鼠标的位置坐标有关。

而触摸屏则是一种绝对坐标系统,要选哪就直接点哪,与相对定位系统有着本质的区别。

绝对坐标系统的特点是每一次定位坐标与上一次定位坐标没有关系,每次触摸的数据通过校准转为屏幕上的坐标,不管在什么情况下,触摸屏这套坐标在同一点的输出数据是稳定的。

不过由于技术原理的原因,并不能保证同一点触摸每一次采样数据相同,不能保证绝对坐标定位,点不准,这就是触摸屏最怕出现的问题:漂移。

对于性能质量好的触摸屏来说,漂移的情况出现并不是很严重。

所以很多应用触摸屏的系统启动后,进入应用程序前,先要执行校准程序。

通常应用程序中使用的LCD坐标是以像素为单位的。

比如说:左上角的坐标是一组非0的数值,比如(20,20),而右下角的坐标为(620,460)。

这些点的坐标都是以像素为单位的,而从触摸屏中读出的是点的物理坐标,其坐标轴的方向、XY值的比例因子、偏移量、缩放因子都与LCD坐标不同,所以,可以在IAL的某个函数(比如wait_event函数)中把物理坐标首先转换为像素坐标,然后再赋给POS结构,达到坐标转换的目的。

图是LCD坐标和触摸屏的物理坐标的比较。

2.触摸屏校正思路在IAL的某个函数(比如wait_event函数)中加入调试信息,开发板上运行Calibrate程序,那么触摸屏上任何一点的坐标就可以在主机监视屏上回显出来。

于是,就采集到了4个角的物理坐标,假设是6.4英寸屏,640X480分辨率,则它们的像素坐标分别是(20,20)、(20,460)、(620,460)和(620,20)。

这样,使用待定系数法就可以算出坐标系之间的平移关系。

比如:Vx = xFactor*Px + xOffsetVy = yFactor*Py + yOffset在笔者使用的开发板上,系数xFactor、yFactor、xOffset、yOffset的值分别为0.211、-16.27、-19/116、625.23。

那么,在IAL的特定函数中就可以按照这个变换关系把物理坐标转换为像素坐标赋给POS结构了。

因此,应用程序中首先弹出一个有若干点的界面,然后让用户去点,参照了Qt-embedded的对标程序,一般采用了触摸屏四个角的四个点。

根据像素坐标和物理坐标计算参数,并保存到一个文件中。

那么以后只要这个文件的内容有效则不必再经历屏幕校准的过程。

另外需要提醒的是,还要参照一下触摸屏驱动的读方法,确定从触摸屏读出的数据的组织格式。

比如笔者使用的S3c2410的驱动的读方法就是返回8个字节表示一点的坐标,所以在IAL的特定函数中首先要拼接才能得到点的物理坐标。

程序设计以下是实现校准的简单构架。

1.给屏幕上放置4个定位点通过直接给屏幕划两个短线交叉的方法来实现。

下面的代码表示,在(20,20)点画一个十字光标。

DrawLine (15, 20, 26, 20, 0xf800);DrawLine (20, 15, 20, 26, 0xf800);2.获得每个定位点的值,也就是触摸屏采样的值这个值要进行核准后,保存到PEN_CONFIG结构体中,其代码如下:do {// Calibrate Point 1 (20,20)DrawLine (15, 20, 26, 20, 0xf800);DrawLine (20, 15, 20, 26, 0xf800);doGetTouchvalue (tfd, &point[0].x, &point[0].y);while (!(point[0].x > X1_SCOPE_MIN && point0].x < X1_SCOPE_MAX && point[0].y > Y1_SCOPE_MIN && point[0].y ...//上面是第一个定位点处理的方法,因为有四个点,其他的也和此一样。

只不过定位点和判断范围不同罢了。

//最后还要对定位的准确度进行判断。

} while(CheckCalibratePont());3.保存PEN_CONFIG结构体到一个数据文件中typedef struct{U32 xFactor;//X方向比例因子U32 yFactor;//Y方向比例因子U32 xOffset;//X方向偏移量U32 yOffset;//Y方向偏移量U8 scale; //缩放因子RECT pan; //校正区域矩形}PEN_CONFIG, *P_PEN_CONFIG;在程序中通过计算获得此结构体,这些数据是非常重要的,它提供给IAL使用。

以下是保存这个结构体的部分源码:rt.left=(point[0].x + point[1].x)/2;rt.top=(point[0].y + point[3].y)/2;rt.right=(point[2].x + point[3].x)/2;rt.bottom=(point[2].y + point[1].y)/2;st.top=20;st.left=20;st.right=620;st.bottom=460;_PenCalibratePoint(&st,&rt);// Open the file for writing config filewfd = open("/var/pencfg", O_WRONLY);if (wfd < 0) {printf("Error: cannot open pencfg file.\n");exit(1);}printf("The pencfg file was opened successfully.\n");if(write(wfd, &_gPenConfig, sizeof(_gPenConfig)) == sizeof(_gPenConfig)){printf("Write Victor \n");}close(wfd);4.调试信息的输出void GetTouchValue(int fp, int *x, int *y){ ts_event_t ts;while (1) {if(read(fp, &ts, sizeof(ts_event_t)) == sizeof(ts_event_t)){if (ts.pressure == 0 ) break;*x = ts.x;*y = ABSY-ts.y;}}printf (" x= %d, y= %d \n", *x, *y);//在屏幕上输出触摸屏坐标}比例因子及偏移量的输出如下:printf ("_gPenConfig.xFactor = %x _gPenConfig.yFactor = %x \n",_gPenConfig.xFactor, _gPenConfig.yFactor);printf ("_gPenConfig.xOffset = %x _gPenConfig.yOffset = %x \n",_gPenConfig.xOffset, _gPenConfig.yOffset);printf ("_gPenConfig.scale = %x\n",_gPenConfig.scale);5.IAL如何获得PEN_CONFIG中的数据其原理很简单,上面的程序已经把PEN_CONFIG保存到/var/pencfg文件中,只需在IAL中写上打开该文件的代码,并且从中读取数据就可以了,其源码如下,在Init2410Input函数中。

相关文档
最新文档