ImageVerifierCode 换一换
格式:DOC , 页数:7 ,大小:124.04KB ,
资源ID:9448599      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/9448599.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(触摸屏校准方法.doc)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

触摸屏校准方法.doc

1、嵌入式Linux和MiniGUI结合的解决方案已经成为很多嵌入式系统的图形化方案之一,而触摸屏也是很多嵌入式系统首选的输入设备,因此触摸屏的校准也成为很多嵌入式系统开发过程中常常碰到的问题之一。 嵌入式Linux是一种可以进行裁减、修改使之能在嵌入式计算机系统上运行的操作系统,既继承了Internet上的无限的开放源代码资源,又具有嵌入式操作系统的特性。该系统具有较高的稳定性和安全性、良好的硬件支持、标准兼容性和资源丰富等功能。而触摸屏是一种方便、快捷的输入设备,附着在显示器的表面,与显示器配合使用,在工业控制场合得到了广泛的应用。然而在实际的嵌入式程序移植的过程中,由于触摸屏尺寸的不同,

2、以及GUI(Graphic User Interface)方案选择和IAL(Input Abstract Layer)的差异,一般开发板制造商并不提供触摸屏的校正程序。本文介绍的正是笔者在制作实际的嵌入式Linux数控机床人机接口过程中,提出的一套基于嵌入式Linux和MiniGUI的通用触摸屏校准程序设计方案。 MiniGUI简介 MiniGUI()是国内最有影响的自由软件项目之一, MiniGUI 项目的目标是为基于 Linux 的实时嵌入式系统提供一个轻量级的图形用户界面支持系统。该项目自1998年底开始到现在,已历经7年多的开发过程,到目前为止,已经比较成熟和稳定,并且在许多实

3、际产品或项目中得到了广泛应用。 MiniGUI 为应用程序定义了一组轻量级的窗口和图形设备接口。利用这些接口,每个应用程序可以建立多个窗口,而且可以在这些窗口中绘制图形且互不影响。用户也可以利用MiniGUI 建立菜单、按钮、列表框等常见的 GUI 元素。 MiniGUI 可以具有两种截然不同的运行时模式:MiniGUI-Threads或者MiniGUILite。运行在 MiniGUI-Threads 上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程中运行。相反,运行在 MiniGUI-Lite 上的每个程序是单独的进程,每个进程也可以建立多个窗口。MiniGUI-Thr

4、eads 适合于具有单一功能的实时系统,而 MiniGUI-Lite则适合于具有良好扩展性的嵌入式系统,比如要下载并运行第三方应用程序的智能手持终端。 MiniGUI在体系结构上有许多独特之处。它的主要特色有: ● 提供了完备的多窗口机制; ● 对话框和预定义的控件类; ● 消息传递机制; ● 多字符集和多字体支持; ● 全拼、五笔等汉字输入法支持; ● BMP、GIF、JPEG等常见图像文件的支持; ● 小巧,包含全部功能的库文件大小为300KB左右; ● 可配置,可根据项目需求进行定制配置和编译; ● 可移植性好。 基于以上特点,MiniGUI和

5、Microwindows、Qt-Embedded是当前嵌入式Linux中比较流行的三大嵌入式Linux的图形用户接口的解决方案。而MiniGUI因为其“小”的特色和对中文最好的支持以及中文参考资料的配备等独特优点,在嵌入式的实际GUI方案选型中, MiniGUI也成为国人作实验研究或者项目所青睐的解决方案。 环境参数的设置 在嵌入式系统中,多数都会选择安装触摸屏设备,然而由各种厂商生产的设备参数各不相同、驱动也不一致。现在有的开发板厂商已经可以提供触摸屏的驱动接口,但是由于触摸屏的尺寸大小以及一些具体参数的设置失误,造成基于触摸屏操作的图形界面坐标不准,也就是说触摸屏读出的点的物理坐标

