基于ARM的触摸屏控制模板doc文档格式.docx
- 文档编号:954454
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:32
- 大小:195.96KB
基于ARM的触摸屏控制模板doc文档格式.docx
《基于ARM的触摸屏控制模板doc文档格式.docx》由会员分享,可在线阅读,更多相关《基于ARM的触摸屏控制模板doc文档格式.docx(32页珍藏版)》请在冰点文库上搜索。
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坐标。
图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]。
图5FM7843接口电路图
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"
#defineFM7843_CSS()IO2SET=ADS7843_CS
#defineFMS7843_CSC()IO2CLR=ADS7843_CS
#defineFMS7843_DOUTR()(IO2PIN&
ADS7843_DOUT)
#defineFM7843_DINS()IO2SET=ADS7843_DIN
#defineFM7843_DINC()IO2CLR=ADS7843_DIN
#defineFM7843_DCLKS()IO2SET=ADS7843_DCLK
#defineFM7843_DCLKC()IO2CLR=FM7843_DCLK
/*操作时序控制宏(即延时控制值)*/
#defineDELAY_200NS5
/*实现短软件延时,延时参数值越大,延时越久*/
voidDelayNo(uint32i)
{
for(;
i>
0;
i--);
}
/*测试短软件延时,以便于产生正确的时序*/
voidTestDelayNo(void)
while
(1)
FM7843_DCLKS();
DelayNo(DELAY_200NS);
FM7843_DCLKC();
DelayNo(DELAY_200
/*初始化FM7843的控制I/O,初始化结果CS=1,DCLK=0,DIN=0*/
voidFM7843_IOInit(void)
FM7843_CSS();
//CS=1
//DCLK=0
FM7843_DINC();
//DIN=0
/*对FM7843的PENIRQ引脚测量,返回当前此引脚的电平值,返回为0表示PENIRQ为低电平状态,否则为高电平*/
FM7843_IRQR()
…….见附表一
/*对FM7843进行读写操作。
*/
FM7843_WriteRead()
{
……见附表一
库文件config.h中包含了对SID13503的最基本的定义。
LCDDRIVE.C是彩色液晶屏的驱动程序,功能是实现彩色液晶屏的驱动程序通过操作彩色液晶屏控制器SID13503,控制256色RGB伪彩色液晶显示屏,其中使用LPC2290芯片控制,8位总线接口,SID13503的寄存器地址为0x838000xx,显示存储器的地址为0x834xxxxx[7]。
显示缓冲区的定义(见附表一)。
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接口函数(见附表二)
......
/*定义显示缓冲区(可根据情况定义或直接使用LCM显示存储空间)*/
见附表一
/*对彩色液晶屏控制器SID13503寄存器0--D进行初始化*/
S1D13503_Init(void)
......见附表一
/*初始化彩色液晶屏控制器SID13503的调色板*/
voidS1D13503_LutInit(void)
volatileuint16*REG_Point1;
volatileuint16*REG_Point2;
uint8i;
REG_Point1=(void*)S1D13503_REG;
REG_Point1+=0x0E;
REG_Point2=(void*)S1D13503_REG;
REG_Point2+=0x0F;
for(i=0;
i<
16;
i++)
*REG_Point1=i;
//设置为自动更换存取方式,设置地址
*REG_Point2=LUT_RED_TAB[i];
//设置红色调色板
*REG_Point2=LUT_GRN_TAB[i];
//设置绿色调色板
*REG_Point2=LUT_BLU_TAB[i];
//设置蓝色调色板
}
/*实现LCM初始化,将LCM初始化为纯图形模式*/
voidLCD_Initialize(void)
S1D13503_Init();
//初始化LCM工作模式
S1D13503_LutInit();
//初始化调色板
/*实现LCD以图形方式进行填充,填充起始地址为0X0000,dat为要填
充的颜色数据*/
voidLCD_FillAll(TCOLORdat)
volatileuint16*DAT_Point;
uint32i,j;
/*开始复制填充数据*/
DAT_Point=(void*)S1D13503_DAT;
//置地址指针
GUI_LCM_YMAX;
i++)//历遍所有行
for(j=0;
j<
GUI_LCM_XMAX;
j++)//历遍所有行
*DAT_Point++=dat;
/*实现在指定位置上画点,并刷新某一点,x表示指定点所在列的位置,y表示指定点所在行的位置,当画点在指定地址时,实现其功能,当指定地址超出有效范围,则操作失败*/
voidLCD_UpdatePoint(uint32x,uint32y)
uint32addr;
uint32x1,y1;
x1=GUI_LCM_XMAX-x-1;
//对于9111屏有效
y1=GUI_LCM_YMAX-y-1;
/*找出目标地址*/
addr=y1*GUI_LCM_XMAX+x1;
DAT_Point+=addr;
*DAT_Point=gui_disp_buf[y][x];
//输出数据
{.....
/*与LCM相关的GUI接口函数*/
见附表二
4.3用户程序
本程序实现读取触摸屏的动作,并显示一个方点在对应的液晶屏幕上。
程序运行时,首先进行必要的初始化[8],即初始化GPIO、初始化LCM、将液晶屏片选信号CS置低、填充液晶屏幕背景色并校准屏幕,然后判断是否有触摸动作,如没有则继续等待,直到有触摸输入时,读取触摸动作并判断触摸是否有效,如无效则返回继续等待触摸,若有效,蜂鸣器响一声,获取当前触摸坐标并进行校准,最后将触摸结果在液晶屏上显示。
流程图如图6所示。
图6用户程序流程图
voidGPIO_Initialize(void);
voidGetLCD_XY(uint16*vx,uint16*vy);
voidDelayNS(uint32dly);
uint8Calibration(void);
uint16errx1,erry1,errx2,erry2;
//一般存放基准点坐标
uint16diffx,diffy;
//一般存放基准点坐标差值
uint16x,y;
//一般存放当前坐标
本段程序名称main,其为程序的主函数,功能包括GPIO和LCM的初始化,填充颜色,校准屏幕,获取当前坐标,并进行显示[9]。
intmain(void)
GPIO_Initialize();
//初始化GPIO
GPIOGUI_Initialize();
//初始化LCM
GUI_FillSCR(WHITE);
//填充白色背景
while(Calibration()!
=1);
//校准屏幕
GetLCD_XY(&
x,&
y);
//获取当前坐标
x=(x-errx1)*280/diffx+20;
//通过基准点校准x
y=(y-erry1)*200/diffy+20;
//通过基准点校准y
/*通过点函数构成一个方点画在LCD上*/
GUI_Point(x+1,y,BLACK);
GUI_Point(x-1,y,BLACK);
GUI_Point(x,y+1,BLACK);
GUI_Point(x,y-1,BLACK);
GUI_Point(x+1,y+1,BLACK);
GUI_Point(x-1,y-1,BLACK);
GUI_Point(x+1,y-1,BLACK);
GUI_Point(x-1,y+1,BLACK);
GUI_Point(x,y,BLACK);
return0;
子程序GPIO_Initialize(),功能是初始化触摸屏和蜂鸣器的GPIO
voidGPIO_Initialize(void)
……见附录三
函数Calibration(),功能是获取校准基准点坐标,其中uint16*errx,用于保存校准点x坐标(LCD)的变量指针,uint16*erry,用于保存校准点y坐标(LCD)的变量指针
uint8Calibration(void)
函数GetLCD_XY(),功能是读取触摸屏上触摸点的坐标,在读取过程中,程序会一直等待,直到有触摸输入[10]。
其原理是先通测量y轴的触摸输入,判断是否有触摸动作。
如果有,则行6次数据采集,并进行去极值平均滤波处理。
最后还要判断触摸输入是否合法,只有当触摸输入合法时才返回。
其中,x用于保存触摸点x坐标(LCD)的变量指针,y用于保存触摸点y坐标(LCD)的变量指针。
voidGetLCD_XY(uint16*vx,uint16*vy)
本程序名称为DelayNS(),功能是实现长软件延时(dly毫秒,与程序运行速度有关),消除震颤,其中dly为延时参数,值越大,延时越久。
voidDelayNS(uint32dly)
……见附录三
函数Beep(),其功能实现控制蜂鸣器响一声。
voidBeep(void)
五总结
本设计使用PHILIPS公司的LPC2290的ARM单片机,从触摸屏和液晶显示器的性能方面为出发点,通过C语言编程,来设计实现的四线电阻式触摸屏产品在实际应用中得到了很好的效果,实现了先进的触摸屏显示、控制技术,改善了传统的设备显示与控制方式,性价比高,低功耗,提高了人机交互的友好性,使设备更加人性化,有很强的应用前景,相信其会变得也越来越普及,并成为当今的主流配置。
参考文献
[1]欧庆于等.基于S3C44B0X+uClinux的触摸屏设计.计算机与数字工程[J],2005,12(3):
165.
[2]周立功等.ARM与嵌入式系基础教程[M].北京:
北
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ARM 触摸屏 控制 模板 doc