触摸屏驱动程序

2024-06-18

触摸屏驱动程序(共6篇)

触摸屏驱动程序 篇1

摘要:介绍了Canvas类中可用于捕获触摸屏事件的方法, 创建了一个类似于iPhone手机上的图片浏览程序。

关键词:Java ME,Canvas

1 Canvas类

Canvas类位于javax.microedition.lcdui包中, 它提供了低级屏幕和图像操作方法。该类自身是抽象类, 使用的时候需要给出具体的实现。Canvas中最重要的方法是paint (Graphics g) , 它完成图像的实际绘制。当然, 在这里paint () 方法并不是重点, 感兴趣的是其他5个方法, 它们可用于创建使用触摸屏的Java ME程序。这些方法包括has Pointer Events () 、has Pointer-MotionEvents () 、pointerDragged (int x, int y) 、pointerPressed (int x, int y) , 以及pointerReleased (int x, int y) 。这5个方法最初被用于处理具有指点能力的界面——也即用户能够使用指点设备与这样的界面交互。不过, 在具有触摸功能的非指点设备上, 这些方法工作得一样好。

当发生指点事件时, 也即按下、释放和拖动指点设备时, 系统会分别调用pointer Pressed (int x, int y) 、pointer Released (int x, int y) 和pointer Dragged (int x, int y) 方法, 此时, 参数x、y中存有指点事件发生时指点所在的坐标。因此, 可以利用这些方法获得指点所在的位置, 并根据需要完成相应的操作。注意, 系统对这些方法的调用是串行的, 也即系统从不在前一个调用方法返回之前调用另一个方法。方法has Pointer Events () 检查设备是否支持指点按下和释放事件。当hasPointer Events () 返回true时, 意味着设备支持pointer Pressed (int x, int y) 和pointer Released (int x, int y) 方法。方法hasPointer Motion Events () 检查设备是否支持指点移动事件。当has Pointer Motion Events () 返回true时, 意味着设备支持pointer Dragged (int x, int y) 方法。

2 利用Canvas创建触摸屏图片浏览器

有了前面的基础, 现在来创建一个类似于i Phone手机上的触摸屏图片浏览器。首先, 让先看一下程序运行时的屏幕截图, 从而搞清楚要实现的效果是什么。如图1显示Java ME程序启动后加载的图片, 以及稍微向左拖动或滑动该图片后的效果。

顺便说一下, 使用Java ME SDK 3.0作为测试平台, 并选用Default Fx Touch Phone1作为目标模拟器。因此, 给出的屏幕截图来自于电脑上运行的模拟器。当然, 在模拟器只能使用鼠标来代替手指。

选择的图片比屏幕的尺寸要宽一些, 为的是创造出图片滚动的效果。在实际设备上, 当手指在屏幕上左右滑动时, 程序会根据滑动的距离显示出当前图片的剩余部分, 或者显示出前一幅或下一幅图片。图片刚加载时剩余部分位于屏幕右侧。程序是这样设置的, 如果水平滑动的距离少有20个点 (像素) , 将显示出当前图片的剩余部分。如果滑动的距离超过20个点, 则显示前一幅或下一幅图片 (分别对应向左、向右滑动) , 如图2所示。要达到的效果就是通过手指的滑动来逐个显示图片库中的图片。

知道了想要的结果, 现在来看一看完成上述任务的Canvas类的代码。

程序中, pointer Pressed () 、pointer Released () 、pointerDragged () 方法设置各种参数, paint () 利用这些参数来决定是否滚动当前图片或显示新图片。在pointer Pressed () 方法中, 保存了用户触摸位置的x轴坐标, 然后, 在pointer Released () 和pointer Dragged () 方法中确定用户手指沿水平方向移动的距离大小 (delta X) 。如果移动超过20点, 则显示新图片, 否则就沿x轴方向卷动图片。可以左右两个方向移动。当然, 为了简化问题, 程序忽略了沿y轴方向的移动。

3 结语

自Java ME诞生以来, 它就已经具备了满足触摸屏界面的能力, 只是那些提供Java ME实现的设备制造商没有跟上步伐。介绍了Canvas类中的能够捕获触摸屏上指点运动的接口, 并以一个类似于i Phone手机上的图片浏览程序来演示其使用方法。希望能够起到抛砖引玉的作用, 启发读者写出更加实用的触摸屏Java程序。

WINCE触摸屏驱动分析与改进 篇2

该驱动应用在三星芯片S5PV210上, 使用芯片内部的ADC控制器, 外接一款8寸四线式触摸屏。在实际应用中, 发现如下典型的问题:1.拖拽不准, 总是出现抖动现象。2.双击无效, 很难实现双击打开。3.单击持续, 产生不了右键菜单。4.校准时校准不过, 总要求循环依次点击。经过多次试验, 分析出触摸按下的最开始, 两层导电层之间接触不牢造成最开始的点不准。又由于触摸时压力的不同, 使触摸点四周的导电层接触位置不确定性, 造成了采集点的变化, 最终给客户的感受就是触摸不准确。

