ARM的触摸屏程序设计
一、 实验目的
1.了解触摸屏基本概念与原理。
2.理解触摸屏与LCD 的密切配合。
3.编程实现对触摸屏的控制。
二、 实验内容
学习触摸屏基本原理,理解对触摸屏进行输出标定、与LCD 显示器配合的过程。
三、 预备知识
1、用ARM SDT 2.5 集成开发环境,编写和调试程序的基本过程。
2、ARM 应用程序的框架结构。
3、会使用Source Insight 3 编辑C 语言源程序。
4、能够在LCD 上进行格式化输出。
四、 实验设备及工具
硬件:ARM 嵌入式开发板、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentumn100 以
上、模拟电压信号源
软件:PC 机操作系统win98、ARM SDT 2.51 集成开发环境、仿真器驱动程序、Source
Insight 3.0
五、 实验原理及说明
1.触摸屏原理
触摸屏按其工作原理的不同分为表面声波屏、电容屏、电阻屏和红外屏几种。而常见的
又数电阻触摸屏。
如图12-1 所示,电阻触摸屏的屏体部分是一块与显示器表面非常配合的多层复合薄膜,
由一层玻璃或有机玻璃作为基层,表面涂有一层透明的导电层,上面再盖有一层外表面硬化
处理、光滑防刮的塑料层,它的内表面也涂有一层透明导电层,在两层导电层之间有许多细
小(小于千分之一英寸)的透明隔离点把它们隔开绝缘。
图8-1 (北泰)触摸屏的结构
如图8-2 所示,当手指或笔触摸屏幕时(图c),平常相互绝缘的两层导电层就在触摸点
位置有了一个接触,因其中一面导电层(顶层)接通X 轴方向的5V 均匀电压场(图a),使
得检测层(底层)的电压由零变为非零,控制器侦测到这个接通后,进行A/D 转换,并将
得到的电压值与5V 相比即可得触摸点的X 轴坐标为(原点在在靠近接地点的那端):
Xi=Lx*Vi / V(即分压原理)
同理得出Y 轴的坐标,这就是所有电阻技术触摸屏共同的最基本原理。
2.电阻触摸屏的有关技术
电阻触摸屏的主要部分是一块与显示器表面非常配合的电阻薄膜屏,这是一种多层的复
合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层叫ITo 的透明导电层,上面再盖有
一层外表面硬化处理、光滑防刮的塑料层,它的内表面也涂有一层导电层(ITO 或镍金)。
电阻触摸屏的两层ITOI 工作面必须是完整的,在每个工作面的两条边线上各涂一条银
胶,一端加5V 电压,一端加0V,就能在工作面的一个方向上形成均匀连续的平行电压分
布。在侦测到有触摸后,立刻A/D 转换测量接触点的模拟量电压值,根据5V 电压下的等
比例公式就能计算出触摸点在这个方向上的位置。
透明的导电涂层有两种:
1)ITO,氧化钢,弱导电体,特性是当厚度降到1800 个埃(埃=10-9 米)以下时会突然
变得透明,透光度为80%,再薄下去透光率反而下降,到300 埃厚度时又上升到80%。但
有遗憾是ITO 在这个厚度下非常脆,容易折断产生裂纹。 ITO 是所有电阻技术触摸屏及电
容技术触摸屏都用到的主要材料,实际上电阻和电容技术触摸屏的工作面就是ITO 涂层。
2)镍金涂层,五线电阻触摸屏的外层导电层使用的是延展性极好的镍金涂层材料,外
导电层由于频繁触摸,使用延展性好的镍金材料目的是为了延长使用寿命,但是成本较为高
昂,镍金导电层虽然延展性好,但是只能作透明导体,不适合作为电阻触摸屏的工作面,因
为它导电性太好,不直作精密电阻测量,而且金属不易做到厚度非常均匀。
第一代四线触摸屏两层ITOI 作面工作时都加上5V 到0V 的均匀电压分布场:一个工作
面加竖直方向的,一个工作面加水平方向的。引线至控制器总共需要四根电缆。因为四线电
阻触摸屏靠外的那层塑胶及ITO 涂层被经常触动,一段时间后外层薄薄的ITo 涂层就会有了
细小的裂纹,显然,导电工作面一旦有了裂纹,电流就会绕之而过,工作而上的电压场分布
也就不可能再均匀,这样,在裂纹附近触摸屏漂移严重,裂纹增多后,触摸屏有些区域可能
就再也触摸不到了。
四线电阻触摸屏的基层大多数是有机玻璃,不仅存在透光率低、风化、老化的问题,并
且存在安装风险,这是因为有机玻璃刚性差,安装时不能捏边上的银胶,以免薄薄的ITO
和相对厚实的银胶脱裂,不能用力压或拉触摸屏,以免拉断ITO 层。有些四线电阻触摸屏
安装后显得不太平整就是因为这个原因。
ITO 是无机物,有机玻璃是有机物,有机物和无机物是不能良好结合的,时间一长就容
易剥落。如果能够生产出曲面的玻璃板,玻璃是无机物,能和ITO 非常好的结合为导电玻
璃,这样电阻触摸屏的寿命能够大大延长。
第二代五线电阻技术触摸屏的基层使用的就是这种导电玻璃,不仅如此,五线电阻技术
把两个方向的电压场通过精密电阻网络都加在玻璃的导电工作面上,我们可以简单的理解为
两个方向的电压场分时加在同一工作面上,而外层镍金导电层只仅仅用来当作纯导体,有触
摸后靠既检测内层ITO 接触点电压又检测导通电流的方法测得触摸点的位置。五线电阻触摸屏内层ITO 需四条引线,外层只作导体仅仅一条,至控制器总共需要5 根电缆。因为五
线电阻屏的外层镍金导电层不仅延展性好,而且只作导体,只要它不断成两半,就仍能继续
完成作为导体的使命,而身负重任的内层1TO 直接与基层玻璃结合为一体成为导电玻璃,
导电玻璃自然没有了有机玻璃作基层的种种弊端,因此,五线电阻屏的使用寿命和透光率与
四线电阻屏相比有了一个飞跃:五线电阻屏的触摸寿命是3 千5 百万次,四线电阻屏则是小
于1 百万次,且五线电阻触摸屏没有安装风险,同时五线电阻屏的ITO 层能做得更薄,因
此透光率和清晰度更高,几乎没有色彩失真。
不管是四线电阻触摸屏还是五线电阻触摸屏,它们都是一种对外界完全隔离的工作环
境,不怕灰尘、水汽和油污,它可以用任何物体来触摸,可以用来写字画画,比较适合工业
控制领域及办公室内有限人的使用。电阻触摸屏共同的缺点是因为复合薄膜的外层采用塑胶
材料,不知道的人太用力或使用锐器触摸可能划伤整个触摸屏而导致报废。不过,在限度之
内,划伤只会伤及外导电层,外导电层的划伤对于五线电阻触摸屏来说没有关系,而对四线
电阻触摸屏来说是致命的。
3.触摸屏的控制
触摸屏的控制采用专用芯片,专门处理是否有笔或手指按下触摸屏,并在按下时分别给
两组电极通电,然后将其对应位置的模拟电压信号经过A/D 转换送回处理器。
图8-3 触摸屏控制结构(ADS7843)
4.触摸屏与显示器的配合
ADS7843 送回控制器的X 与Y 值仅是对当前触摸点的电压值的A/D 转换值,它不具有
实用价值。这个值的大小不但与触摸屏的分辨率有关,而且也与触摸屏与LCD 贴合的情况
有关。而且,LCD 分辨率与触摸屏的分辨率一般来说是不一样,坐标也不一样,因此,如
果想得到体现LCD 坐标的触摸屏位置,还需要在程序中进行转换。假设LCD 分辨率是
320*240,坐标原点在左上角;触摸屏分辨率是900*900,坐标原点在左上角,则转换公式
如下:
xLCD=[320*(x-x2)/(x1-x2)];
yLCD=[240*(y-y2)/(y1-y2)];
如果坐标原点不一致,比如LCD 坐标原点在右下角,而触摸屏原点在左上角,则还可
以进行如下转换:
xLCD=320-[320*(x-x2)/(x1-x2)];
yLCD=240-[240*(y-y2)/(y1-y2)];
最后得到的值,便可以尽可能得使LCD 坐标与触摸屏坐标一致,这样,更具有实际意
义。
5.与触摸屏有关的函数:
void TchScr_init(); //触摸屏寄存器设置
void TchScr_GetScrXY(int *x, int *y, U8 bCal); //获取当前触摸的转换结果
六、 实验步骤
首先,在主函数中加入下列代码:
void Main(void)
{
Port_Init(); //端口初始化
LCD_Init(); //LCD 初始化,因要用到LCD 输出结果
TchScr_init(); //初始化触摸屏
LCD_TOUCH(); //触摸屏输出结果
while(1) ; //死循环等待
}
即首先初始化处理器端口,TchScr_init()对触摸屏控制芯片进行必要的设置并启动,然后
使用LCD_TOUCH()等待有笔或手指压下触摸屏,并输出坐标。
1)触摸屏测试,触摸LCD 上某点,输出点的未经坐标转换的坐标。由于触摸屏输出的
实际上是一个线性电阻的分压输出,因此,其值只能保证是线性,却无法保证与LCD 的坐
标一致,因此,首先对其进行检测。在LCD_TOUCH()函数中,转换函数的第三个参数使用
0,TchScr_GetScrXY(&x, &y,0),即不对AD 转换结果进行转换。
void LCD_TOUCH()
{
int x,y,i;
U32 TchScrAction=TCHSCR_ACTION_UP;
LCD_ChangeMode(DspTxtMode);
LCD_printf("begin TouchScreen Task\n");
for(;;){
if(TchScrAction==TCHSCR_ACTION_UP){//笔未压下状态位
if(!((rPDATC&ADS7843_PIN_PEN)>>11)){//得到笔压下中断信号
Delay(50);
if(!((rPDATC&ADS7843_PIN_PEN)>>11)){//两次检测防干扰
TchScr_GetScrXY(&x, &y,0); //第三参数为0 时表示不经转换
TchScrAction=TCHSCR_ACTION_DOWN;//设置压下状态
LCD_printf("X=%d,Y=%d",x,y);//输出当前结果
}
}
}
if(TchScrAction==TCHSCR_ACTION_DOWN){//笔已压下状态位
if((rPDATC&ADS7843_PIN_PEN)>>11) {//笔中断信号已经消失
Delay(50);
if((rPDATC&ADS7843_PIN_PEN)>>11) { //两次检测防干扰
TchScrAction=TCHSCR_ACTION_UP;//设置笔未压状态位
}
}
}
}
}
设置好上述代码后,对其进行编译并运行,然后分别用非尖利的笔头压下LCD 的四个
脚,得到输出的X,Y 结果,并将之记下来,得出上下左右的极限值。
2)校准触摸屏坐标输出,转换坐标,与LCD 紧密配合
接下来使用步骤一中得到的值对其进行校准,在LCD_TOUCH()函数中,转换函数的第
三个参数使用1,TchScr_GetScrXY(&x, &y,1),即对AD 转换结果进行转换。并将步骤一中
得到的触摸屏坐标的上下左右的极限值设置到void LoadAxisMax()函数中:
TchScr_Xmax=1840;
TchScr_Xmin=176;
TchScr_Ymax=195;
TchScr_Ymin=1910;
修改完代码后,编译并将结果下载到ARM 中运行,再次用手或笔压下触摸屏,可以发
现输出的坐标与LCD 的实际坐标一致。在此基础上,便可以编写触摸屏应用程序了。
3) 下载“综合应用触摸屏示例”目录下的system.bin 文件,用触摸屏操作应用程序。
七、 思考题
1.电阻型触摸屏检测坐标值的原理。
2.如果LCD 坐标原点在右下角,分辨率为240X180,触摸屏坐标原点在右上角,请给
出触摸屏输出坐标的转换公式,触摸屏的分辨率有什么影响。
评论
查看更多