肖静文 程维明 刘 伟 封高歌
(上海工程技术大学机械工程学院,上海 201620)
触摸屏技术是嵌入式系统领域重要的应用技术之一,随着电子产品智能化、便捷化的发展趋势,触摸屏作为一种简单、直观和快捷的人机交互设备,已逐步取代传统的键盘及鼠标等输入设备,不仅在日常生活中的仪器仪表应用广泛,而且在工业控制领域上更是广泛应用。触摸屏一般可分为电阻式、电容式、红外线式及表面声波式等[1],其中电阻触摸屏反应灵敏,工作稳定,工作环境对外界隔离,被广泛应用于恶劣的工业环境中。触摸屏通常组合LCD屏使用,常见的触摸屏有4.3、5.7、7.0寸,常用的驱动控制器有AD7843及AD7846等。
笔者介绍了一种硬件电路实现较为方便的RA8806控制器[2~4],使用分辨率为320×240的5.1寸触摸屏技术。针对触摸屏与LCD屏的坐标原点和坐标方向不一致的情况,介绍了触摸校准方法和软件实现方法,并在STC89C52单片机系统平台上完成实验测试。
RA8806是一种介于MCU和LCD驱动器之间的控制集成芯片,内建双图层、中英文字库与绘图模式的智能型电阻式触控扫描控制器,该控制器有效地减轻了MCU的负担,硬件电路实现相对简单,节省了使用者的软、硬件开发成本和时间。基于RA8806控制器的触摸屏属于四线电阻式触摸屏,其本质是一套传感器系统,这种触摸屏由两层导电层组成。当两层导电层在某点发生接触时,电阻发生变化,在行和列(X和Y)两个方向上产生电压信号,然后由RA8806控制器采样,经过其内置的10位A/D转换器转换成坐标信号送至CPU。RA8806控制器触摸系统如图1所示,RA8806接收MCU送来的指令,然后将MCU所要显示的内容以数据形式传输到LCD驱动器(包括行驱动和列驱动),再经过LCD驱动器连接至LCD屏上显示出所要显示的文字或图案。
图1 触摸系统框图
使用触摸屏的首要问题是如何进行坐标定位,即如何确定触摸点的坐标位置。由于加工工艺及安装等原因,触摸屏与LCD屏尺寸存在差异,不可能完全对准,致使触摸屏与LCD屏之间存在微小偏移量,且LCD 屏的坐标是以像素为单位的,而从触摸屏中读出的是触摸点的物理坐标,即电压数字量的大小。因此在使用时必须进行坐标定位,将触摸屏的物理坐标转换为LCD屏上的像素坐标。常用的触摸屏坐标定位方法有最值法、三点法和四点法[5~7]。其中,四点定位法精度最高,但编程实现起来相对复杂,适用于触摸精度要求较高的产品,如用于手写识别领域;最值法精度相对较低,但对于一般的工业用屏,其精度要求大多不是很高,最值法可以满足要求。
如果触摸屏的坐标原点与LCD屏的坐标原点和坐标方向一致,可直接采用最值法的触点坐标转换公式,即:
(1)
式中H、W——LCD屏的行像素宽和列像素宽;
x、y——触点在触摸屏行、列方向上产生的电压数字量大小;
(XLCD,YLCD)——触点在LCD屏上的坐标;
xmax,xmin——触摸屏上最大和最小坐标点在行方向上产生的电压数字量的实际测量值;
ymax,ymin——触摸屏上最大和最小坐标点在列方向上产生的电压数字量的实际测量值。
由于RA8806控制器内建了一组10位ADC,电压数字量满量程为210,而在其实际工作过程中,该电压数字量通常达不到0或满量程,因此需通过测试得到相对值。
通常在触摸屏的对角线上取两个对角顶点,并将触摸得到的电压数字量转换为十六进制数显示。通过实际测试发现,该5.1寸触摸屏与LCD屏的坐标原点与坐标方向均不同(图2),因此不能直接套用式(1)。由于实际的坐标值和LCD的写入顺序是180°的关系,所以在转换时公式做如下变换:
(2)
图2 触摸屏与LCD屏的坐标系示意图
基于RA8806控制器的5.1寸触摸屏系统采用KEIL C语言编写程序,完成软件设计。在使用触摸屏之前,首先要对程序进行初始化操作,包括软件重置、清屏和寄存器配置的初始化。在驱动程序设计中,最重要的问题是基本读、写函数(即读状态、读数据、写指令、写数据函数)的时序配合问题,应严格按照RA8806数据手册资料编写,时序配合不好显示屏将无任何显示。在数据采样和处理程序中,触摸屏和LCD屏的坐标转换是关键问题,为了编程方便,先通过测试得到触摸屏上的最小和最大坐标点在行、列方向上的像素坐标值,并定义在程序开头,即:
#define x_tp -854 // x_tp =xmin-xmax
#define y_tp 852 // y_tp =ymin-ymax
#define x_tpm 948 //在X方向的触摸范围内最大值xmax
#define y_tpm 944 //在Y方向的触摸范围内最大值ymax
程序中的tpx_trans(x),tpy_trans(y)是触摸屏和LCD屏的坐标转换和定位函数,可根据式(2)设计,因屏幕分辨率为320×240,故将程序中W设定为320,H设定为240。以行方向的坐标转换为例(列方向的坐标转换类似),其坐标转换程序如下:
unsigned int tpx_trans(unsigned int x)
{
long tpx;
long temp;
temp = (((long)x)-x_tpm)*320;
tpx = temp/x_tp;
return tpx;//返回转换后的像素坐标值
}
触控操作采用RA8806控制器提供的触控功能自动模式。当触摸屏被触碰时,信号不够稳定,为了避免错误动作,采取连续读3次中断状态、读3次坐标值进行对比的方法,最后判断坐标是不是在按键范围内。假设按键长为m个像素点,宽为n个像素点,那么这个范围对应了触摸屏上一个范围的坐标,若按键在此范围内则实现相应功能。由于RA8806控制器中的A/D转换提供10位精度,因此在程序中X1[3],Y1[3]用来保存触摸点X、Y坐标的高8位值,X2[3]、Y2[3] 用来保存触摸点X、Y坐标的低两位值。需要注意当检测到触摸事件时,要延时一段时间等待AD转换完成,若延时控制不好,将导致转换出错,以致触摸不准确。
void Auto_tp ( )
{
unsigned char k, temp, X1[3], X2[3], Y1[3], Y2[3];
unsigned int X, Y, x_temp,y_temp;
… …
if ((X1[0]==X1[1])&&(X1[0]==X1[2]))
{
X = (((unsigned int)X1[0]&0x00ff)<<2) | ((unsigned int)X2[0]&0x0003);
//保存X坐标10位AD值
Y = (((unsigned int)Y1[0]&0x00ff)<<2) | (((unsigned int)Y2[0]&0x000C) >> 2);
//保存Y坐标10位AD值
x_temp = tpx_trans(X);//X坐标转换
y_temp = tpy_trans(Y); //Y坐标转换
{
… …//判断坐标是否在按键范围内,在则实现相应功能
}
}
}
另外,若要显示多个界面,需设置页面标志变量Flag,通过给页面标志变量Flag赋不同的值显示不同界面,以防止发生坐标冲突事件。
5.1寸触摸屏系统在STC89C52单片机系统平台上进行测试,首先在硬件电路中将单片机的外部中断引脚接至RA8806的触摸中断信号脚,当有触摸动作时,单片机就会进入中断处理触摸坐标值。另外,要注意通过可调电阻来调节显示屏的对比度,否则即使有数据显示,开发人员肉眼无法看到。通过实验测试得到:当显示模块的内部负压输出(VOUT脚)在-20V左右时,显示效果达到最佳。实验测试表明该触摸屏反应灵敏,工作可靠,目前已用于自动阿贝折射仪。
介绍了一种智能型电阻式触控扫描控制器RA8806,分析了基于RA8806控制器的触摸屏系统工作原理,针对触摸屏与LCD屏的坐标原点和坐标方向不一致的情况,介绍了触摸屏的校准方法和相关软件设计,并在STC89C52单片机系统平台上完成测试。测试结果表明:该5.1寸触摸屏系统工作稳定,触摸效果良好。该基于RA8806控制器的触摸屏系统开发方便,成本低廉,满足日常生活和一般工控领域的仪器仪表需求。