二、触摸屏驱动的改进

1) DdsiTouchPanelGetPoint函数的改进

//设两个全局变量, 记录回传给系统的采集点坐标

DWORD gAlex_x=0;

DWORD gAlex_y=0;

static int PrevX=0;//初始化X轴坐标

static int PrevY=0;//初始化Y轴坐标

//连续采集3个触摸点, 前两点被忽略, 用于解决触摸初期的抖动

TSP_GetXY (&TmpX, &TmpY) ;//获得当前坐标

Touch_Pen_Filtering (&TmpX, &TmpY) ;//对采集来的坐标进行过滤

//判断当前坐标与上一次传递给系统坐标之间的差值, 是否大于设定值45。

//如果大于设定值, 说明触摸点确实移动了, 这样就将采集值传递给系统

//如果小于设定值, 人为的忽略触摸屏的移动, 依然传递给系统上一次的坐标。

//这样便解决了以上发现的问题, 但同时带来了一些精度上的误差。

*pUncalX=PrevX=gAlex_x;//此处还可以增加一个变量用作计数, 如果连续N个采集差值都大于45, 可能确实是真实值, 这时候就要将当前值更新为最新采集值。

2) 增加滤波算法

方法一:均值滤波连续采集9次值, 将1~3次分为一组、4~6次分为一组、7~9次分为一组。在每一组中, 分别计算出三次数据之间的差值绝对值的最大值, 首先判断这三组中最大值是否都在预设阀值之内:如果大于预设阀值, 本次采集作废;如果在预设阀值之内, 选取差值绝对值最大值中最小的一组。将其中成员做一次平均作为这次的采集结果。

方法二:平滑滤波将5次采集结果相加得到一个SUM, 将SUM/5作为最终采样值, 留给坐标转换。在下一次采集时, SUM=SUM-SUM/5+新采样值。

三、总结

通过对触摸屏驱动的分析, 了解了系统将硬件ADC采集到系统坐标之间的传递过程。从人为的感受上, 对触摸屏驱动进行了改造。虽然能够解决一部分精度要求不高的设备。但对于手写输入等精密要求高且连贯的操作来说, 还不能完美地解决。

摘要:分析并改进了WinCE系统下触摸屏驱动, 增加了两种滤波算法。实验证明此方法可以从直观感受上得到改善。

触摸屏驱动程序 篇3

关键词:嵌入式linux,触摸屏驱动程序

触摸屏由触摸检测部件和控制器组成。检测部件在显示器屏前面, 用来检测用户触摸位置, 接收后送触摸屏控制器;而触摸屏控制器的主要作用是从触摸点检测装置上接收触摸信息, 并将它转换成坐标送给处理器, 触摸屏控制器同时接收处理器发来的控制命令并加以执行。电阻触摸屏应用广泛, 具备轻、省电等优点。解码芯片UCB1400中的触摸屏控制器功能模块可以实现对触摸屏的控制。UCB1400集成了音频解码/编码功能、一个触屏控制器和功率管理接口, 其外部共有48个管脚。

1 四线电阻触摸屏触摸压力的测定原理

四线电阻触摸屏的X板和Y板的接触电阻Rt可作为触摸笔点击处的受压面积和压力大小的一个很好的指示量。当手指等软物体用力压上触摸屏的时候, X和Y板之间的会有较大的接触面积, Rt较小。将两板之一的一端或两端加电压, 另一个板的一端或者两端接地, 则流过触摸屏的电流大小就是两板之间接触电阻的指示量。

2 硬件连接

UCB1400与CPU的AC97控制器以及触摸屏的连接方式如图1所示。

3 触摸屏驱动程序的实现

UCB1400内部有许多中断源它们都通过一个IRQOUT的信号传送给CPU, 如果有任何一个二级中断发生, IRQOUT上会产生中断信号, 当CPU接收到IRQOUT的信号, 会调用IRQOUT中断处理函数, 并判断发生了哪一个二级中断, 调用相应二级中断处理函数。对于CPU来说, IRQOUT信号是一级, 触摸屏中断是二级中断。

一旦笔中断发生, CPU会接收到IRQOUT的信号, 先进入UCB1400的中断处理程序唤醒UCB1400的后台线程, 确认UCB1400的中断源为触摸中断信号, 并调用触摸屏中断处理程序唤醒后台线程, 进行数据采样、转换和传输, 驱动程序收到坐标后, 传递给上层应用程序。

