版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、触摸屏校准程序设计示例嵌入式Linux和MiniGUI结合的解决方案已经成为很多嵌入式系统的图形化方案之一,而触摸屏也是很多嵌入式系统首选的输入设备,因此触摸屏的校准也成为很多嵌入式系统开发过程中常常碰到的问题之一。嵌入式Linux是一种可以进行裁减、修改使之能在嵌入式计算机系统上运行的操作系统,既继承了Internet上的无限的开放源代码资源,又具有嵌入式操作系统的特性。该系统具有较高的稳定性和安全性、良好的硬件支持、标准兼容性和资源丰富等功能。而触摸屏是一种方便、快捷的输入设备,附着在显示器的表面,与显示器配合使用,在工业控制场合得到了广泛的应用。然而在实际的嵌入式程序移植的过程中,由于触
2、摸屏尺寸的不同,以及GUI(GraphicUserInterface)方案选择和IAL(InputAbstractLayer)的差异,一般开发板制造商并不提供触摸屏的校正程序。本文介绍的正是笔者在制作实际的嵌入式Linux数控机床人机接口过程中,提出的一套基于嵌入式Linux和MiniGUI的通用触摸屏校准程序设计、:7KOMiniGUI简介MiniGUI()是国内最有影响的自由软件项目之一,MiniGUI项目的目标是为基于Linux的实时嵌入式系统提供一个轻量级的图形用户界面支持系统。该项目自1998年底开始到现在,已历经7年多的开发过程,到目前为止,已经比较成熟和稳定,并且在许多实际产品或
3、项目中得到了广泛应用。MiniGUI为应用程序定义了一组轻量级的窗口和图形设备接口。利用这些接口,每个应用程序可以建立多个窗口,而且可以在这些窗口中绘制图形且互不影响。用户也可以利用MiniGUI建立菜单、按钮、列表框等常见的GUI元素。MiniGUI可以具有两种截然不同的运行时模式:MiniGUI-Threads或者MiniGUILite。运行在MiniGUI-Threads上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程中运行。相反,运行在MiniGUI-Lite上的每个程序是单独的进程,每个进程也可以建立多个窗口。MiniGUI-Threads适合于具有单一功能的实时系统,
4、而MiniGUI-Lite则适合于具有良好扩展性的嵌入式系统,比如要下载并运行第三方应用程序的智能手持终端。MiniGUI在体系结构上有许多独特之处。它的主要特色有: 提供了完备的多窗口机制; 对话框和预定义的控件类; 消息传递机制; 多字符集和多字体支持; 全拼、五笔等汉字输入法支持; BMRGIF、JPEG等常见图像文件的支持; 小巧,包含全部功能的库文件大小为300KB左右; 可配置,可根据项目需求进行定制配置和编译; 可移植性好。基于以上特点,MiniGUI和Microwindows、Qt-Embedded是当前嵌入式Linux中比较流行的三大嵌入式Linux的图形用户接口的解决方案。
5、而MiniGUI因为其“小”的特色和对中文最好的支持以及中文参考资料的配备等独特优点,在嵌入式的实际GUI方案选型中,MiniGUI也成为国人作实验研究或者项目所青睐的解决方案。环境参数的设置在嵌入式系统中,多数都会选择安装触摸屏设备,然而由各种厂商生产的设备参数各不相同、驱动也不一致。现在有的开发板厂商已经可以提供触摸屏的驱动接口,但是由于触摸屏的尺寸大小以及一些具体参数的设置失误,造成基于触摸屏操作的图形界面坐标不准,也就是说触摸屏读出的点的物理坐标和实际LCD屏幕的像素坐标不匹配,应用程序无法通过触摸屏得到正确操控。笔者基于S3c2410的ARM呐核,使用6.4英寸,640X480的触摸
6、屏,嵌入式Linux内核2.4.20和MiniGUI1.3.0,Lite版本,设计了一套简单可行的方案,可以方便地实现触摸屏的校准。在开始校正触摸屏的坐标前,首先要修改MiniGUI.cfg文件使其适应触摸屏驱动,该文件一般保存在开发板的/usr/local目录下。所做修改如表所示。表环境参数设置鼠标驱动触蟆屏驱动systonsystemmGALenginetiGALenginegalengine-fbcoiiaLengine-fbcon#IALengineaIALengineialehgine-ronsoleifll_engine-SMDK21lOin(lev=/dev/mousemde/d
7、ev/tsntype=IMPS2mtype=norn?fbccnfbccn廿dcfauItuode=240x320_16bppSdefaultmode_210x320-16bppdefaultmade=640x48016bppdefaultmode-640x180_16bppqvfb年也加fau1twode=64(hc480-16bppdefaultmode二640x480-16bppdi疝占yO另外,在开发板的/dev/的目录下建立连接ln-s/dev/touchscreen/Orawts。配置文件修改的主要目的是把IAL(InputAbstractLayer,输入抽象层)改为SMDK241
8、0输入设备改为/dev/ts,鼠标类型IMPS2取消掉,使其适应触摸屏驱动。校正原理及编程思路1 .校正原理我们传统的鼠标是一种相对定位系统,只和前一次鼠标的位置坐标有关。而触摸屏则是一种绝对坐标系统,要选哪就直接点哪,与相对定位系统有着本质的区别。绝对坐标系统的特点是每一次定位坐标与上一次定位坐标没有关系,每次触摸的数据通过校准转为屏幕上的坐标,不管在什么情况下,触摸屏这套坐标在同一点的输出数据是稳定的。不过由于技术原理的原因,并不能保证同一点触摸每一次采样数据相同,不能保证绝对坐标定位,点不准,这就是触摸屏最怕出现的问题:漂移。对于性能质量好的触摸屏来说,漂移的情况出现并不是很严重。所以很
9、多应用触摸屏的系统启动后,进入应用程序前,先要执行校准程序。通常应用程序中使用的LCD坐标是以像素为单位的。比如说:左上角的坐标是一组非0的数值,比如(20,20),而右下角的坐标为(620,460)。这些点的坐标都是以像素为单位的,而从触摸屏中读出的是点的物理坐标,其坐标轴的方向、XY值的比例因子、偏移量、缩放因子都与LCD坐标不同,所以,可以在IAL的某个函数(比如wait_event函数)中把物理坐标首先转换为像素坐标,然后再赋给POS吉构,达到坐标转换的目的。图是LCD坐标和触摸屏的物理坐标的比较。Q0-某一个痛血个左上角(右上角;版一个第三个(左下角)(右下由)LCD坐标第一个幽个(
10、左上角)(右上角)第二个篥三个(左下角(右下角】骷ao;般妍坐标图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在笔者使用的开发
11、板上,系数xFactor、yFactor、xOffset、yOffset的值分别为0.211、-16.27、-19/116、625.23。那么,在IAL的特定函数中就可以按照这个变换关系把物理坐标转换为像素坐标赋给POS吉构了。tembedded的对标程序,一般采用了触摸屏四个角的四个点。根据像素坐标和物理坐标计算参数,并保存到一个文件中。那么以后只要这个文件的内容有效则不必再经历屏幕校准的过程。另外需要提醒的是,还要参照一下触摸屏驱动的读方法,确定从触摸屏读出的数据的组织格式。比如笔者使用的S3c2410的驱动的读方法就是返回8个字节表示一点的坐标,所以在IAL的特定函数中首先要拼接才能得到
12、点的物理坐标。程序设计以下是实现校准的简单构架。1 .给屏幕上放置4个定位点通过直接给屏幕划两个短线交叉的方法来实现。下面的代码表示,在(20,20)点画一个十字光标。DrawLine(15,20,26,20,0xf800);DrawLine(20,15,20,26,0xf800);2 .获得每个定位点的值,也就是触摸屏采样的值这个值要进行核准后,保存到PEN_CONFI尊构体中,其代码如下:do/CalibratePoint1(20,20)DrawLine(15,20,26,20,0xf800);DrawLine(20,15,20,26,0xf800);doGetTouchvalue(tfd
13、,&point0.x,&point0.y);while(!(point0.xX1_SCOPE_MIN&point0.xY1_SCOPE_MIN&point0.y/上面是第一个定位点处理的方法,因为有四个点,其他的也和此一样。只不过定位点和判断范围不同罢了。/最后还要对定位的准确度进行判断。while(CheckCalibratePont();3 .保存PEN_CONFIGI构体到一个数据文件中typedefstructU32xFactor;/X方向比例因子U32yFactor;/Y方向比例因子U32xOffset;/X方向偏移量U32yOffset;/Y方向偏移量U8scale;/缩放因子RE
14、CTpan;/校正区域矩形PEN_CONFIG,*P_PEN_CONFIG;在程序中通过计算获得此结构体,这些数据是非常重要的,它提供给IAL使用。以下是保存这个结构体的部分源码:rt.left=(point0.x+point1.x)rt.top=(point0.y+point3.y)/2;rt.right=(point2.x+point3.x)rt.bottom=(point2.y+point1.y)/2;st.top=20;st.left=20;st.right=620;st.bottom=460;_PenCalibratePoint(&st,&rt);/Openthefileforwri
15、tingconfigfilewfd=open(/var/pencfg,O_WRONLY);if(wfd0)printf(Error:cannotopenpencfgfile.n);exit(1);)printf(Thepencfgfilewasopenedsuccessfully.n);if(write(wfd,&_gPenConfig,sizeof(_gPenConfig)=sizeof(_gPenConfig)printf(WriteVictorn);close(wfd);4 .调试信息的输出voidGetTouchValue(intfp,int*x,int*y)ts_event_tts;
16、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=%dn,*x,*y);/在屏幕上输出触摸屏坐标比例因子及偏移量的输出如下:printf(_gPenConfig.xFactor=%x_gPenConfig.yFactor=%xn,_gPenCon巾g.xFactor,_gPenConfig.yFactor);printf(_gPenConfig.xOffset=%x_gPenConfig.yOffset=%xn
17、,_gPenConfig.xOffset,_gPenConfig.yOffset);printf(_gPenConfig.scale=%xn,_gPenConfig.scale);5 .IAL如何获得PEN_CONFIG的数据其原理很简单,上面的程序已经把PEN_CONFI有存至ij/var/pencfg文件中,只需在IAL中写上打开该文件的代码,并且从中读取数据就可以了,其源码如下,在Init2410Input函数中。intrcfg;rcfg=open(/var/pencfg,O_RDONLY);if(rcfg0)printf(OpenFileErrorn);if(read(rcfg,&_g
18、PenConfig,sizeof(_gPenConfig)=sizeof(_gPenConfig)printf(ReadVictorn);close(rcfg);关于IAL其他函数,详细可以参照源代码。6 .精度的控制#defineX1_SCOPE_MIN45/MIN和MAX勺差值就是校准的精度#defineX1_SCOPE_MAX75#defineX2_SCOPE_MIN45#defineX2_SCOPE_MAX75#defineX3_SCOPE_MIN940#defineX3_SCOPE_MAX9707 .如何运用启动应用程序前先运行“触摸屏校准程序”,再运行MiniGUI程序。这样使得运行应用程序前,IAL可以预先提取到“触摸屏校准程序”中的数据。/在miniGUI用户编程手册中介绍了一个helloworld程序,这个界面的坐标是以像素为单位的。把左上角的坐标改为任一个非0的数值,比如(50,50),而右下角的坐标为(320,240)。这些点的坐标都
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年海南卫生健康职业学院单招职业适应性考试必刷测试卷及答案1套
- 2026年常州工程职业技术学院单招职业技能测试题库附答案
- 2026年山东省烟台市单招职业适应性测试题库完美版
- 2025广东深圳市光明区招聘党建组织员11人参考题库及答案详解(基础+提升)
- 2025年河南省医学科学院控股有限公司第二批公开招聘8人参考题库及参考答案详解一套
- 2026年内蒙古呼伦贝尔市单招职业适应性测试必刷测试卷完美版
- 广东消防考试题库及答案
- 2026年山西经贸职业学院单招职业倾向性考试必刷测试卷带答案
- 2025年甘肃省省直事业单位招聘考试真题试卷 公共基础知识及答案详解参考
- 2025广东惠州市博罗县自然资源局招聘编外人员76人参考题库附答案详解(综合题)
- 2025中数联物流科技(上海)有限公司招聘考试参考试题及答案解析
- 2025河北农业大学第二批招聘102人考试笔试参考题库附答案解析
- 2025北京市实验动物上岗证试题及答案
- 读书分享成品《窗边的小豆豆》课件
- 【2025年】员工食堂培训试题及答案
- 财务会计基本规范与操作手册
- DG-TJ08-401-2025 公共厕所规划和设计标准
- 见义勇为宣传课件
- 说话的艺术课件
- 【MOOC】金融风险管理-中央财经大学 中国大学慕课MOOC答案
- MOOC 创新与创业管理-南京师范大学 中国大学慕课答案
评论
0/150
提交评论