电阻式触摸屏校准算法分析
- 格式:doc
- 大小:60.50 KB
- 文档页数:4
三点校准法三点校准法较之前面介绍的二点校准法更为精确。
当触摸屏与液晶屏间的角度差很小时,经过推理可以假设触摸屏与液晶显示器各点之间的对应关系为(假设液晶显示器的坐标为(XD, YD),触摸屏的坐标为(X,Y)):XD = AX + BY + CYD =DX + EY + F因为要取三个点进行校准,所以存在六个变量,即要通过六个方程式求出液晶显示器的坐标。
此处要求三个点尽量分散,最好为左上角、中间、右下角三点。
得:XD0 = AX0 + BY0 + CXD1 = AX1 + BY1 + CXD2 = AX2 + BY2 + CYD0 = DX0 + EY0 + FYD1 = DX1 + EY1 + FYD2 = DX2 + EY2 + F可求出 A、B、C、D、E、F的值,一旦这些参数值定下来,便可利用上面的方程组,通过触摸屏上的原始数据计算出它在LCD显示器上的对应点。
推导得出将K作为各方程式的公分母,便可得出未知量:K = (X0-X2)(Y1-Y2)-(X1-X2)(Y0-Y2)A = ((XD0-XD2)(Y1-Y2)-(XD1-XD2)(Y0-Y2))/KB = ((X0-X2)(XD1-XD2)-(XD0-XD2)(X1-X2))/KC = (Y0(X2XD1-X1XD2) + Y1(X0XD2-X2XD0) + Y2(X1XD0-X0XD1))/KD = ((YD0-YD2)(Y1-Y2)-(YD1-YD2)(Y0-Y2))/KE = ((X0-X2)(YD1-YD2)-(YD0-YD2)(X1-X2))/KF = (Y0(X2YD1-X1YD2) + Y1(X0YD2-X2YD0) + Y2(X1YD0-X0YD1))/K。
触摸屏及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进行通道选择。
关于电阻式触摸屏的线性校准问题1 引言阻性触摸屏与LCD 显示器上的各点很难完全准确配合,因此除了采用精确的机械装配技术校准之外,在使用之前还必须进行软件校准。
本文介绍的校准方法首先确定误差源,然后通过三个选定点导出触摸屏的校准矩阵,并用软件方法来实施点与点之间对应关系的校准。
掌握这种技术,对降低嵌入式系统的成本至关重要。
图1所示是一个阻性触摸屏的横截面,其结构十分简单,由上下相对放置的两层结构构成,FILM 和玻璃的内表面涂上薄薄一层导电材料,并用一些透明绝缘隔离点(绝缘点)将导电表面隔开。
当手指或铁笔按压玻璃表面时,上层FILM 产生弯曲接触下层玻璃。
这种结构中层间的距离决定了触摸屏的敏感度。
层间距离越近,敏感度越小,压力就要越大,以使两层结构可靠接触。
玻璃或图1 阻性触摸屏的横截面 图2 触摸屏的等效电路图2所示是触摸屏的等效电路。
通过一个触摸屏控制器(AD 转换器)将电源的正、负极加到一块玻璃的导电层两端,另一块玻璃上的导电层则起到一个电位计游标的作用。
在玻璃上不同的触摸点,导电的情况也不同,数字转换器上便会录得不同的测试电压值,然后控制器将录得的电压值转换成一个二维坐标:X 轴坐标和Y 坐标。
这些控制器每秒钟可进行200次或更多的采样。
采样率通常与背景噪声和控制器质量有关。
智能控制器还具备其它一些功能,如检测到触摸时中断CPU 、在检测到触摸前设定采样率连续进行采样。
没有触摸时,控制器处于待机状态。
由于阻性触摸屏结构简单、操作易懂、所需软硬件有多个厂商可供选择,因此可用于对成本敏感的设计中。
然而,由于触摸屏与它背后的显示器(LCD 或其它)间的对应点很难完全配合,因此几乎所有带阻性触摸屏的设备在出厂前均要经过一定的校准。
否则在触摸屏上点击某一按钮或选择某项功能时,内置的软件便无法对这一点击做出正确响应。
本文介绍的校准方法需要三个目标点/或测试点,然后依次进行触摸测试,以确定该显示屏特有的校准因数。
电阻屏四点校准的原理电阻屏四点校准的原理电阻屏是一种常见的触摸屏技术,广泛应用在智能手机、平板电脑、电子签名板等设备上。
为了确保电阻屏的准确性和稳定性,四点校准成为了必要的步骤。
本文将介绍电阻屏四点校准的原理及其作用。
一、什么是电阻屏四点校准?电阻屏四点校准是一种通过模拟量转换器测量电阻屏上的四个特定点,以确定其电阻分布的过程。
校准的目的是确保电阻屏的触摸响应准确,并消除由于材料特性、温度变化等因素引起的误差。
二、为什么需要电阻屏四点校准?电阻屏是一种基于物理压力感应的触摸屏技术,通过人手或者特制的触笔施加压力来实现操作。
然而,由于材料特性的差异和温度的影响,电阻屏在不同位置的电阻值可能存在差异。
这会导致触摸点定位的偏差,使得用户操作不准确。
因此,四点校准的目的是通过测量和纠正这些差异,使电阻屏的触摸响应更加准确、可靠。
三、电阻屏四点校准的原理1. 准备工作在进行四点校准之前,首先需要提供一组已知准确坐标的参考点。
这些参考点可以通过机器精确标定或者其他测量手段得到。
2. 测量电流四点校准需要在电阻屏上施加小电流。
在校准过程中,首先需要在触摸屏的四个角落施加电流。
3. 测量压力通过测量电流的变化,可以得到一个电压值。
随着压力的施加,电压值也会发生变化。
4. 计算差异校准的关键在于计算不同触摸点之间的电阻差异。
在四点校准中,通过比较四个参考点之间的电阻值,可以确定触摸屏的电阻分布情况。
5. 纠正坐标根据上一步的计算结果,可以计算出每个触摸点的实际坐标。
通过将实际坐标与标定参考点进行比较,可以得到触摸点的偏差。
然后,利用这些偏差可以对触摸点进行纠正,从而提高触摸屏的精度。
四、电阻屏四点校准的优势1. 精确度高通过四点校准,可以准确地测量电阻屏的电阻差异,并计算触摸点的实际坐标。
这种精确度使得用户在操作时能够更加准确地点击、滑动或者缩放屏幕上的内容。
2. 稳定性强由于电阻屏四点校准可以消除由于材料特性和温度变化引起的误差,因此触摸屏的稳定性得到了提高。
STM32f103的电阻触摸屏的五点校正算法由于电阻式触摸屏就是一种传感器,它利用压力感应进行控制,将矩形区域中触摸点(X,Y)的物理位置转换为代表 X坐标和 Y 坐标的电压。
这里先引入两个概念,物理坐标和逻辑坐标。
物理坐标指触摸屏上点的实际位置,通常以液晶上点的个数来度量。
逻辑坐标指这点被触摸时A/D 转换后的坐标值。
如图1,我们假定液晶最左下角为坐标轴原点A ,在液晶上任取一点B (十字线交叉中心),B 在X 方向距离A 10 个点,在Y 方向距离A20 个点,则这点的物理坐标为(10,20)。
如果我们触摸这一点时得到的X 向A/D 转换值为100,Y 向A/D 转换值为200,则这点的逻辑坐标为(100,200)。
常用的电阻式触摸屏矫正方法有两点校准法和三点校准法。
本文这里介绍的是结合了不同的电阻式触摸屏矫正法的优化算法:五点校正法。
其中主要的原理是使用4点矫正法的比例运算以及三点矫正法的基准点运算。
五点校正法优势在于可以更加精确的计算出X和Y方向的比例缩放系数,同时提供了中心基准点,对于一些线性电阻系数比较差电阻式触摸屏有很好的校正功能。
校正相关的变量主要有:x[5] , y[5] 五点定位的物理坐标xl[5] , yl[5] 五点定位的逻辑坐标KX , KY 横纵方向伸缩系数XLC , YLC 中心基点逻辑坐标XC , YC 中心基点物理坐标(数值采用LCD显示屏的物理长宽分辨率的一半)触摸屏常和点阵式液晶显示(LCD)屏叠加在一起配套使用,构成一个矩形的实际物理平面; 而由用户触摸的触摸点集合经过 A/D 转换器,得到具体显示坐标的集合,这个集合构成了一个逻辑平面。
由于存在误差,这两个平面并不重合,校准的作用就是要将逻辑平面映射到物理平面上,即得到触点在液晶屏上的位置坐标。
校准算法的中心思想也就是要建立这样一个映射函数现有的校准算法大多是基于线性校准, 即首先假定物理平面和逻辑平面之间的误差是线性误差,由旋转和偏移形成。
STM32f103 的电阻触摸屏的五点校正算法
由于电阻式触摸屏就是一种传感器,它利用压力感应进行控制,将矩形区域中触摸点(X,Y)的物理位置转换为代表X 坐标和Y 坐标的电压。
这里先引入两个概念,物理坐标和逻辑坐标。
物理坐标指触摸屏上点的实际位置,通常以液晶上点的个数来度量。
逻辑坐标指这点被触摸时A/D 转换后的坐标值。
如图1,我们假定液晶最左下角为坐标轴原点A,在液晶上任取一点B(十字线交叉中心),B 在X 方向距离A10 个点,在Y 方向距离A20 个点,则这点的物理坐标为(10,20)。
如果我们触摸这一点时得到的X 向A/D 转换值为100,Y 向A/D 转换值为200,则这点的逻辑坐标为(100,200)。
常用的电阻式触摸屏矫正方法有两点校准法和三点校准法。
本文这里介绍的是结合了不同的电阻式触摸屏矫正法的优化算法:五点校正法。
其中主要的原理是使用4 点矫正法的比例运算以及三点矫正法的基准点运算。
五点校正法优势在于可以更加精确的计算出X 和Y 方向的比例缩放系数,同时提供了中心基准点,对于一些线性电阻系数比较差电阻式触摸屏有很好的校正功能。
校正相关的变量主要有:。
如何校准触摸屏基准参数在触摸屏修理工作中,我们发觉电阻式触摸屏在嵌入式系统中用的较多,电阻式触摸屏可分为四线、五线、七线等几种,接下来,我们主要以WinCE触摸屏为例,分析如何校准触摸屏基准参数问题:在我们顺当完成驱动程序安装以及各种功能就都已经预备就绪了,现在就可以实际操作触摸屏幕了。
但一般来说,电阻式触摸屏需要校准,也就是说在驱动启动过程中MDD层要调用相应的DDSI函数来读取注册表中的校正数据校正触摸屏。
抱负状况下,校准程序只要在嵌入式设备初次加电测试过程中运行一次就可以了,参考值会被存储在非易失性存储器中,以免让用户在以后的加电启动期间再做校准。
不过,高质量的触摸屏驱动程序是应当要向用户供应一种进入校准例程的途径,从而在由于温度漂移或其它因素造成校准不精确时进行重新校准。
在抱负状况下,校正触摸屏基准只需两组原始数据,即在屏幕对角读取的最小和最大值。
但在实际应用中,由于很多电阻式触摸屏存在明显的非线性,假如只在最小和最大值之间简洁的插入位置数值会导致驱动程序特别的不精确。
因此,在WinCE中需要猎取多个校准点,常用的校准点数量为5个。
方法如下:1、首先驱动程序在函数DdsiTouchPanelGetDeviceCaps 中设置校准点的个数;2、是系统在TouchDriverCalibrationPointGet中猎取每个校准点的屏幕坐标;3、是在屏幕界面的校准点坐标处显示一个位置符号,用户需要精确地在位置符号按下触摸屏;4、驱动程序通过TouchPanelReadCalibrationPoint函数读取相应的触摸屏坐标值;5、然后再开头下一个校准点,直到循环设定的次数后将采集到的触摸屏坐标值和校准点屏幕坐标送到TouchPanelSetCalibration函数中进行处理,该函数将产生校准基准参数。
校准完成之后,触摸屏便可以开头正常的操作了。
电阻屏校准方法引言:电阻屏是现代电子设备中常见的一种输入设备,它通过触摸屏幕上的电阻点来实现对设备的操作。
然而,由于长时间使用、环境变化等原因,电阻屏的灵敏度和准确度可能会下降。
因此,对电阻屏进行校准是非常重要的,本文将介绍一种常用的电阻屏校准方法。
一、校准原理:电阻屏的校准原理是基于电阻值的变化来确定触摸位置的。
当我们触摸屏幕时,电阻屏上的两个电极会接触到一起,形成一个电阻,通过测量这个电阻值的变化,可以确定触摸的位置。
二、校准步骤:1. 打开校准程序:首先,我们需要打开设备的校准程序。
通常情况下,校准程序会在设备的设置菜单中,我们可以根据设备的操作指南找到它。
2. 开始校准:进入校准程序后,会出现一系列的校准点,我们需要按照指示依次点击这些校准点。
在每次点击后,系统会记录下触摸点的坐标,并根据这些数据进行校准计算。
3. 校准完成:完成所有校准点的点击后,系统会自动进行计算,并将校准结果保存起来。
此时,电阻屏的校准就完成了。
三、注意事项:1. 温度影响:电阻屏的灵敏度和准确度受环境温度的影响较大,因此,在校准过程中,应尽量保持设备和手指的温度稳定,避免温度变化对校准结果的影响。
2. 校准周期:电阻屏的灵敏度和准确度会随着时间的推移而降低,因此,建议每隔一段时间对电阻屏进行校准,以保证其正常使用。
3. 校准环境:在进行电阻屏校准时,应选择一个相对稳定、无电磁干扰的环境,以确保校准结果的准确性。
4. 校准方法选择:当出现电阻屏灵敏度下降或触摸位置不准确的情况时,可以尝试使用设备自带的校准程序进行校准。
如果问题依然存在,可以尝试使用专业的校准设备进行进一步的校准。
5. 校准结果验证:完成校准后,建议进行触摸位置的验证,以确保校准结果的准确性。
可以通过在屏幕上绘制直线或进行其他操作来验证触摸位置是否准确。
四、总结:通过本文介绍的电阻屏校准方法,我们可以有效地提高电阻屏的灵敏度和准确度,保证设备的正常使用。
关于电阻式触摸屏的线性校准问题1 引言阻性触摸屏与LCD 显示器上的各点很难完全准确配合,因此除了采用精确的机械装配技术校准之外,在使用之前还必须进行软件校准。
本文介绍的校准方法首先确定误差源,然后通过三个选定点导出触摸屏的校准矩阵,并用软件方法来实施点与点之间对应关系的校准。
掌握这种技术,对降低嵌入式系统的成本至关重要。
图1所示是一个阻性触摸屏的横截面,其结构十分简单,由上下相对放置的两层结构构成,FILM 和玻璃的内表面涂上薄薄一层导电材料,并用一些透明绝缘隔离点(绝缘点)将导电表面隔开。
当手指或铁笔按压玻璃表面时,上层FILM 产生弯曲接触下层玻璃。
这种结构中层间的距离决定了触摸屏的敏感度。
层间距离越近,敏感度越小,压力就要越大,以使两层结构可靠接触。
玻璃或图1 阻性触摸屏的横截面 图2 触摸屏的等效电路图2所示是触摸屏的等效电路。
通过一个触摸屏控制器(AD 转换器)将电源的正、负极加到一块玻璃的导电层两端,另一块玻璃上的导电层则起到一个电位计游标的作用。
在玻璃上不同的触摸点,导电的情况也不同,数字转换器上便会录得不同的测试电压值,然后控制器将录得的电压值转换成一个二维坐标:X 轴坐标和Y 坐标。
这些控制器每秒钟可进行200次或更多的采样。
采样率通常与背景噪声和控制器质量有关。
智能控制器还具备其它一些功能,如检测到触摸时中断CPU 、在检测到触摸前设定采样率连续进行采样。
没有触摸时,控制器处于待机状态。
由于阻性触摸屏结构简单、操作易懂、所需软硬件有多个厂商可供选择,因此可用于对成本敏感的设计中。
然而,由于触摸屏与它背后的显示器(LCD 或其它)间的对应点很难完全配合,因此几乎所有带阻性触摸屏的设备在出厂前均要经过一定的校准。
否则在触摸屏上点击某一按钮或选择某项功能时,内置的软件便无法对这一点击做出正确响应。
本文介绍的校准方法需要三个目标点/或测试点,然后依次进行触摸测试,以确定该显示屏特有的校准因数。
电阻式触摸屏校准算法分析<一> 算法分析电阻式触摸屏在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。
根据TP与LCD的比例一致性,可以这样计算得到Xl,Xr,Yb,Yt:Xl = (Xm/ Lwm) * Lwl Xr = (Xm/ Lwm) * LwrYb = (Ym/Lhm) * Lhb Yt = (Ym/Lhm) * Lht于是我们的目的达到了:x范围:xmin = Po.x – Xl xmax = Px.x + Xry范围:ymin = Po.y – Yb ymax = Py.y + Yt<二> 代码实现1、对触屏上报的物理坐标值PT的处理。
PTx = (((x > input_dev->absmax[ABS_X]) ? (input_dev->absmax[ABS_X] - input_dev->absmin[ABS_X]) : ((x <= input_dev->absmin[ABS_X]) ? 0 : (x - input_dev->absmin[ABS_X]))) * 1023) /(input_dev->absmax[ABS_X] - input_dev->absmin[ABS_X]);PTy = (((y > input_dev->absmax[ABS_Y]) ? (input_dev->absmax[ABS_Y] - input_dev->absmin[ABS_Y]) : ((y <= input_dev->absmin[ABS_Y]) ? 0 : (y - input_dev->absmin[ABS_Y]))) * 1023) /(input_dev->absmax[ABS_Y] - input_dev->absmin[ABS_Y]);2、应用层根据上报的物理坐标,换算得到对应LCD宽高的逻辑坐标值PL。
PLx = (PTx/1023)*240Ply = (Pty/1023)*4003、校准数据的计算过程。
factor_x = (ts_cal_cmd.cur_ts_maxx - ts_cal_cmd.cur_ts_minx) / ts_cal_cmd.gui_w;factor_y = (ts_cal_cmd.cur_ts_maxy - ts_cal_cmd.cur_ts_miny) / ts_cal_cmd.gui_h;/* calculate the real boundary from the data collected by Android calibration application *//*+++++++++++++++++++++++++++++++++++*/high_adc_x = (ts_cal_cmd.p_ts.px.x * factor_x) ;low_adc_x = (ts_cal_cmd.p_ts.po.x * factor_x) ;high_adc_y = (ts_cal_cmd.p_ts.py.y * factor_y) ;low_adc_y = (ts_cal_cmd.p_ts.po.y * factor_y) ;unit_adc_x = (high_adc_x - low_adc_x)/((ts_cal_cmd.p_gui.px.x - ts_cal_cmd.p_gui.po.x) / ts_cal_cmd.grid_x_size);unit_adc_y = (high_adc_y - low_adc_y)/((ts_cal_cmd.p_gui.py.y - ts_cal_cmd.p_gui.po.y) / ts_cal_cmd.grid_y_size);g_ts_range.max_x = high_adc_x + ((ts_cal_cmd.gui_w - ts_cal_cmd.p_gui.px.x)/ts_cal_cmd.grid_x_size) * unit_adc_x;g_ts_range.min_x = low_adc_x - (ts_cal_cmd.p_gui.po.x)/ts_cal_cmd.grid_x_size * unit_adc_x;g_ts_range.max_y = high_adc_y + (ts_cal_cmd.gui_h - ts_cal_cmd.p_gui.py.y)/ts_cal_cmd.grid_y_size * unit_adc_y;g_ts_range.min_y = low_adc_y - (ts_cal_cmd.p_gui.po.y)/ts_cal_cmd.grid_y_size * unit_adc_y;;g_ts_range.y_th = unit_adc_y;/*-----------------------------------*//* report the calibrated boundary data*//*+++++++++++++++++++++++++++++++++++*/g_ts_range.min_x += ts_cal_cmd.cur_ts_minx;g_ts_range.max_x += ts_cal_cmd.cur_ts_minx;g_ts_range.min_y += ts_cal_cmd.cur_ts_miny;g_ts_range.max_y += ts_cal_cmd.cur_ts_miny;ts_cal_cmd.cur_ts_cal_minx = g_ts_range.min_x;ts_cal_cmd.cur_ts_cal_maxx = g_ts_range.max_x;ts_cal_cmd.cur_ts_cal_miny = g_ts_range.min_y;ts_cal_cmd.cur_ts_cal_maxy = g_ts_range.max_y;4、填入代码中的默认校准数据T_ts_calibrate_gui_cmd g_default_cal_data = {1,0,1023, 0,1023, //cur_ts_minx,maxx,miny,maxy240, 400, // LCM: width/height defined in im9815_lcm.h{ // Calibration points: po, px, py{20, 20},{220, 20},{20, 380}},{ // Touch points: po, px, py{20, 20},{220, 20},{20, 380}},20, 20, // x, y grid size0,1023, 0,1023, //cur_ts_cal_minx,maxx,miny,maxy};<三> 实例分析1、第1次使用触屏,进入图形校准界面。
2、载入默认校准数据g_default_cal_data,3、得到3个校准点的物理坐标, 用默认校准数据参与处理,上报,最后转换为逻辑坐标。
点(20,20): 触屏得到的坐标Po(260,210)->上报坐标(260,210)->逻辑坐标(61,82)点(220,20) 触屏得到的坐标Px(865,200) ->上报坐标(865,200)->逻辑坐标(203,78)点(20,380) 触屏得到的坐标Py(250,950) ->上报坐标(250,950)->逻辑坐标(59,371)4、将得到的3个校准点的逻辑坐标,代入新校准数据的计算过程。
◎First step: 物理坐标/逻辑坐标的比值factor_x =(1023-0)/240=4.2625factor_y =(1023-0)/400=2.5575◎second step: 将测到的校准点之逻辑坐标转化为物理坐标。
得到以校准点为限的X范围,Y范围。
high_adc_x = (203* 4.2625) = 865.3low_adc_x = (61* 4.2625) = 260high_adc_y = (371*2.5575) = 948.8low_adc_y = (82* 2.5575) = 209.7◎third step: 得到每个逻辑格子对应的X、Y的物理宽度。
unit_adc_x = (865.3- 260) / ((220 - 20) / 20) =60.53unit_adc_y = (948.8- 209.7) / ((380 - 20) / 20) =41.06◎forth step: 以校准点为限的X范围,Y范围,加上校准点到屏边缘的距离所对应的物理宽度。