基于ARM的触摸屏控制摘要:本文介绍了基于ARM的触摸屏控制的设计思路、原理和实现方法。
硬件电路主要由PHILIPS公司的ARM7TDMI-S微控制器LPC2290,FM7843控制器和SID13503控制器构成。
利用C语言编写驱动和用户程序,通过触摸屏的FM7843控制器将触摸信号进行A/D转换,进而利用ARM芯片和彩色液晶屏SID13503控制器,将触摸动作在液晶屏上进行显示,最终实现了触摸屏和液晶屏的控制。
该设计操作直观、简单、功耗小、提高了人机交互的友好性。
关键词:触摸屏; 液晶屏; ARMThe Control of Touch-screen Based on ARMAbstract: This paper introduced the designing of thought and the achievement methods of the control of ARM touch-screen based on ARM. The hardware circuit consists of ARM7TDMI-S LPC2290 controller, FM7843 controller and SID13503 controller which are all produced by PHILIPS Corporation. The researchers compose driven and user program in C language ,and utilize FM7843 controller of the touch-screen to proceed A/D converter, then use ARM chips and SID13503 controller of LCD screen to show the action of touching on the LCD screen, ultimately realize the control of touch-screen and LCD screen. This design is direct-viewing、simple、as well as costs less power and can improve the friendliness of human-computer interaction.Key word: touch-screen; LCD;ARM目录摘要 (1)1 引言 (3)2 总体设计 (3)3 硬件设计部分 (3)3.1 彩色液晶显示器 (3)3.2 彩色液晶屏驱动电路及SID13503控制器 (4)3.3 触摸屏原理 (5)3.4 触摸屏驱动电路及FM7843控制器 (5)4 软件设计部分 (6)4.1 触摸屏驱动程序设计 (6)4.2 彩色液晶屏驱动程序设计 (8)4.3 用户程序 (11)5总结 (13)参考文献 (14)附录一 (15)附录二 (18)附录三 (22)附录四 (26)1 引言随着信息产业的迅猛发展,由于触摸屏操作直观、简单、功耗小、有利于提高人机交互的友好性等优点,而逐渐取代鼠标、键盘,在人机交互中成为主要输入设备[1]。
因此LCD触摸屏变得也越来越普及,并成为当今的主流配置。
而目前对触摸屏的研究性价比有所欠缺,人机交互的友好性体现不够,功耗较大,占用空间多,并且大部分来自国外且价格不菲,而本文利用PHILIPS公司的LPC2290芯片,极好的解决了这些缺点,设计出了性价比高、屏幕显示无闪烁、画面切换速度快、占用空间少、方便灵活、人机交换互性好、低功耗、快速准确的触摸屏系统。
2 总体设计系统的总体设计框图如图1所示。
彩色液晶屏作为人机交换的最直接的交互画面,通过其内部的液晶屏控制器SID13503与LPC2290芯片相连,采用并行接口进行数据传送,对当前的触摸信息进行显示。
触摸屏紧贴在液晶显示屏的外表面,而触摸屏作为一种人机交换设备,当用户在触摸屏上有触摸动作时,触摸屏控制器通过A/D转换,将触摸信息传递给LPC2290芯片,LPC2290芯片处理信息后,控制液晶显示器进行相应的画面更新动作,实现人机交换功能。
图1 系统的总体框图3 硬件设计部分3.1 彩色液晶显示器液晶是一种在一定温度范围内呈现出即不同于固态、液态,又不同于气态的特殊物质,它即具有各向异性的晶体所特有的双折射性,又具有液体的流动性。
液晶显示器件(英文简写为LCD)就是利用液晶态物质的液晶分子排列状态在电场中改变而调制外界光的被动型显示器件[2]。
液晶显示器是平板显示器件中的一种,具有低工作电压、微功耗、无辐射、小体积等特点,被广泛应用于各种各样嵌入式产品中。
本设计所用的点阵式图形液晶显示屏是LCD的一种,能够动态显示图形、汉字以及各种符号信息,为各种电子产品提供了友好的人机界面。
随着STN和TFT液晶显示技术的成熟发展及制造成本的不断降低,点阵式图形液晶显示屏也就成为了嵌入式系统中最主要的图形显示设备。
3.2 彩色液晶屏驱动电路及SID13503控制器本设计使用 5.2英寸320x240彩色液晶屏,由于液晶屏内部没有液晶控制器,而LPC2290本身也没有液晶控制器模块,所以需要外接一个彩色液晶控制器[3.1]。
彩色液晶驱动电路如图2所示,液晶控制器型号为SID13503,采用5V电源供电。
由于SID13503是可以硬件配置的,所以设计电路时根据需要对SID13503的VD0-VD15引脚进行设置。
由于电路采用8位总线方式连接SID13503,所以SID13503的VD0没有上拉电阻,而且SID13503的DB8-DB15引脚要接VDD(即5V)。
图2中,将SID13503的地址总线A1-A17与SID13503的AB0-AB16相连.这样连接有一个好处,就是LPC2290可以使用16位总线方式操作SID13503(高8位数据被忽略)。
SID13503有两个片选引脚,一个是I/O片选引脚(用于内部寄存器操作),另一个是存储器片选引脚(用于显示存储器操作),所以用了IO_nCS3,IO_nCS2两个片选信号与其连接。
如图2所示,当IO_nCS3 为低电平时,信号nIOCS有效,所以内部寄存器的起始地址为0x83800000;当IO_nCS2为低电平时,信号nMEMCS 有效,所以显示存储器的起始地址为0x83400000[3.2]。
为了使用I/O接口呈现直接访问方式,故将SID13503的VD1接了一个10kΩ的上拉电阻。
在接5V电源时,SID13503的VIH=2V,所以可以直接使用LPC2290的总线与它相连,不需要加电平转换电路。
由于SID13503使用的电源是5V,而LPC2290的I/O电压为3.3V,所以在数据总线上串接470Ω的保护电阻。
图2的具体详细电路见附录四图2 彩色液晶屏驱动电路3.3 触摸屏原理触摸屏采用四线电阻式触摸屏(示意图如图3所示,测量原理如图4所示),四线电阻式触摸屏是电阻式家族中应用最广、最普及的一种[4],其由两个透明层构成,其中一层在屏幕的左右边缘各有一条垂直总线,另一层在屏幕的底部和顶部各有一条水平总线[5]。
透明层的内表面均涂了薄薄一层导电材料,当触摸屏表面受到的压力(如通过触笔或手指进行按压)足够大时,顶层与底层之间会产生接触,从而使电阻层发生接触。
当在Y 方向的电极对上施加一确定的电压,而X 方向电极对上不加电压时,在Y 平行电压场中,触点处的电压值可以在X +(或X -)电极上反映出来,通过测量X +电极对地的电压大小,便可得知触点的Y 坐标值。
同理,当在X 电极对上加电压,而Y 电极对上不加电压时,通过测量Y+电极的电压,便可得知触点的X 坐标。
到Vcc 到图3 四线电阻式触摸屏结构示意图 图4 四线电阻式触摸屏测量原理3.4 触摸屏驱动电路及FM7843控制器彩色液晶屏上带有触摸屏(四线电阻式触摸屏),用于检测屏幕触摸输入信号,有利于提高人际交互性的友好性。
因此在使用触摸屏时,须要一个A/D转换器将模拟信号转换成数字信号,这里使用触摸屏控制器FM7843来完成这一功能,其A/D转换精度有8位和12位,本设计利用12位精度。
在进行A/D转换后,通过SPI接口把转换结果输出到LPC2290。
FM7843的工作电源为2.7-5V,这里FM7843使用3.3V电压供电,A/D参考电源也是使用3.3V。
FM7843接口电路如图5所示[3.3]。
图5 FM7843接口电路图4软件设计部分4.1 触摸屏的驱动程序设计库文件config.h中包含了对FM7843的最基本的定义,并对FM7843的控制I/O端口进行定义,同时调整DELYA_200NS的值,可以控制系统时钟的快慢,参数值越大越慢FM7843.C为FM7843驱动程序,功能实现FM7843的驱动[6]。
函数DelayNo(),用来实现短软件延时,延时参数值越大,延时越久。
函数TestDelayNo(),用来测试短软件延时,以便于产生正确的时序。
函数FM7843_IRQR()(见附表一),对FM7843的PENIRQ引脚测量,返回当前此引脚的电平值, 返回为0表示PENIRQ为低电平状态,否则为高电平函数FM7843_IOInit(),初始化FM7843的控制I/O,初始化结果CS=1,DCLK=0,DIN=0。
函数FM7843_WriteRead()(见附表一),对FM7843进行读写操作。
作按照FM7843规定,24Clocks,先写8位控制数据,然后读取12位的转换结果,返回值为读出的数据。
#include "config.h"#define FM7843_CSS() IO2SET = ADS7843_CS#define FMS7843_CSC() IO2CLR = ADS7843_CS#define FMS7843_DOUTR() (IO2PIN & ADS7843_DOUT)#define FM7843_DINS() IO2SET = ADS7843_DIN#define FM7843_DINC() IO2CLR = ADS7843_DIN#define FM7843_DCLKS() IO2SET = ADS7843_DCLK#define FM7843_DCLKC() IO2CLR = FM7843_DCLK/* 操作时序控制宏(即延时控制值) */#define DELAY_200NS 5/*实现短软件延时,延时参数值越大,延时越久*/void DelayNo(uint32 i){for(; i>0; i--);}/*测试短软件延时,以便于产生正确的时序*/void TestDelayNo(void){while(1){FM7843_DCLKS();DelayNo(DELAY_200NS);FM7843_DCLKC();DelayNo(DELAY_200}}/*初始化FM7843的控制I/O,初始化结果CS=1,DCLK=0,DIN=0 */ void FM7843_IOInit(void){FM7843_CSS(); // CS = 1FM7843_DCLKC(); // DCLK = 0FM7843_DINC(); // DIN = 0DelayNo(DELAY_200NS);}/*对FM7843的PENIRQ引脚测量,返回当前此引脚的电平值, 返回为0表示PENIRQ 为低电平状态,否则为高电平*/FM7843_IRQR(){…….见附表一}/*对FM7843进行读写操作。