已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于ARM的触摸屏控制 摘要:本文介绍了基于ARM的触摸屏控制的设计思路、原理和实现方法。硬件电路主要由PHILIPS公司的ARM7TDMI-S微控制器LPC2290,FM7843控制器和SID13503控制器构成。利用C语言编写驱动和用户程序,通过触摸屏的FM7843控制器将触摸信号进行A/D转换,进而利用ARM芯片和彩色液晶屏SID13503控制器,将触摸动作在液晶屏上进行显示,最终实现了触摸屏和液晶屏的控制。该设计操作直观、简单、功耗小、提高了人机交互的友好性。关键词:触摸屏; 液晶屏; ARM The Control of Touch-screen Based on ARM Abstract: 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目 录摘要11 引言32 总体设计33 硬件设计部分33.1 彩色液晶显示器33.2 彩色液晶屏驱动电路及SID13503控制器 43.3 触摸屏原理.53.4 触摸屏驱动电路及FM7843控制器54 软件设计部分.64.1 触摸屏驱动程序设计.64.2 彩色液晶屏驱动程序设计84.3 用户程序.115 总结.13参考文献14附录一15附录二18附录三22附录四261 引言随着信息产业的迅猛发展,由于触摸屏操作直观、简单、功耗小、有利于提高人机交互的友好性等优点,而逐渐取代鼠标、键盘,在人机交互中成为主要输入设备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 有效,所以显示存储器的起始地址为0x834000003.2。为了使用I/O接口呈现直接访问方式,故将SID13503的VD1接了一个10k的上拉电阻。在接5V电源时,SID13503的VIH2V,所以可以直接使用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坐标。 图3 四线电阻式触摸屏结构示意图 图4 四线电阻式触摸屏测量原理3.4 触摸屏驱动电路及FM7843控制器彩色液晶屏上带有触摸屏(四线电阻式触摸屏),用于检测屏幕触摸输入信号,有利于提高人际交互性的友好性。因此在使用触摸屏时,须要一个A/D转换器将模拟信号转换成数字信号,这里使用触摸屏控制器FM7843来完成这一功能,其A/D转换精度有8位和12位,本设计利用12位精度。在进行A/D转换后,通过SPI接口把转换结果输出到LPC2290。FM7843的工作电源为2.75V,这里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_200NS5 /*实现短软件延时,延时参数值越大,延时越久*/void DelayNo(uint32 i) for(; i0; 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进行读写操作。作按照FM7843规定,24Clocks,先写8位控制数据,然后读取12位的转换结果,返回值为读出的数据。*/FM7843_WriteRead()见附表一4.2 彩色液晶屏的驱动程序设计库文件config.h中包含了对SID13503的最基本的定义。LCDDRIVE.C是彩色液晶屏的驱动程序,功能是实现彩色液晶屏的驱动程序通过操作彩色液晶屏控制器SID13503,控制256色RGB伪彩色液晶显示屏,其中使用LPC2290芯片控制,8位总线接口,SID13503的寄存器地址为0x838000xx,显示存储器的地址为0x834xxxxx7。显示缓冲区的定义(见附表一)。S1D13503_Init()是彩色液晶屏控制器的寄存器初始化函数(见附表一),其功能对彩色液晶屏控制器SID13503寄存器0-D进行初始化(使用查表方法),彩色液晶屏型号为320*240 ,256色单屏彩屏。其中同样使用了函数uint8和 uint16,uint8表示无符号8位整型变量 ,uint16无符号16位整型变量。S1D13503_LutInit()是彩色液晶屏控制器调色板的初始化函数,其功能初始化彩色液晶屏控制器SID13503的调色板,其中调色板红、绿基色设置为0、3、5、7、9、11、13、15,蓝基色设置为0、6、10、15。LCD_Initialize()是LCM初始化函数,功能是实现LCM初始化,将LCM初始化为纯图形模式,显示起始地址为0X0000。LCD_FillAll()是LCD的填充函数,功能是实现LCD以图形方式进行填充,填充起始地址为0X0000,dat为要填充的颜色数据。LCD_UpdatePoint()是LCD的画图函数, 功能是实现在指定位置上画点,并刷新某一点,x表示指定点所在列的位置,y表示指定点所在行的位置,当画点在指定地址时,实现其功能,当指定地址超出有效范围,则操作失败。与LCM相关的GUI接口函数(见附表二)#include config.h./* 定义显示缓冲区(可根据情况定义或直接使用LCM显示存储空间) */见附表一/* 对彩色液晶屏控制器SID13503寄存器0-D进行初始化*/S1D13503_Init(void). 见附表一/*初始化彩色液晶屏控制器SID13503的调色板*/void S1D13503_LutInit(void) volatile uint16 *REG_Point1;volatile uint16 *REG_Point2;uint8 i; REG_Point1 = (void *) S1D13503_REG;REG_Point1 += 0x0E;REG_Point2 = (void *) S1D13503_REG;REG_Point2 += 0x0F;for(i=0; i16; i+) *REG_Point1 = i; / 设置为自动更换存取方式,设置地址*REG_Point2 = LUT_RED_TABi; / 设置红色调色板*REG_Point2 = LUT_GRN_TABi; / 设置绿色调色板*REG_Point2 = LUT_BLU_TABi; / 设置蓝色调色板 /* 实现LCM初始化,将LCM初始化为纯图形模式*/void LCD_Initialize(void) S1D13503_Init(); / 初始化LCM工作模式S1D13503_LutInit(); / 初始化调色板/* 实现LCD以图形方式进行填充,填充起始地址为0X0000,dat为要填充的颜色数据*/void LCD_FillAll(TCOLOR dat) volatile uint16 *DAT_Point; uint32 i, j; /* 开始复制填充数据 */DAT_Point = (void *) S1D13503_DAT; / 置地址指针 for(i=0; iGUI_LCM_YMAX; i+) / 历遍所有行 for(j=0; j 1) return(1);else return(0);函数ADS7843_WriteRead(),功能是对ADS7843进行读写操作。uint16 ADS7843_WriteRead(uint8 data) uint8 i;uint16 ret_dat;data = data|0x80; / 设置S位ADS7843_IOInit();ADS7843_CSC(); / CS = 0for(i=0; i8; i+) if( (data&0x80) != 0 ) ADS7843_DINS();/ DIN = 1else ADS7843_DINC(); / DIN = 0DelayNo(DELAY_200NS);ADS7843_DCLKS(); / DCLK = 1DelayNo(DELAY_200NS);ADS7843_DCLKC(); / DCLK = 0data = data1;ADS7843_DINC(); / DIN = 0DelayNo(DELAY_200NS * 3);ADS7843_DCLKS(); /DCL=1DelayNo(DELAY_200NS);ADS7843_DCLKC(); / DCLK = 0ret_dat = 0for(i=0; i12; i+) ret_dat = ret_dat1; DelayNo(DELAY_200NS);ADS7843_DCLKS(); / DCLK = 1if( ADS7843_DOUTR() != 0 ) ret_dat = ret_dat | 1; DelayNo(DELAY_200NS);ADS7843_DCLKC(); / DCLK = 0if(i=6) DelayNo(DELAY_200NS * 2); for(i=0;i3;i+) DelayNo(DELAY_200NS);ADS7843_DCLKS(); / DCLK = 1DelayNo(DELAY_200NS);ADS7843_DCLKC(); / DCLK = 0 DelayNo(DELAY_200NS);ADS7843_CSS(); / CS = 1return(ret_dat);#include config.h/* 定义显示缓冲区(可根据情况定义或直接使用LCM显示存储空间) */TCOLOR gui_disp_bufGUI_LCM_YMAXGUI_LCM_XMAX;uint8 const INIT_TAB14 = 0x00, / 寄存器0 - 00000000B (正常工作模式,即非测试模式)0xBD, / 寄存器1 - 10111101B (模式控制:打开显示单屏,屏蔽XSCL水平非显示周期输出,使能LCDENB,彩色8位LCD数据-无XCSL2,16位显示存储数据总线方式) 159, / 寄存器2 - 159 (行字节控制)(每行显示占用的存储器字节数,即列参数)0x0E, / 寄存器3 - 00001110B (非节功模式,256彩色方式)239, / 寄存器4 - 239 (总行数) 0, / 寄存器5 - 0 (WF翻转周期,为0时表示每一帧WF输出翻转一)0x00, / 寄存器6 - 00H (第一屏显示RAM地址低8位)0x00, / 寄存器7 - 00H (第一屏显示RAM地址高8位)0x00, / 寄存器8 - 00H (第二屏显示RAM地址低8位)0x00, / 寄存器9 - 00H (第二屏显示RAM地址高8位)239, / 寄存器A - 239 (显示一区占用行数)0, / 寄存器B - 0 (显示一区占用行数,高2位)10, / 寄存器C - 10 (水平默认不显示周期) 0 / 寄存器D - 0 (显示域冗余宽度,正常操作模式); 函数S1D13503_Init(),功能是初始化S1D13503。void S1D13503_Init(void) volatile uint16 *REG_Point; uint8 i; REG_Point = (void *) S1D13503_REG;for(i=0; i14; i+) / 共初始化14个寄存器 *REG_Point = INIT_TABi; / 查表取出数据,然后赋值给S1D13503相应的寄存器,实现初始化REG_Point+; / 指向下一寄存器uint8 const LUT_RED_TAB16 = 0, 3, 5, 7, 9, 11, 13, 15, 0, 3, 5, 7, 9, 11, 13, 15;uint8 const LUT_GRN_TAB16 = 0, 3, 5, 7, 9, 11, 13, 15,0, 3, 5, 7, 9, 11, 13, 15;uint8 const LUT_BLU_TAB16 = 0, 6, 10, 15,0, 6, 10, 15,0, 6, 10, 15 ;附录二与LCM相关的GUI接口函数函数本段程序名称GUI_FillSCR(),其功能实现全屏填充,即直接使用数据填充显示缓冲区,dat表示填充的数据void GUI_FillSCR(TCOLOR dat) uint32 i, j; /* 填充缓冲区 */for(i=0; iGUI_LCM_YMAX; i+) / 历遍所有行 for(j=0; j=GUI_LCM_XMAX) return(0);if(y=GUI_LCM_YMAX) return(0); /* 设置缓冲区相应的点 */gui_disp_bufyx = color;/* 刷新显示 */LCD_UpdatePoint(x, y);return(1);函数GUI_ReadPoint(),其功能读取指定点的颜色,x表示指定点在列的位置,y指定点所在行的位置,ret用于保存颜色值的指针,当出口参数返回0时表示指定地址超出有效范围。对于单色,设置ret的d0位为1或4级灰度则为d0、d1有效位RGB则d0-d7有效,RGB结构则R、G、B变量有效。int GUI_ReadPoint(uint32 x, uint32 y, TCOLOR *ret) /* 参数过滤 */ if(x=GUI_LCM_XMAX) return(0);if(y=GUI_LCM_YMAX) return(0);/* 取得该点颜色(用户自行更改) */ *ret = gui_disp_bufyx;return(1);函数GUI_HLine(),功能实现画水平线,其中x0表示水平线起点所在列的位置 ,y0 表示水平线起点所在行的位置,x1表示水平线终点所在列的位置,color显示颜色(对于黑白色LCM,为0时灭,为1时显示) ,LCM初始化对于单色、4级灰度的液晶,可通过修改此函数作图提高速度,如色LCM,可以一次更新8个点,而不需要一个点一个点的写到LCM中。void GUI_HLine(uint32 x0, uint32 y0, uint32 x1, TCOLOR color) uint32 bak;if(x0x1) / 对x0、x1大小进行排列,以便画图 bak = x1; x1 = x0; x0 = bak;Do GUI_Point(x0, y0, color);/ 逐点显示,描出水平线x0+;while(x1=x0);函数GUI_RLine(),功能是实现画垂直线。其中x0表示垂直线起点所在列的位置,y0表示垂直线起点所在行的位置,y1表示垂直线终点所在行的位置, 对于单色、4级灰度的液晶,可通过修改此函数作图提高速度,如色LCM,可以一次更新8个点,而不需要一个点一个点的写到LCM中。void GUI_RLine(uint32 x0, uint32 y0, uint32 y1, TCOLOR color) uint32 bak;if(y0y1) / 对y0、y1大小进行排列,以便画图 bak = y1;y1 = y0;y0 = bak; do GUI_Point(x0, y0, color); / 逐点显示,描出垂直线y0+; while(y1=y0);函数GUI_CmpColor(),其功能是判断颜色值是否一致,color1表示颜色值1,color2表示颜色值2,当出口参数返回1表示相同,返回0表示不相同。由于颜色类型TCOLOR可以是结构类型,所以此处编写了比较函数。int GUI_CmpColor(TCOLOR color1, TCOLOR color2) if(color1=color2) return(1); else return(0);函数GUI_CopyColor(),其功能是进行颜色值复制,color1代表目标颜色变量,color2代表源颜色变量。由于颜色类型TCOLOR可以是结构类型,所以此处编写了复制函数。void GUI_CopyColor(TCOLOR *color1, TCOLOR color2) *color1 = color2; 附录三子程序GPIO_Initialize(),功能是初始化触摸屏和蜂鸣器的GPIOvoid GPIO_Initialize(void)PINSEL0 = PINSEL0 & 0xFFFFCFFF;IO0DIR = BEEPCON;IO0SET = BEEPCON;IO2DIR = ADS7843_CS|ADS7843_DIN|ADS7843_DCLK; 函数Calibration(),功能是获取校准基准点坐标,其中uint16 *errx,用于保存校准点x坐标(LCD)的变量指针,uint16 *erry,用于保存校准点y坐标(LCD)的变量指针uint8 Calibration(void) uint16 sumx, sumy;uint16 x, y, i;/* 获取左上角基准点 */GUI_HLine( 0, 19, 39, BLACK);GUI_RLine( 19, 0, 39, BLACK);sumx = 0;sumy = 0;for(i=0; i 4;erry1 = sumy 4;GUI_HLine( 0, 19, 39, WHITE);GUI_RLine( 19, 0, 39, WHITE);if( (errx10x000) & (erry10x000) )Beep();elseBeep();Beep(); return(0);/* 获取右下角基准点 */GUI_HLine( 279, 219, 319, BLACK);GUI_RLine( 299, 199, 239, BLACK);sumx = 0;sumy = 0;for(i=0; i 4;erry2 = sumy 4; GUI_HLine( 279, 219,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度分包项目服务协议样本
- 2024年担保协议主体法律关系梳理书
- 高等教育教材建设与教学质量提升方案
- 德育改进措施与策略
- 2024年钢管扣件物流配送服务协议
- 2024年销售团队业绩达标协议样本
- 2024年货物承运及托运协议
- 2024年度建筑用材采购简易协议样式
- 2024年销售业绩提成计算协议
- 管材定制合同范本
- GB_T 28581-2021 通用仓库及库区规划设计参数(高清版)
- 天然气管道增加快速切断装置改造施工方案
- 炒股(盈亏、补仓成本、减仓成本)快速计算表格
- 《企业文化与变革》PPT课件.ppt
- 城市轨道交通线路选线设计-徐振廷
- 工程委外维保流程ppt课件
- 中建股份公司合同管理手册
- 超高层建筑电气设计要点分析
- 精神堡垒报价单
- 德国支持中小企业科技创新的政策资料
- 全公安机关易制爆危险化学品安全监管要点暨检查记录表
评论
0/150
提交评论