3.1 UCB1x00_core.c中的初始化

1) ucb1x00_init_he lpe r () , 调用pxa_ac97_ge t () , UCB1400芯片初始化是在pxa_ac97_ge t () 函数中进行的, 各个驱动的初始化过程最终都会调用这个函数, 全局变量pxa_ac97_refcount保证了实际的初始化过程只执行一次。2) 之后获取UCB1400的ID号确认芯片型号。3) 中断:首先, 设置与UCB1400的IRQOUT管脚相连的GPIO PB2口为下降沿中断状态, 其次配置对应的通用用途选择寄存器, 再配置对应的中断触发类型配置寄存器, 然后配置对应的中断输入选择寄存器, 最后, 如需要清除中断, 需配置对应的中断清除寄存器。4) 创建UCB1400后台线程。该线程调用daem onize () 进行后台化作为一个独立的守护线程运行, 其父进程转移到init进程, 只接受SIGKILL外部信号, 并检查tsk进程描述符所表示的进程是否有非阻塞的挂起信号。在IRQOUT中断到来之前后台线程处于空闲状态, 等待事件发生。

3.2 UCB1x00_ts.c中的初始化工作

ucb1x00_ts_init () 调用ucb1x00_init_he lpe r () 之后, 通过函数misc_register注册触摸屏设备。触摸设备为MISC设备, 设备节点名为touchscreen/ucb1x00, 主设备号10, 次设备号14。同样, 上层用户程序使用此驱动程序之前需要通过命令mknodtouchscreenc10 17在文件系统上创建一个设备节点。使用触摸设备驱动的时候打开/de v/touchs cre e n这个设备文件即可。同时, 驱动模块结束时将调用ucb1x00_ts_e xit () 中的m is c_de re gis te r (&ucb1x00_ts_de v) 来注销触摸设备。

3.3 触摸屏驱动的主要数据结构

在程序中有两个重要的数据结构:用于表示笔触点数据信息的结构ts_event和表示UCB1400中有关触摸屏控制器信息的结构ucb1x00_ts。

3.4 打开触摸设备

应用程序打开/dev/touchscreen该文件时会调用ucb1x00_ts_ope n () , 具体为

1) s e m a_init (&ts->irq_w ait, 0) ;

2) 注册二级中断 (触摸屏中断) :

re t=ucb1x00_hook_irq (ts->ucb, UCB_IRQ_TSPX, ucb1x00_ts_irq, ts) 。

3.5 等待触摸事件

创建的UCB1400后台线程和触摸后台线程分别执行一个无条件的for循环。

3.6 触摸事件处理

一旦有笔触事件发生时, CPU调用一级中断处理程序即UCB1x00_core.c。

UCB1400后台线程被唤醒后, 将继续执行UCB1400后台线程中s che dule () 后面的代码, 通过码查找产品中断的源头, 调用相应的二级中断。接着执行触摸后台线程中被down_interruptible阻塞的任务。通过ucb1x00_ts_event () 处理触摸事件, 获取触摸点的坐标值并将其转换为LCD屏上的坐标后, 调用wake_up_interruptible通知读程序到缓冲区读取新数据。

3.7 应用程序读取键盘数据

系统调用将通过ucb1x00_ts_read () 来实现。

3.8 模块卸载

通过module_init (ucb1x00_ts_init) 执行驱动程序的卸载。

参考文献

[1]Tool Interface Standard.Executable and Linktable Fortmat Specification (Version1.2) [S].1995.

触摸屏驱动程序 篇4

FTTH,即光纤到 户(Fiber To TheHome)。FTTH光纤熔接机是主要应用于到户光纤的永久性接续,并在光纤通信工程和光无源器件的生产测试中大量使用。通过更换夹具,本产品可接续包层直径为80μm ~ 150μm的单模、多模和色散位移等多种石英系光纤。FTTH光纤熔接机是光、机、电一体化高精尖产品。在此产品上,添加触摸屏应用,对于方便客户的使用具有极大的意义。

本产品是基于ARM9和uc/os-II系统的,因此,触摸屏驱动程序是基于uc/os-II系统设计的。Uc/os-II系统是一种可移植、可固化、可裁剪的实时多任务内核(RTOS)。Uc/os-II具有硬实时性、低功耗、易控制、高性能等优点,可以使其满足工业中小型控制中对系统可靠性、实时性以及多任务处理的要求。Uc/os-II属于抢占式实时操作系统,总是会使优先级最高的任务运行。它不支持时间片轮转调度,某一时间只能有一个任务在运行,所以必须将系统功能合理分解为不同优先级的任务。任务的优先级是由该任务的重要性和实时性来决定的。划分系统任务的时候,还需要考虑到低优先级的任务能有机会得到运行,否则系统将难以正常工作。此次设计,就是将触摸屏操作设计成一个任务,其优先级仅次于按键任务。

