夏心江,吴志国,胡 钢
(河海大学计算机及信息工程学院,江苏常州213022)
随着信息技术的快速发展,触摸屏的应用日趋普及,在我国已逐渐形成了产业,触摸屏输入装置将会发展成为未来诸种信息产品的主流技术之一。但是,在各类领域应用触摸屏的二次开发过程中,必须先解决好几个关键技术,诸如:驱动程序、触控寄存器配置、字符图形显示编程、人机交互程序等,方能使系统设计得以继续。就目前可参考的资料而言,可借鉴的设计技术系统描述十分有限,下面重点讨论这些问题。
触摸屏的本质是传感器,它由触摸检测部件和触摸屏控制器组成。触摸检测部件安装在显示器屏幕前面,用于检测用户触摸位置;触摸屏控制器是从触摸检测装置接收信息,将它转换成触点坐标送给CPU,同时能接收CPU发来的命令并加以执行。硬件系统由320×240分辨率的 NB320240R_BIW_SBNH触摸式液晶屏、驱动芯片NT7086、触控芯片RA8806组成,如图1所示。
RA8806是台湾瑞佑公司开发的文字与绘图模式的点矩阵液晶显示(STN-LCD)控制器,内建字库,具有触摸屏控制、对比控制、键盘扫描等功能强大的核心部件,同时能够提供画面旋转、字体放大等超强附加功能。NT7086芯片是LSI公司推出的基于低功耗CMOS高电压制程技术的LCD驱动器。在段驱动模式,它可以连接1位串行或4位并行算法的控制器;在共同驱动模式,适用双输入模式;在部分应用模式,具有电源关闭功能,能降低能源消耗[4]。
触控芯片负责完成整个液晶屏的显示控制及触摸信号的采集与处理,驱动芯片为显示控制提供驱动,320*240触摸屏用于显示及感测触摸信号。整个触摸式液晶屏的控制命令由MCU单片机发出。eP89V51RD2FN单片机是PHILIPS公司开发的一款80C51微控制器,包含64kB Flash和1024字节的数据RAM,封装为塑料双列直插式40脚,Flash程序存储器支持并行和串行方式在系统编程(ISP)[6]。
图1 触摸屏硬件结构框图
RA8806支持8080和6800等两种微处理机接口传输模式。接口模式的选择决定于RA8806“MI”引脚的电位。当选择8080模式时,MI接低电位;选择6800模式时,MI接高电位。本设计采用的是8080模式,表 1所示为在 8080时序下P89V51RD2FN单片机与触摸式液晶屏的接口连接设计。程序在PC机中经过编译后,通过串口,由HIN232CP芯片驱动并传送到P89V51RD2FN单片机内,P89V51RD2FN单片机通过特定接口向触摸式液晶屏发出控制指令。控制触摸式液晶屏的显示、信号采集与处理等操作[1]。
表1 单片机与液晶接口对应连接表
在程序设计之初,必须进行初始化操作,包括如下步骤:
(1)设计软件重置初始化函数,当执行完一段代码后,进行重置操作。
(2)设计清空显示初始化函数,当触摸式液晶屏即将进入下一屏时,清空本屏的显示内容。
(3)设计寄存器配置初始化函数,将RA8806各寄存器设置为默认值。
各初始化函数如下:
void softrst()//软件重置初始化函数
void lcd_inital()//寄存器配置初始化函数
void clear(void)//清屏显示初始化函数
RA8806可以接收四种数据传输周期,分别是指令写入周期、状态读取周期、数据写入周期以及数据读取周期。
要对某缓存器进行写数据时,首先执行指令写入周期,包括欲写入缓存器的编号,再以写入数据周期将数值写入该缓存器。这两个周期执行后,数值数据将被写入到该缓存器。由于每一指令的写入需要两个数据传输周期,且每个数据传输周期最少也要2个系统频率周期的时间才能完成,因此每一条指令至少需要花费4个系统频率周期才能写入。
写入指令初始化步骤:①设定ZCS1为低电位(触摸液晶屏系统已将CS2固定为高电位),此时为接收指令状态。②置ZRD为高电平,即关闭读取信号。③利用RS与ZWR的配合时序确定存取周期。④关闭写信号及接收指令状态,即拉高ZWR电平与ZCS1电平。
驱动程序设计方法如下:
void LCD_CmdWrite(uchar cmdaddr)//8080时序
{
cs1=0;
rd=1;
rs=1;
wr=0;
BUS=cmdaddr;
wr=1;
cs1=1;
}
写入数据周期与写入指令周期的不同点在于RS与ZWR的配合时序不同。
驱动程序设计方法如下:
void LCD_DataWrite(uchar wrdata)//数据写控制
{
cs1=0;
rd=1;
rs=0;
wr=0;
BUS=wrdata;
wr=1;
cs1=1;
}
读取数据初始化步骤:①定义变量Data,用于存储读取到的数据。②利用RS与ZWR的配合时序确定存取周期。③设定ZRD为读有效状态。④关闭读有效状态,同时拉高RS电平。⑤将从BUS中读到的数据返回到寄存器内。
驱动程序设计方法如下:
uchar LCD_DataRead(void)//数据读控制
{
uchar Data;
wr=1;
rs=0;
cs1=0;
rd=0;
Data=BUS;
rd=1;
cs1=1;
rs=1;
return Data;
}
字符显示的寄存器配置可参考图2流程。
图2 字符显示寄存器配置流程图
图形显示主要采用描点法,以显示任意一点为先决条件,逐步画出所有需要显示的点。例如:在界面上显示一个正方形,首先,设计描点函数,用于在坐标(e,r)处点亮数组m中的第u个像素点,即完成显示任意一点功能。接着,设计正方形图形显示函数,调用描点函数,显示所需图形。
用于画横行的描点函数如下:
void display_dian(uchar*m,uchar e,uchar r,uchar u)
//描点函数1,用于画横行
{
LCD_CmdWrite(0x00);
LCD_DataWrite(0x04);//选择文字工作模式为文字模式
LCD_CmdWrite(0x60);
LCD_DataWrite(e);//定位横坐标
LCD_CmdWrite(0x70);
LCD_DataWrite(r);//定位纵坐标
LCD_CmdWrite(0xb0);
LCD_DataWrite(m[u]);//显示点
}
用于画竖列的描点函数声明如下,其他类同:
void display_dian1(uchar*m,uchar e,uchar r,uchar u)
//描点函数2,用于画竖行
正方形图形显示函数编程如下:
////正方形x:正方形左上角x坐标,y:正方形左上角y坐标//////
void display_fang(uchar x,uchar y)
{
t=0;
count=0;
g=0;//参数初始化
for(t=0;t<48;t++)//上行
{count=t/8;
g=t%8;
display_dian(raio1,x+count,y,g);
}
t=0;
count=0;
g=0;//参数初始化
for(t=0;t<48;t++)//下行
{
count=t/8;
g=t%8;
display_dian(raio1,x+count,y+40,g);
}
p=y+1;//参数初始化
for(t=0;t<40;t++)//右竖
{
display_dian1(raio2,x+6,p++ ,0);
}
p=y+1;
for(t=0;t<39;t++)//左竖
{
display_dian1(raio2,x,p++ ,0);
}
}
在主函数中需要画图时可调用本函数进行逐步描点操作。
RA8806内建一组10位ADC和控制电路,以连接四线电阻式触控屏幕。触控屏幕由两层非常薄的电阻式屏幕组成,如图3。在两层屏幕中间有一小缝隙,当有外力施加在面板上的某一点时,两层电阻式屏幕将被触碰(touch),形成回路而导通。由于两层电阻式屏幕的端点含有电极(XL、XR、YU、YD),如图4,因此,相对于触碰的位置,系统将侦测到一个XY的坐标值。
当触控事件发生时,在屏幕电阻上所产生的分压将决定触控的所在位置。在XY的坐标值被传回系统(RA8806)并储存在特定的缓存器后,触控屏幕控制器(touch panel controller)将发出一中断告知微处理机(MPU),即中断(INTR)寄存器的触控扫描侦测状态位(BIT0)将会被置为1。
数据采样与处理编程流程如图5所示。根据设计需要配置寄存器:设定寄存器TPCR1的BIT7为1,BIT6—BIT4为 100,BIT2 —BIT0为 100,将寄存器INTR的BIT7—BIT0全部清零。
图5 数据采样与处理流程图
人机交互程序设计步骤如下:①使能触控功能,重置中断状态;②读取中断状态,判断触摸状态位,确定触点被按下;③读取X、Y坐标,判断按下触点后所发出命令;④进入触点操作子函数,执行本命令;⑤返回参数及清空中断。
以上介绍的触摸屏在系统应用开发过程中,所涉及到的几项关键技术,如驱动程序、触控寄存器配置、字符图形显示编程、人机交互程序等技术,已经运用到所承担的课题“RLC数字测量仪”设计之中,为系统提供了最简单、方便、自然的一种新型人机交互方式。所介绍的相关技术具有一定的通用性、实用性和借鉴价值。
[1]Raio Technology Inc.RA8806 two layers Character/Graphic LCD Controller Specification Preliminary Version 1.0[EB/OL].2008.http://www.raio.com.tw/Data/Datasheet/RA88%20Series/Completed/RA8806_DS_v13_Eng.pdf.
[2]叶小岭,严海东.嵌入式触摸屏在汽车实验记录仪中的应用[J].计算机测量与控制,2009,17(3):573-575.
[3]New Tec DisplayCo.Ltd.NB320240R -BIW -SBN 触摸屏[EB/OL].http://www.newtec.com.tw.
[4]NEOTEC SEMICONDUCTOR LTD.NT7086.80 CH SEGMENT/COMMON DRIVER FOR DOT MATRIX LCD[EB/OL].2002.http://www.neotec.com.tw.
[5]Intersil Corporation.HIN230 thru HIN241 Data Sheet[EB/OL].2000.http://www.intersil.com/data/fn/fn3138.pdf.
[6]周立功.P89V51RD2器件手册[EB/OL].液晶与显示.2005. http://www. zlgmcu. com/philips/80c51/P89V51RD2/P89V51_isp.pdf.