6、和实际LCD屏幕的像素坐标不匹配,应用程序无法通过触摸屏得到正确操控。 笔者基于S3c2410的ARM9内核,使用6.4英寸,640×480的触摸屏,嵌入式Linux内核2.4.20和MiniGUI1.3.0,Lite版本,设计了一套简单可行的方案,可以方便地实现触摸屏的校准。 在开始校正触摸屏的坐标前,首先要修改MiniGUI.cfg文件使其适应触摸屏驱动,该文件一般保存在开发板的/usr/local目录下。所做修改如表所示。 另外,在开发板的/dev/的目录下建立连接ln-s /dev/touchscreen/Oraw ts 。 配置文件修改的主要目的是把IAL(Inp

7、ut Abstract Layer,输入抽象层)改为SMDK2410,输入设备改为/dev/ts,鼠标类型IMPS2取消掉,使其适应触摸屏驱动。 校正原理及编程思路 1.校正原理 我们传统的鼠标是一种相对定位系统,只和前一次鼠标的位置坐标有关。而触摸屏则是一种绝对坐标系统,要选哪就直接点哪,与相对定位系统有着本质的区别。绝对坐标系统的特点是每一次定位坐标与上一次定位坐标没有关系,每次触摸的数据通过校准转为屏幕上的坐标,不管在什么情况下,触摸屏这套坐标在同一点的输出数据是稳定的。不过由于技术原理的原因,并不能保证同一点触摸每一次采样数据相同,不能保证绝对坐标定位,点不准,这就是触摸屏

8、最怕出现的问题:漂移。对于性能质量好的触摸屏来说,漂移的情况出现并不是很严重。所以很多应用触摸屏的系统启动后,进入应用程序前,先要执行校准程序。 通常应用程序中使用的LCD坐标是以像素为单位的。比如说:左上角的坐标是一组非0的数值,比如(20,20),而右下角的坐标为(620,460)。这些点的坐标都是以像素为单位的,而从触摸屏中读出的是点的物理坐标,其坐标轴的方向、XY值的比例因子、偏移量、缩放因子都与LCD坐标不同,所以,可以在IAL的某个函数(比如wait_event函数)中把物理坐标首先转换为像素坐标,然后再赋给POS结构,达到坐标转换的目的。图是LCD坐标和触摸屏的物理坐标的比较

9、 2.触摸屏校正思路 在IAL的某个函数(比如wait_event函数)中加入调试信息,开发板上运行Calibrate程序,那么触摸屏上任何一点的坐标就可以在主机监视屏上回显出来。于是,就采集到了4个角的物理坐标,假设是6.4英寸屏,640X480分辨率,则它们的像素坐标分别是(20,20)、(20,460)、(620,460)和(620,20)。这样,使用待定系数法就可以算出坐标系之间的平移关系。比如: Vx = xFactor*Px + xOffset Vy = yFactor*Py + yOffset 在笔者使用的开发板上,系数xFactor、yFactor、x

10、Offset、yOffset的值分别为0.211、-16.27、-19/116、625.23。那么,在IAL的特定函数中就可以按照这个变换关系把物理坐标转换为像素坐标赋给POS结构了。 因此,应用程序中首先弹出一个有若干点的界面,然后让用户去点,参照了Qt-embedded的对标程序,一般采用了触摸屏四个角的四个点。根据像素坐标和物理坐标计算参数,并保存到一个文件中。那么以后只要这个文件的内容有效则不必再经历屏幕校准的过程。 另外需要提醒的是,还要参照一下触摸屏驱动的读方法,确定从触摸屏读出的数据的组织格式。比如笔者使用的S3c2410的驱动的读方法就是返回8个字节表示一点的坐标,所以