1 触摸屏驱动设计方法

FTTH光纤熔接机的触摸屏采用的是电阻屏。此电阻屏是由一个4层复合薄膜,附着在显示器表面与显示器配合使用。每一层导电层称为触摸屏的一个工作面,每一个工作面的两端各涂以条银胶,称为该工作面的一对电极,分别称为X电极对和Y电极对。当触摸屏正常工作时,上下导体层相当于一个电阻网络。当某一层电极加上电压时,会在该网络上形成电压梯度。当有外力使得上下两层在某一点接触时,则在电极未加电压的另一层可以测得接触点处的电压,从而得到接触点的坐标。

FTTH熔接机触摸屏选取的驱动芯片型号为TSC2007,TSC2007是典型的逐步逼近式A/D变换器,具有片内温度测量、触摸压力测量和预处理三个功能。TSC2007与触摸屏连接后,一旦有笔或手指触摸在屏上时,便可以迅速得到该点的位置,从而达到在触摸屏上寻址的目的。TSC2007带有IIC接口,能以标准模式、高速模式、超高速模式进行数据传输与通信。TSC2007通过IIC与S3C2440接连,如图1所示。

在点击触摸屏之后,一般都需要确定所点击的X、Y,这就需要对TSC2007进行读写操作,TSC2007的写操作如图2所示。当SCL为高电平时,SDA由高电平向低电平跳变,系统开始传输数据。数据的前五位为固定的10010,后两位为地址,可表示四个从设备,第八位为0,表示写操作。当TSC2007收到数据后,会确认一位0,然后ARM收到确认后,再发送一个字节的命令字,然后再等待TSC2007确认,从而完成写操作,最后再由ARM发送一个结束信号以结束操作。其中,TSC2007的命令字节含义如表1所示。C0-C3决定了A/D转换的接口不同。图2中PD1PD0为节能bit位,00时表示电源关闭,笔中断使能;01时表示A/D转换打开,笔中断禁止使能;10时表示A/D转换关闭,笔中断使能;11时表示转换打开,A/D笔中断禁止使能。M为模式位,该位为0表示TSC2007为12bit模式,为1时是8bit模式;X为无关位。

进行读操作时,首先由ARM发送一个开始信息,然后传送8bit地址信息,该信息与写操作时传送的前7个bit一样,只是第八位为1,表示读。此后,经过TSC2007确认后,ARM便可以接受8bit或12bit的数据,也就是TSC2007发送的x值和y值。TSC2007的读操作时序图如图3所示。

如前文所 述,UC/OS- Ⅱ的一大特点就是可以建立一个触摸屏任务OSTaskCreate(TaskTouchScan, (void *) &TaskData, (void *) & TaskStk[10], 14);,利用中断对触摸屏进行操作。触摸屏扫描程序为void TaskTouchScan(void *data) 。当触摸屏有动作时,触摸屏驱动芯片向CPU发送中断信号,中断处理程序接受触摸屏中断,再通知触摸屏扫描程序计算出触点的位置,并发送触摸屏处理的信号量,由触摸屏处理任务接受到信号量,并对用户的触摸动作进行相应处理。每当检测到TSC2007产生PENIRQ,通过IIC接口向TSC2007发送A/D转换和读A/D转换结果指令,把结果转换到当前触摸屏按下点的坐标值,再根据不同的坐标值进行相关操作。相应流程图如图4所示。

2 触摸屏校准策略

电阻式触摸屏的共性是电压成线性均匀分布。这一特性使得触摸屏的使用和校准非常方便。触摸屏本身的性能存在差异,安装时位置也会有一些偏差,再加上客户使用一段时间后,触摸屏的参数也很可能发生改变。所以,即便是在显示屏幕的同一位置触摸,也很难保证得到相同的触摸坐标。这样编程人员就难以用相同的程序来控制触摸屏。对此,我们引入触摸屏校准的概念,使编程人员能利用统一的程序来控制触摸屏,使其正常运行。

我们首先引入两个概念,物理坐标和逻辑坐标。物理坐标是指触摸屏上点的实际位置,通常以液晶上实际点亮的点的个数来度量。逻辑坐标是指这点被触摸时经过A/D转换后的坐标值。我们假定液晶最右下角为坐标轴原点A,在液晶屏上任取一点B (B为十字线交叉中心 ),B在X方向距离A点为10个亮点,在Y方向距离A点为20个亮点,则这点的物理坐标为 (10,20)。如果我们触摸这一点时得到的X向的A / D转换值为100,Y向的A / D转换值为200,则这点的逻辑坐标为(100,200)。

