图3 主程序流程图
4.3 触摸屏与LCD显示器坐标的换算和Microwindows编程实现
本设计采用microwindows0.90版本,编写程序时,不必关心底层的驱动,直接调用上层的API.而不需编写底层的驱动.这里采用的方法是在microwindows中编写对应于触摸屏串口接收程序,然后比较microwindows窗口坐标和串口数据中的坐标值,如果在一定范围内,则产生一个相应的事件[2]。 用一个数组来接收串口送过来的数据,再从数组中取出触摸屏的位置信息。触摸屏的坐标原点及分辨率都不同,这也需要进行转换。具体转换的公式为:
我们设触摸屏如下:右下角为原点坐标(x1,y1),横轴为x轴,竖轴为y轴,右上角坐标(x1,y2),左上角坐标(x2,y2),右上角坐标(x2,y1),分辨率为4096×4096;ARM7所接LCD的坐标原点在左上角,横轴为x轴,竖轴为y轴分辨率为640×480,则我们的坐标转换公式为:
xLCD=640-[640×(x-x1)/(x2-x1)] (4-1)
yLCD=480-[480×(y-y1)/(y2-y1)] (4-2)
因触摸屏的分辨率为4096×4096,则x2-x1和y2-y1的值均为4096;坐标转换公式为:
XLCD=640-640×z1/4096; (4-3)
YLCD=480-480×z2/4096; (4-4)
其中,公式中的z1,z2坐标为触摸屏坐标,它的获取方法:由数组buffer[ ]接收串口送来的数据,我们要从数组中取出有用的坐标信息。
x1=buffer[6]; x2=buffer[7]; x3=buffer[3]; x4=buffer[4];
这里我们用四个8位元素来获得两个16位坐标信息。那么就需要将两个8位的坐标数据,转换为一个16位的数据,具体转换如下:
y1=x1<<8; y1 |=x2; /*两个8位数据移位成16位数据*/
y2=x3<<8; y2 |=x4;
那么此时的y1,y2便是我们触摸屏的坐标信号了。转换之后,显示器和触摸屏的坐标就对应起来了,在microwindows下建立一个窗口,设定它的坐标值及大小,这时在用microwindows的消息处理函数,如果触摸范围(触摸屏在屏幕上对应坐标)在窗口的坐标范围内,则产生一个相应的事件,我这是在窗口上打印一条Touched信息的事件,在窗口范围外触摸触摸屏时,打印Nottouched信息。编写一个程序点触触摸屏上相应的位置,就会在屏幕上的对应位置上输出一个新的窗口,且位置比较准确。如图4-9所示为点触摸屏时LCD显示器显示的触点响应位置。
图7 点触摸屏时LCD显示器显示的位置
结论
通过调试和测试,完全达到设计要求。本设计创新之处是:成功将深圳某公司的触摸屏控制器运用到HMS32C7202嵌入式控制系统中,在对方没有提供通信协议和驱动程序情况下,分析了该控制器的通信协议,编写了ARM的驱动程序。分析了LCD与触摸屏的物理换算关系,然后编写上层程序,通过microwindows的API进行相关调用,使底层数据与上层图形界面建立了联系。最后编写相应的事件处理和响应程序,通过点触触摸屏的图形界面完成对ARM的操作。该接口已应用于本人开发的基于Internet网络通信的嵌入式系统平台中。
参考文献
[1] Hynix Semiconductor Inc.HMS30C7202·
www.hynix.com
[2]吴明晖等.基于ARM的嵌入式系统开发与应用.人民邮电出版社.2004.6
[3]李中奇.嵌入式Linux系统中触摸屏控制的研究与实现.现代显示.2005.2.19-22[4]杨光友等.嵌入式微处理器ARM7202触摸屏接口设计.微计算机信息.2004.4,2004.4.75-76
作者简介:王洪、男、1963.4、高级工程师、湖南省教育厅科学研究资助项目(03C211),主要从事数字电视与嵌入式系统研究与开发
本文转自电子工程世界
``