11、在IAL的特定函数中首先要拼接才能得到点的物理坐标。 程序设计 以下是实现校准的简单构架。 1.给屏幕上放置4个定位点 通过直接给屏幕划两个短线交叉的方法来实现。下面的代码表示,在(20,20)点画一个十字光标。 DrawLine (15, 20, 26, 20, 0xf800); DrawLine (20, 15, 20, 26, 0xf800); 2.获得每个定位点的值,也就是触摸屏采样的值 这个值要进行核准后,保存到PEN_CONFIG结构体中,其代码如下: do { // Calibrate Point 1 (20,20) DrawLine

12、15, 20, 26, 20, 0xf800); DrawLine (20, 15, 20, 26, 0xf800); do GetTouchvalue (tfd, &point[0].x, &point[0].y); while (!(point[0].x > X1_SCOPE_MIN && point0].x < X1_SCOPE_MAX && point[0].y > Y1_SCOPE_MIN && point[0].y ... //上面是第一个定位点处理的方法,因为有四个点,其他的也和此一样。只不过定位点和判断范围不同罢了。 //最后还要对定位的准确度进行判

13、断。 } while(CheckCalibratePont()); 3.保存PEN_CONFIG结构体到一个数据文件中 typedef struct { U32 xFactor;//X方向比例因子 U32 yFactor;//Y方向比例因子 U32 xOffset;//X方向偏移量 U32 yOffset;//Y方向偏移量 U8 scale; //缩放因子 RECT pan; //校正区域矩形 }PEN_CONFIG, *P_PEN_CONFIG; 在程序中通过计算获得此结构体,这些数据是非常重要的,它提供给IAL使用。以下是保存这个结构体的部分

14、源码: rt.left=(point[0].x + point[1].x)/2; rt.top=(point[0].y + point[3].y)/2; rt.right=(point[2].x + point[3].x)/2; rt.bottom=(point[2].y + point[1].y)/2; st.top=20; st.left=20; st.right=620; st.bottom=460; _PenCalibratePoint(&st,&rt); // Open the file for writing config file wf

15、d = open("/var/pencfg", O_WRONLY); if (wfd < 0) { printf("Error: cannot open pencfg file.\n"); exit(1);} printf("The pencfg file was opened successfully.\n"); if(write(wfd, &_gPenConfig, sizeof(_gPenConfig)) == sizeof(_gPenConfig)){ printf("Write Victor \n");} close(wfd); 4.调试信息的输出

16、 void GetTouchValue(int fp, int *x, int *y) { ts_event_t ts; 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= %d \n", *x, *y);//在屏幕上输出触摸屏坐标 }比例因子及偏移量的输出如下: printf ("_gPenCon

17、fig.xFactor = %x _gPenConfig.yFactor = %x \n",_gPenConfig.xFactor, _gPenConfig.yFactor); printf ("_gPenConfig.xOffset = %x _gPenConfig.yOffset = %x \n",_gPenConfig.xOffset, _gPenConfig.yOffset); printf ("_gPenConfig.scale = %x\n",_gPenConfig.scale); 5.IAL如何获得PEN_CONFIG中的数据 其原理很简单,上面的程序已经把PEN

18、CONFIG保存到/var/pencfg文件中,只需在IAL中写上打开该文件的代码,并且从中读取数据就可以了,其源码如下,在Init2410Input函数中。 int rcfg; rcfg = open ("/var/pencfg", O_RDONLY); if (rcfg < 0) { printf ("Open < /var/pencfg> File Error\n"); } if(read(rcfg, &_gPenConfig, sizeof(_gPenConfig)) == sizeof(_gPenConfig)){ printf("Read Victor

19、 \n"); } close(rcfg); 关于IAL其他函数,详细可以参照源代码。 6.精度的控制 #define X1_SCOPE_MIN 45 //MIN和MAX的差值就是校准的精度 #define X1_SCOPE_MAX 75 #define X2_SCOPE_MIN 45 #define X2_SCOPE_MAX 75 #define X3_SCOPE_MIN 940 #define X3_SCOPE_MAX 970   ... 7.如何运用 启动应用程序前先运行“触摸屏校准程序”,再运行MiniGUI程序。这样使得运行应用程序前,IAL可以预先提取到“触摸屏校准程序”中的数据。

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服