由于电阻式触摸屏的电压是成线性均匀分布的,那么A / D转换后的坐标也将成线性。假如我们将液晶最右下角点定为物理坐标原点A,其物理坐标记为 (XA=0,YA=0),其逻辑坐标记为( XLA,YLA)( 不一定为0)。那么触摸屏上任意一点B的逻辑坐标可表达为:

其中Kx、Ky分别为触摸屏X方向和Y方向的因子系数。Kx、Ky可能为正,也可能为负,这根据具体触摸屏安装的方向和特性。每个液晶触摸屏的K系数都有可能不同,因此我们必须在使用每个触摸屏之前进行校准,也就是说应单独计算每一个触摸屏的K系数。如果A点不是坐标原点,也是任意一点,式 (1) 和式 (2) 可以表达成::

由式 (3) 和式 (4) 我们可以推出计算K系数的公式:

每次校准 时,将Kx和Ky存在EEPROM中,等再次进行触摸操作时,就以Kx和Ky来计算坐标值。这里采用的是五点校准法,即在触摸屏上选取五个点,利用四个角的物理坐标及读出来的逻辑坐标值计算纵向和横向的校准因子,再利用中心点来校准出实际坐标值。

3 触摸屏去抖方案

一般来说,触摸屏均会产生一定的抖动,产生抖动的原因主是 : (1) 内部和外部设备的电磁干扰;(2) 触摸时的不规则抖动导致触摸屏被错误触发。针对原因 (1),可以从硬件上采取措施。首先,触摸屏特别容易受到电气噪声的影响。除了对触摸屏控制器的电路小心布局外,还可以在A/D转换器输入端增加一个低通滤波器来解决这一问题;其次,在设计电路板的时候对电源和地必须采取抗干扰措施。针对第二个问题,当有触摸动作时,触摸点会产生抖动或错误触发,这时可以在软件上采用延时采样法,即程序在接收到触摸中断之后,延时一段时间 ( 5 ~ 10 ms),看中断是否还在,然后再进行坐标采样,即可消除抖动。

4 小结

触摸屏驱动程序 篇5

关键词:Linux,触摸屏,多点触摸,驱动

1 引言

多点触摸设备是指一种允许电脑使用者通过多个手指操作图形图像应用程序的交互系统设备。目前已经有很多基于多点触摸技术的应用, 例如手机、PDA、MID以及ATM机等设备。同时, 在嵌入式领域, Linux操作系统的开源代码授权模式和易于定制、易于剪裁和移植的特性, 使得Linux成为嵌入式开发平台和应用平台中非常受欢迎的操作系统。基于以上两点, 本文研究并实现了采用嵌入式Linux操作系统的触摸屏驱动的设计。

2 相关技术

2.1 多点触摸技术

多点触摸技术[1,2]目前有两种:多点触摸识别手势方向 (Multi-Touch Gesture) 和多点触摸识别手指位置 (Multi-Touch All-Point) , 其特点是:

(1) 多重触控是在同一显示界面上的多点或多用户的交互操作模式, 摒弃了键盘、鼠标的单点操作。

(2) 用户可通过双手进行单点触摸, 也可以以单击、双击、平移、按压、滚动以及旋转等不同手势触摸屏幕, 实现随心所欲地操控, 从而更好、更全面地了解对象的相关特征 (文字、录像、图片、卫片、三维模拟等信息) 。

(3) 可根据客户需求, 定制相应的触控板、触摸软件及多媒体系统;可与专业图形软件配合使用。

2.2 电容式触摸屏

电容式触摸屏是一块四层复合玻璃屏[3], 玻璃屏的内表面和夹层各涂有一层掺锡氧化铟 (Indium Tin Oxide, ITO) , 最外层是一薄层矽土玻璃保护层, 夹层ITO涂层作为工作面, 四个角上引出四个电极, 内层ITO为屏蔽层以保证良好的工作环境。当手指触摸在金属层上时, 由于人体电场作用, 用户和触摸屏表面形成一个耦合电容, 对于高频电流来说, 电容是直接导体, 于是手指从接触点吸走一个很小的电流。这个电流分别从触摸屏的四角上的电极中流出, 并且流经这四个电极的电流与手指到四角的距离成正比, 控制器通过对这四个电流比例的精确计算, 得出触摸点的位置。

3 多点触摸驱动的实现

3.1 硬件环境

(1) 触摸屏控制芯片Guitar

多点电容式触摸屏控制芯片Guitar采用投射式电容检测原理[4], 由15个驱动通道与10个感应通道组成触摸检测网络, 通过内置模拟放大电路、数字运算模块, 及高性能MPU得到实时准确的触摸信息, 并通过I2C传输给主控芯片。实现“所点即所得”的非凡用户体验。Guitar可同时识别5个触摸点位的实时准确位置、移动轨迹及触摸力度, 并可根据主控需要, 读取相应点数的触摸信息。

