关于触摸屏校准问题及触摸屏中断过程图解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int i=0; int xt[3],yt[3];
/*把背景填充为红色*/ Brush_Background(0xF800);
/*画校正用的三个十字坐标*/ //真实点(物理点) drawCross(24,32,0xFF0000); Draw_Text_8_16(28,36, 0x0000,0xFFFF, "1") ; drawCross(216,160,0xFF0000); Draw_Text_8_16(220, 164,0x0000,0xFFFF, "2") ; drawCross(120,288,0xFF0000); Draw_Text_8_16(124,292, 0x0000,0xFFFF, "3") ;
*
*
*
*
*
XZ1,YZ1
XJ1,YJ1
XZ1=K11XJ1(2)+K12XJ1+A11YJ1(2)+A12YJ1+B1
YZ1=K21XJ1(2)+K22XJ1+A21YJ1(2)+A22YJ1+B1
LCD校正范例: ************************************************************************** ***** 函数名:TSCal() ***** 功 能:触摸屏校正 ***** 参 数:无 ***** 返回值:无 ***** 创建者: 陈志发 ***** 创建时间:2011-03-30 ***** 最后更新:2011-03-30 ****************************************************************************/ void TSCal(void) {
图 6.4 四线电阻屏等效电路图
6.5 等待中断模式等效电路
图 6.6 读取 x 坐标时的等效电路图 XZ=A×XJ+B×YJ+C YZ=D×XJ+E×YJ+F
6.7 读取 Y 坐标时的等效电路
设 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 这六个参数最终的结果都是一个分式,而且都有一个共同的分母, 为:
触摸屏校准 在开始实现触摸屏功能之前,还需要解决一个问题,那就是触摸屏的校正。触摸屏和 LCD 是两种不同的物理器件。对于一个分辨率为 320×240 的 LCD,它的宽度为 320 个像素, 高度为 240 个像素。而触摸屏处理的数据是点的物理坐标,该坐标是通过触摸屏控制器采集 得到的。要想实现触摸屏上的物理坐标与 LCD 上的像素点坐标一一对应上,两者之间就需 要一定的转换,即校正。而且电阻式触摸屏由于自身的原因参数会发生变化,因此需要经常 性的校正。比较常见的校正方法是三点校正法,它的原理是:
/*依次读取三个采样点的坐标值*/ for (i=0;i<3;i++) {
while (flagTS==0) //flagTS采样结束标志位 { delay(500); }
xt[i]=xdata; yt[i]=ydata; flagTS=0; }
/*计算参数 */ K=(xt[0]-xt[2])*(yt[1]-yt[2])-(xt[1]-xt[2])*(yt[0]-yt[2]); A=(32-288)*(yt[1]-yt[2])-(160-288)*(yt[0]-yt[2]); B=(xt[0]-xt[2])*(160-288)-(32-288)*(xt[1]-xt[2]); C=yt[0]*(xt[2]*160-xt[1]*288)+yt[1]*(xt[0]*288-xt[2]*32)+yt[2]*(xt[1]*32-xt [0]*160); D=(24-120)*(yt[1]-yt[2])-(216-120)*(yt[0]-yt[2]); E=(xt[0]-xt[2])*(216-120)-(24-120)*(xt[1]-xt[2]); F=yt[0]*(xt[2]*216-xt[1]*120)+yt[1]*(xt[0]*120-xt[2]*24)+yt[2]*(xt[1]*24-xt [0]*216);
保存下来的参数即可。
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
校准公式:二元二次方程。
下面的程序是实现触摸屏功能的简单实例——以触点为中心,绘制出一个红色的边 长为 10 个像素的正方形。触点的坐标是用下面方法得到的:当触笔落下时,进入中断,然 后读取触点处的坐标,直到触笔的抬起,才退出该次中断。由于触摸屏需要校正,因此在使 用之前需要进行校正处理。但并不是每次使用都要校正,只要坐标没有发生漂移,就不需要 再次校正。所以在进行一次校正后,只要把那几个参数保存起来,下次需要时直接使用上次
/*校验完成后写一个标志位*/ TSOK = 1; }
6.8.4 触摸屏知识点
1. 触摸屏-知识点 1:触摸屏分类 常见触摸屏有电阻型、电容型、红外型。 2. 触摸屏-知识点 2:触摸屏原理 它是 LCD 和按键组合。 触摸屏有 2 层,X , Y。 触摸屏介绍 电阻式(容易受到干扰,只能单点)、电容式(多点触摸)、红外式(抗干扰强,单点) 等触摸屏。 配套开发板的 TFTLCD 液晶屏内部带有触摸屏控制器,为电阻型触摸屏。 S3C2440 的触摸屏接口可以驱动四线电阻触摸屏,四线电阻触摸屏的等效电路如图如下 图所示,途中粗黑线表示相互绝缘的两层导电层,当按压时,它们在触点处相连;不同的触 点在 x,y 方向上的分压值不一样,将这两个电压值经过 A/D 转换后即可得到 x,y 坐标。 触摸屏工作过程如下: 第一阶段:等待中断模式(ADCTSC=0b1101 0011) 平时触摸屏没有被按下时,由于上拉电阻的关系,Y_ADC 为高电平;当 x 轴和 y 轴受挤 压而接触导通后,Y_ADC 的电压由于连通到 y 轴接地而变为低电平,此低电平可做为中断触 发信号来通知 CPU 发生“Pen Down”事件,在 S3C2440 中,称为等待中断模式。 第二阶段:采样 X_ADC 电压,得到 x 坐标,等效电路如图所示: S1、S3 闭合,S2、S4、S5 断开,即 XP 接上电源、XM 接地,YP 作为模拟输入(对 CPU 而言),YM 高阻状态,XP 禁止上拉。这时,YP 即 X_ADC 就是 x 轴的分压点,进行 A/D 转换 后就得到 x 坐标。 第三阶段:采样 Y_ADC 电压,得到 y 坐标,等效电路如下图所示: S2、S4 闭合,S1、S3、S5 断开,即 YP 接上电源、YM 接地、XP 作为模拟输入(对 CPU 而言)、XM 高阻、XP 禁止上拉。这时,XP 即 Y_ADC 就是 y 轴的分压点,进行 A/D 转换后就 得到 y 坐标。
D=[(YD0-YD2)×(YT1-YT2)-(YD1-YD2)×(YT0-YT2)] / K
E=[(XT0-XT2)×(YD1-YD2)-(YD0-YD2)×(XT1-XT2)] / K
F = [YT0×(XT2×YD1 - XT1×YD2) + YT1×(XT0×YD2 - XT2×YD0) + YT2×(XT1×YD0-XT0×YD1)] / K
K=(XT0-XT2)×(YT1-YT2)-(XT1-XT2)×(YT0-YT2)
那么这六个参数分别为:
A=[(XD0-XD2)×(YT1-YT2)-(XD1-XD2)×(YT0-YT2)] / K
B=[(XT0-XT2)×(XD1-XD2)-(XD0-XD2)×(Xwenku.baidu.com1-XT2)] / K
C = [YT0×(XT2×XD1 - XT1×XD2) + YT1×(XT0×XD2 - XT2×XD0) + YT2×(XT1×XD0-XT0×XD1)] / K
/*把背景填充为红色*/ Brush_Background(0xF800);
/*画校正用的三个十字坐标*/ //真实点(物理点) drawCross(24,32,0xFF0000); Draw_Text_8_16(28,36, 0x0000,0xFFFF, "1") ; drawCross(216,160,0xFF0000); Draw_Text_8_16(220, 164,0x0000,0xFFFF, "2") ; drawCross(120,288,0xFF0000); Draw_Text_8_16(124,292, 0x0000,0xFFFF, "3") ;
*
*
*
*
*
XZ1,YZ1
XJ1,YJ1
XZ1=K11XJ1(2)+K12XJ1+A11YJ1(2)+A12YJ1+B1
YZ1=K21XJ1(2)+K22XJ1+A21YJ1(2)+A22YJ1+B1
LCD校正范例: ************************************************************************** ***** 函数名:TSCal() ***** 功 能:触摸屏校正 ***** 参 数:无 ***** 返回值:无 ***** 创建者: 陈志发 ***** 创建时间:2011-03-30 ***** 最后更新:2011-03-30 ****************************************************************************/ void TSCal(void) {
图 6.4 四线电阻屏等效电路图
6.5 等待中断模式等效电路
图 6.6 读取 x 坐标时的等效电路图 XZ=A×XJ+B×YJ+C YZ=D×XJ+E×YJ+F
6.7 读取 Y 坐标时的等效电路
设 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 这六个参数最终的结果都是一个分式,而且都有一个共同的分母, 为:
触摸屏校准 在开始实现触摸屏功能之前,还需要解决一个问题,那就是触摸屏的校正。触摸屏和 LCD 是两种不同的物理器件。对于一个分辨率为 320×240 的 LCD,它的宽度为 320 个像素, 高度为 240 个像素。而触摸屏处理的数据是点的物理坐标,该坐标是通过触摸屏控制器采集 得到的。要想实现触摸屏上的物理坐标与 LCD 上的像素点坐标一一对应上,两者之间就需 要一定的转换,即校正。而且电阻式触摸屏由于自身的原因参数会发生变化,因此需要经常 性的校正。比较常见的校正方法是三点校正法,它的原理是:
/*依次读取三个采样点的坐标值*/ for (i=0;i<3;i++) {
while (flagTS==0) //flagTS采样结束标志位 { delay(500); }
xt[i]=xdata; yt[i]=ydata; flagTS=0; }
/*计算参数 */ K=(xt[0]-xt[2])*(yt[1]-yt[2])-(xt[1]-xt[2])*(yt[0]-yt[2]); A=(32-288)*(yt[1]-yt[2])-(160-288)*(yt[0]-yt[2]); B=(xt[0]-xt[2])*(160-288)-(32-288)*(xt[1]-xt[2]); C=yt[0]*(xt[2]*160-xt[1]*288)+yt[1]*(xt[0]*288-xt[2]*32)+yt[2]*(xt[1]*32-xt [0]*160); D=(24-120)*(yt[1]-yt[2])-(216-120)*(yt[0]-yt[2]); E=(xt[0]-xt[2])*(216-120)-(24-120)*(xt[1]-xt[2]); F=yt[0]*(xt[2]*216-xt[1]*120)+yt[1]*(xt[0]*120-xt[2]*24)+yt[2]*(xt[1]*24-xt [0]*216);
保存下来的参数即可。
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
校准公式:二元二次方程。
下面的程序是实现触摸屏功能的简单实例——以触点为中心,绘制出一个红色的边 长为 10 个像素的正方形。触点的坐标是用下面方法得到的:当触笔落下时,进入中断,然 后读取触点处的坐标,直到触笔的抬起,才退出该次中断。由于触摸屏需要校正,因此在使 用之前需要进行校正处理。但并不是每次使用都要校正,只要坐标没有发生漂移,就不需要 再次校正。所以在进行一次校正后,只要把那几个参数保存起来,下次需要时直接使用上次
/*校验完成后写一个标志位*/ TSOK = 1; }
6.8.4 触摸屏知识点
1. 触摸屏-知识点 1:触摸屏分类 常见触摸屏有电阻型、电容型、红外型。 2. 触摸屏-知识点 2:触摸屏原理 它是 LCD 和按键组合。 触摸屏有 2 层,X , Y。 触摸屏介绍 电阻式(容易受到干扰,只能单点)、电容式(多点触摸)、红外式(抗干扰强,单点) 等触摸屏。 配套开发板的 TFTLCD 液晶屏内部带有触摸屏控制器,为电阻型触摸屏。 S3C2440 的触摸屏接口可以驱动四线电阻触摸屏,四线电阻触摸屏的等效电路如图如下 图所示,途中粗黑线表示相互绝缘的两层导电层,当按压时,它们在触点处相连;不同的触 点在 x,y 方向上的分压值不一样,将这两个电压值经过 A/D 转换后即可得到 x,y 坐标。 触摸屏工作过程如下: 第一阶段:等待中断模式(ADCTSC=0b1101 0011) 平时触摸屏没有被按下时,由于上拉电阻的关系,Y_ADC 为高电平;当 x 轴和 y 轴受挤 压而接触导通后,Y_ADC 的电压由于连通到 y 轴接地而变为低电平,此低电平可做为中断触 发信号来通知 CPU 发生“Pen Down”事件,在 S3C2440 中,称为等待中断模式。 第二阶段:采样 X_ADC 电压,得到 x 坐标,等效电路如图所示: S1、S3 闭合,S2、S4、S5 断开,即 XP 接上电源、XM 接地,YP 作为模拟输入(对 CPU 而言),YM 高阻状态,XP 禁止上拉。这时,YP 即 X_ADC 就是 x 轴的分压点,进行 A/D 转换 后就得到 x 坐标。 第三阶段:采样 Y_ADC 电压,得到 y 坐标,等效电路如下图所示: S2、S4 闭合,S1、S3、S5 断开,即 YP 接上电源、YM 接地、XP 作为模拟输入(对 CPU 而言)、XM 高阻、XP 禁止上拉。这时,XP 即 Y_ADC 就是 y 轴的分压点,进行 A/D 转换后就 得到 y 坐标。
D=[(YD0-YD2)×(YT1-YT2)-(YD1-YD2)×(YT0-YT2)] / K
E=[(XT0-XT2)×(YD1-YD2)-(YD0-YD2)×(XT1-XT2)] / K
F = [YT0×(XT2×YD1 - XT1×YD2) + YT1×(XT0×YD2 - XT2×YD0) + YT2×(XT1×YD0-XT0×YD1)] / K
K=(XT0-XT2)×(YT1-YT2)-(XT1-XT2)×(YT0-YT2)
那么这六个参数分别为:
A=[(XD0-XD2)×(YT1-YT2)-(XD1-XD2)×(YT0-YT2)] / K
B=[(XT0-XT2)×(XD1-XD2)-(XD0-XD2)×(Xwenku.baidu.com1-XT2)] / K
C = [YT0×(XT2×XD1 - XT1×XD2) + YT1×(XT0×XD2 - XT2×XD0) + YT2×(XT1×XD0-XT0×XD1)] / K