(2) RK2918处理器

RK2918是一款低功耗、高性能的移动电话、个人移动互联网设备以及其他应用的数字多媒体处理器的解决方案。它采用ARM Cortex A8内核, 处理器主频为1.2 GHz, 支持Neon协处理器和512 KB二极缓存, 并内置图形2D/3D加速:Open GL ES 2.0功能, 在3D效果方面相对同类产品有较大的提升, 三角形生产率最高支持40 M/s。具有高性能外部存储器接口, 要求具有较强的内存带宽承受能力, 还提供了一套完整的外围接口, 支持非常灵活的应用。

3.2 Linux I2C核心代码设计

在Linux系统中, I2C驱动由三部分组成[5,6,7,8], 即I2C核心、I2C总线驱动和I2C设备驱动。这三部分相互协作, 形成了非常通用、可适应性很强的I2C框架。

I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法, I2C通信方法 (即“algorithm”) 上层的、与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。

I2C总线驱动是对I2C硬件体系结构中适配器端的实现, 适配器可由CPU控制, 甚至直接集成在CPU内部。I2C总线驱动主要包含了I2C适配器数据结构i2c_adapter、I2C适配器的algorithm数据结构i2c_algorithm和控制I2C适配器产生通信信号的函数。

I2C设备驱动是对I2C硬件体系结构中设备端的实现, 设备一般挂接在受CPU控制的I2C适配器上, 通过I2C适配器与CPU交换数据。I2C设备驱动主要包含了数据结构i2c_driver和i2c_client, 我们需要根据具体设备实现其中的成员函数。

上述代码第3行对应为SMBus传输函数指针, SMBus大部分基于I2C总线规范, SMBus不需增加额外引脚。与I2C总线相比, SMBus增加了一些新的功能特性, 在访问时序也有一定的差异。

3.3 数据结构间的关系

i2c_driver、i2c_client、i2c_adapter和i2c_algorithm这四个数据结构的作用及其相互间的关系分析如下。

(1) i2c_adapter与i2c_algorithm

i2c_adapter对应于物理上的一个适配器[9,10], 而i2c_algorithm对应一套通信方法。一个I2C适配器需要i2c_algorithm中提供的通信函数来控制适配器上产生特定的访问周期。缺少i2c_algorithm的i2c_adapter什么也做不了, 因此i2c_adapter中包含其使用的i2c_algorithm的指针。

i2c_algorithm中的关键函数master_xfer () 用于产生I2C访问周期需要的信号, 以i2c_msg为单位。

(2) i2c_driver与i2c_client

i2c_driver对应一套驱动方法, 是纯粹的用于辅助作用的数据结构, 它不对应于任何的物理实体。i2c_client对应于真实的物理设备, 每个I2C设备都需要一个i2c_client来描述。i2c_client一般被包含在i2c字符设备的私有信息结构体中。

i2c_driver与i2c_client发生关联的时刻在i2c_driver的attach_adapter () 函数被运行时。attach_adapter () 会探测物理设备, 当确定一个client存在时, 把该client使用的i2c_client数据结构的adapter指针指向对应的i2c_adapter, driver指针指向该i2c_driver, 并会调用i2c_adapter的client_register () 函数。相反的过程发生在i2c_driver的detach_client () 函数被调用的时候。

(3) i2c_adpater与i2c_client

i2c_adpater与i2c_client的关系与I2C硬件体系中适配器和设备的关系一致, 即i2c_client依附于i2c_adpater。由于一个适配器上可以连接多个I2C设备, 所以一个i2c_adpater也可以被多个i2c_client依附, i2c_adpater中包括依附于它的i2c_client的链表。

4 系统验证

验证的流程思想是当触摸笔按下的时候, 内核响应中断, 进入中断服务程序。在中断到来之后, 屏蔽中断, 以保证触摸屏被连续按下时, 不会连续地产生触发中断进入中断处理程序。在工作队列中设置一个函数, 连续监测从触摸屏取得的X和Y坐标值;如果触摸笔按下就读取X和Y坐标值到缓冲区中, 如果触摸笔抬起就在缓冲区中放入抬起信号, 并且在触摸笔抬起时退出中断处理。

本设计采用的内核版本是linux-2.6.25, 把内核程序以及编译链进行编译。图1a所示为整个硬件部分的连接图, 在LED显示屏上的是触摸屏。当在触摸屏上进行操作时, 显示屏上的圆圈代表的就是触摸点的位置 (见图1b) 。

与只能接受单点输入的触摸技术相比, 多点触摸技术允许用户在多个地方同时触摸显示屏, 而且能够对网页或图片进行旋转、缩小和放大等操作。

5 结语

本设计以I2C方式对多点触摸屏进行驱动, 通过嵌人式Linux将多点触摸输入方式应用到嵌入式应用系统中, 丰富了单一的键盘输入与单点输入方式, 减小了系统尺寸, 提高了系统的可靠性。它在传统单点触摸屏的基础上, 将使用者可操作的控制点扩展到多个, 使得使用者可以用双手同时进行多个控制点的定位和移动。这种力求更加体贴而时尚的功能和应用, 同时个性化的操作方式满足了当代人们对数码产品的高要求。

参考文献

[1]申伟杰, 彭楚武.嵌入式Linux中基于Qt/Embeded触摸屏驱动的设计[J].中国仪器仪表, 2006, 21 (07) :36-59.

[2]Pennock Jacob.A Survey of Input Sensing and Processing Techniques for Multi-Touch Systems[J].CDES, 2007 (02) :15-31.

[3]何小艇.电子系统设计[M].杭州:浙江大学出版社, 2008:10-61.

[4]刘淼.嵌入式系统接口设计与Linux驱动程序开发[M].北京:北京航空航天大学出版社, 2006:45-47.

[5]徐柳茂, 黄永强, 蒋念东, 等.嵌入式Linux中I2C驱动程序的应用设计[J].国外电子元器件2007, 11 (18) :171-173.

[6]陈莉君.Linux内核设计与实现[M].第2版.北京:机械工业出版社, 2006:59-95.

[7]周立功, 陈明计, 陈渝.ARM嵌入式Linux系统构建与驱动开发范例[M].北京:北京航空航天大学出版社, 2006:310-332.

[8]宋宝华.Linux设备驱动开发详解[M].北京:人民邮电出版社, 2008:120-123.

[9]田鹤, 陈剑波.Linux平台PCI卡驱动程序的设计与实现[J].计算机工程, 2001, 27 (12) :141-143.

触摸屏驱动程序 篇6

1 JM320240简介

JM320240使用RA8806作为控制器。适配Intel8080和M6800系列MPU的两种操作时序电路, 通过硬件设置, 可二者选一。4位显示数据线, 传输数据迅速;并具有强大的作图功能;支持文本显示、图形显示以及图形和文本混合显示;具备简捷的MPU接口和功能齐全的控制指令集。同时采用SMT工艺制作, 结构稳固, 使用寿命长[2]。

1.1 JM320240模块接口说明

JM320240有20个引脚, 其功能如表1所示。

1.2 JM320240原理框图

RA8806为JM320240的控制器, 其内建了双图层显示内存及512 k B ROM的字型码, 可显示繁体或简体中文字型。在一般模式下, 可支持最大到320×240点分辨率的LCD面板, 在扩展模式下, 可支持640×240或是320×480点分辨率的LCD面板, 是一款易于使用的LCD显示控制器。如图1左侧, 单片机通过与RA8806连接的引脚/WR, /RD, /CS1, C/D, DB0-DB7, /RST, INT, /CS2控制和监测LCD的显示状态。如图1右侧, RA8806与LCD面板的段驱动器和通用驱动器连接, 控制LCD面板像素点的显示。VSS、VDD、VR、VEE引脚构成JM320240的LCD电源供给电路。LEDA和LEDK控制LED的背光显示。

1.3 JM320240主要硬件构成说明

(1) 时序选择。JM320240可提供6800和8080两种总线时序和相对应的硬件连接方式与外界进行数据交流。6800和8080两种总线区别主要是总线的控制方式上, 对于内存的存储, 需要数据总线和地址总线。但对于存取的控制, 则采用了不同的方式—8080是通过“读使能 (RE) ”和“写使能 (WE) ”两条控制线进行读写操作, 而6800是通过“总使能 (E) ”和“读写选择 (W/R) ”两条控制线进行。国内广泛使用的MCS-51单片机使用的是8080总线与外设进行总线型读写操作, 硬件接口为8根数据线, 1根片选线, 1根读信号和1根写信号[3]。系统采用的F020单片机也同样是8080总线, 故对JM320240采用8080的连接方式, 如图2所示。

(2) 忙标志 (BUSY) 。MPU访问RA8806不需要判断其是否“忙”, RA8806随时准备接受MPU访问并在内部时序下及时地将MPU发送的数据、指令就位。在MPU访问显示存储器时这样做虽满足了MPU的实时控制, 但牺牲了内部显示扫描的数据读取周期, 也就是要中断为显示驱动而读取显示数据的操作, 因而不可避免地将在显示屏上出现“雪花”现象。如果仅几次操作, 这种中断在瞬间出现, 由于人眼在视觉上的惰性而不易被发现“雪花”现象的存在, 但当大量的数据被传送时, “雪花”对显示的影响将不可忽略。

为了避免“雪花”的影响, 使MPU的操作对显示的影响降至最小, RA8806在接口部提供一个状态信号———“忙”标志BUSY。忙标志寄存器是一个只读寄存器, 它仅有1位“忙”标识位BF。在传送完1行有效显示数据到下1行传送开始之间的间歇内BF=0。在这段时间内RA8806将不读取显示数据, 此时RA8806接应MPU对显示存储器的访问将不会影响显示效果。BUSY=1则表示控制器正在向显示模块传送有效数据, 此时RA8806接应MPU对显示存储器的访问将会影响显示效果, 只根据MPU访问的频率决定影响显示的强弱。

(3) 复位电路。RA8806内部配置有复位电路, 其控制端为RES引脚, 复位信号为低有效, 其低电平宽度应>200μs。复位电路将RA8806内部电路复位, RES引脚连接在数据总线的P03位上控制系统复位。

(4) 中断。当人通过触摸屏时引发中断, 单片机响应相应命令。中断引脚为INT, 连接至单片机P01上。

(5) 其他。主要包括液晶使能引脚CS液晶背光供给电源引脚LEDA等, 连接至相关单片机引脚即可。

2 硬件设计

硬件设计主要为电池电量采集控制板的设计。需要有相应的数据线和控制线连接到单片机, 实现对显示屏的背光和显示图像内容的控制以及对于触摸所做的反应, 该部分引脚连接图如图3所示。

该电路板通过单片机控制继电器的开断来决定电池是否充电。首先单片机采集电池组两端电压, 经过A/D转换输入单片机作为控制参数, 经过单片机处理, 最后显示在液晶上。电路板的右侧接电池, 左侧接口接JM320240触摸屏。整体电路板实物如图4所示。

3 软件设计

单片机程序通过Keil Uvision4进行编程, 主要分为:电量监视模块、触摸屏模块、充电控制模块[4]。

3.1 电量监视模块

单片机的模数转换通道接收锂电池的电压分压值, 以此判断电池的电量值, 然后按正比例转换得到转换过后的数字值的大小, 其代表了电量大小。系统采用255代表电量值满, 0代表电量值空, 从而提供给触摸屏显示模块作为电量值大小依据。

3.2 触摸屏模块

使用液晶代理商给出的基础库文件, 编程得到想要显示的图案和文字, 设计出充电控制显示界面。本文设计的电池由一大一小两个矩形组成, 且电池图像上方有编号。通过数字值的大小反映电池的电量值, 并通过触摸屏显示在界面上。电量充足时用实心表示, 电量空时用空心表示, 充电时用由左向右的扫动图像显示。通过人眼进行充电判断, 实现手动充电和自动充电按钮、触屏校正按钮的界面显示, 以及触摸后响应的程序, 被选中的图像反显。触摸屏校正模块是当触摸屏坐标与实际位置不符时进行的校正操作[5]。

3.3 充电控制模块

通过触摸屏监控电池电量, 利用触摸屏界面的触摸操作对电量少的电池组进行充电操作, 分为手动充电和自动充电两种模式, 手动充电模式为电量充满后报警两声自动停止充电, 自动充电模式为当前电池充满电后警报两声顺序跳向下一个电池组进行充电, 如果检测到充满继续警报两声顺序跳向下一组电池充电直到全部电池组完成充电后便停止充电。

该主界面为图像实时显示窗口, 分A、B共2个显示区域。其中区域A显示各组电池电量值, 区域B显示【充电】、【取消】、【自动充电】、【触屏校正】等按钮[6]。

4 结束语

文中研究了基于液晶触摸屏JM320240的显示驱动, 并设计实现了液晶驱动的硬件电路和软件程序。为验证该驱动电路和软件的可行性以及可靠性, 又设计了一套简单的电池电量监测和控制系统。经调试, 该系统较好地实现了电池电量的监测与控制, 说明该液晶驱动具有良好的实用性。

参考文献

[1]王华.基于8051FMCU的数据采集分析系统的研制[D].成都:四川大学, 2007.

[2]Junxian Electronic Technology Co.JM320240F-GSBLWFA5+TP[M].Shenzhen:Junxian, Electronic Technology Co., 2007.

[3]赵军.出租车计价器使用误差检定系统的研制[D].成都:四川大学, 2007.

[4]楼然苗, 李光飞, 51系列单片机设计实例[M].北京:北京航空航天大学出版社, 2006.

[5]李学亮, 刘云飞, 郭程, 等.基于GPRS的土壤温湿度采集系统[J].电子科技, 2013, 26 (2) :120-122, 125.

上一篇:资产结构类型下一篇:网关设备