![基于ARM的触摸屏控制模板_第1页](http://file4.renrendoc.com/view/88cda9c0fda9982416e973e2adc888f1/88cda9c0fda9982416e973e2adc888f11.gif)
![基于ARM的触摸屏控制模板_第2页](http://file4.renrendoc.com/view/88cda9c0fda9982416e973e2adc888f1/88cda9c0fda9982416e973e2adc888f12.gif)
![基于ARM的触摸屏控制模板_第3页](http://file4.renrendoc.com/view/88cda9c0fda9982416e973e2adc888f1/88cda9c0fda9982416e973e2adc888f13.gif)
![基于ARM的触摸屏控制模板_第4页](http://file4.renrendoc.com/view/88cda9c0fda9982416e973e2adc888f1/88cda9c0fda9982416e973e2adc888f14.gif)
![基于ARM的触摸屏控制模板_第5页](http://file4.renrendoc.com/view/88cda9c0fda9982416e973e2adc888f1/88cda9c0fda9982416e973e2adc888f15.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精选优质文档-----倾情为你奉上精选优质文档-----倾情为你奉上专心---专注---专业专心---专注---专业精选优质文档-----倾情为你奉上专心---专注---专业基于ARM的触摸屏控制摘要:本文介绍了基于ARM的触摸屏控制的设计思路、原理和实现方法。硬件电路主要由PHILIPS公司的ARM7TDMI-S微控制器LPC2290,FM7843控制器和SID13503控制器构成。利用C语言编写驱动和用户程序,通过触摸屏的FM7843控制器将触摸信号进行A/D转换,进而利用ARM芯片和彩色液晶屏SID13503控制器,将触摸动作在液晶屏上进行显示,最终实现了触摸屏和液晶屏的控制。该设计操作直观、简单、功耗小、提高了人机交互的友好性。关键词:触摸屏;液晶屏;ARMTheControlofTouch-screenBasedonARMAbstract:ThispaperintroducedthedesigningofthoughtandtheachievementmethodsofthecontrolofARMtouch-screenbasedonARM.ThehardwarecircuitconsistsofARM7TDMI-SLPC2290controller,FM7843controllerandSID13503controllerwhichareallproducedbyPHILIPSCorporation.TheresearcherscomposedrivenanduserprograminClanguage,andutilizeFM7843controllerofthetouch-screentoproceedA/Dconverter,thenuseARMchipsandSID13503controllerofLCDscreentoshowtheactionoftouchingontheLCDscreen,ultimatelyrealizethecontroloftouch-screenandLCDscreen.Thisdesignisdirect-viewing、simple、aswellascostslesspowerandcanimprovethefriendlinessofhuman-computerinteraction.Keyword:touch-screen;LCD;ARM1引言随着信息产业的迅猛发展,由于触摸屏操作直观、简单、功耗小、有利于提高人机交互的友好性等优点,而逐渐取代鼠标、键盘,在人机交互中成为主要输入设备[1]。因此LCD触摸屏变得也越来越普及,并成为当今的主流配置。而目前对触摸屏的研究性价比有所欠缺,人机交互的友好性体现不够,功耗较大,占用空间多,并且大部分来自国外且价格不菲,而本文利用PHILIPS公司的LPC2290芯片,极好的解决了这些缺点,设计出了性价比高、屏幕显示无闪烁、画面切换速度快、占用空间少、方便灵活、人机交换互性好、低功耗、快速准确的触摸屏系统。2总体设计系统的总体设计框图如图1所示。彩色液晶屏作为人机交换的最直接的交互画面,通过其内部的液晶屏控制器SID13503与LPC2290芯片相连,采用并行接口进行数据传送,对当前的触摸信息进行显示。触摸屏紧贴在液晶显示屏的外表面,而触摸屏作为一种人机交换设备,当用户在触摸屏上有触摸动作时,触摸屏控制器通过A/D转换,将触摸信息传递给LPC2290芯片,LPC2290芯片处理信息后,控制液晶显示器进行相应的画面更新动作,实现人机交换功能。图1系统的总体框图3硬件设计部分液晶是一种在一定温度范围内呈现出即不同于固态、液态,又不同于气态的特殊物质,它即具有各向异性的晶体所特有的双折射性,又具有液体的流动性。液晶显示器件(英文简写为LCD)就是利用液晶态物质的液晶分子排列状态在电场中改变而调制外界光的被动型显示器件[2]。液晶显示器是平板显示器件中的一种,具有低工作电压、微功耗、无辐射、小体积等特点,被广泛应用于各种各样嵌入式产品中。本设计所用的点阵式图形液晶显示屏是LCD的一种,能够动态显示图形、汉字以及各种符号信息,为各种电子产品提供了友好的人机界面。随着STN和TFT液晶显示技术的成熟发展及制造成本的不断降低,点阵式图形液晶显示屏也就成为了嵌入式系统中最主要的图形显示设备。本设计使用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有效,所以内部寄存器的起始地址为0x;当IO_nCS2为低电平时,信号nMEMCS有效,所以显示存储器的起始地址为0x[3.2]。为了使用I/O接口呈现直接访问方式,故将SID13503的VD1接了一个10kΩ的上拉电阻。在接5V电源时,SID13503的VIH=2V,所以可以直接使用LPC2290的总线与它相连,不需要加电平转换电路。由于SID13503使用的电源是5V,而LPC2290的I/O电压为3.3V,所以在数据总线上串接470Ω的保护电阻。图2的具体详细电路见附录四图2彩色液晶屏驱动电路触摸屏采用四线电阻式触摸屏(示意图如图3所示,测量原理如图4所示),四线电阻式触摸屏是电阻式家族中应用最广、最普及的一种[4],其由两个透明层构成,其中一层在屏幕的左右边缘各有一条垂直总线,另一层在屏幕的底部和顶部各有一条水平总线[5]。透明层的内表面均涂了薄薄一层导电材料,当触摸屏表面受到的压力(如通过触笔或手指进行按压)足够大时,顶层与底层之间会产生接触,从而使电阻层发生接触。当在Y方向的电极对上施加一确定的电压,而X方向电极对上不加电压时,在Y平行电压场中,触点处的电压值可以在X+(或X-)电极上反映出来,通过测量X+电极对地的电压大小,便可得知触点的Y坐标值。同理,当在X电极对上加电压,而Y电极对上不加电压时,通过测量Y+电极的电压,便可得知触点的X坐标。图3四线电阻式触摸屏结构示意图图4四线电阻式触摸屏测量原理彩色液晶屏上带有触摸屏(四线电阻式触摸屏),用于检测屏幕触摸输入信号,有利于提高人际交互性的友好性。因此在使用触摸屏时,须要一个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软件设计部分库文件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#defineFM7843_DINC() IO2CLR=ADS7843_DIN#define FM7843_DCLKS() IO2SET=ADS7843_DCLK#define FM7843_DCLKC() IO2CLR=FM7843_DCLK/*操作时序控制宏(即延时控制值)*/#defineDELAY_200NS 5/*实现短软件延时,延时参数值越大,延时越久*/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=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的寄存器地址为0xxx,显示存储器的地址为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接口函数(见附表二)#include"config.h"{....../*定义显示缓冲区(可根据情况定义或直接使用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; //置地址指针for(i=0;i<GUI_LCM_YMAX;i++) //历遍所有行{for(j=0;j<GUI_LCM_XMAX;j++) //历遍所有行{*DAT_Point++=dat;}}}/*实现在指定位置上画点,并刷新某一点,x表示指定点所在列的位置,y表示指定点所在行的位置,当画点在指定地址时,实现其功能,当指定地址超出有效范围,则操作失败*/voidLCD_UpdatePoint(uint32x,uint32y){volatileuint16*DAT_Point;uint32addr;uint32x1,y1;x1=GUI_LCM_XMAX-x-1;//对于9111屏有效y1=GUI_LCM_YMAX-y-1;//对于9111屏有效/*找出目标地址*/addr=y1*GUI_LCM_XMAX+x1;DAT_Point=(void*)S1D13503_DAT;DAT_Point+=addr;*DAT_Point=gui_disp_buf[y][x]; //输出数据}{...../*与LCM相关的GUI接口函数*/见附表二}本程序实现读取触摸屏的动作,并显示一个方点在对应的液晶屏幕上。程序运行时,首先进行必要的初始化[8],即初始化GPIO、初始化LCM、将液晶屏片选信号CS置低、填充液晶屏幕背景色并校准屏幕,然后判断是否有触摸动作,如没有则继续等待,直到有触摸输入时,读取触摸动作并判断触摸是否有效,如无效则返回继续等待触摸,若有效,蜂鸣器响一声,获取当前触摸坐标并进行校准,最后将触摸结果在液晶屏上显示。流程图如图6所示。图6用户程序流程图#include"config.h"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();//初始化GPIOGPIOGUI_Initialize(); //初始化LCMGUI_FillSCR(WHITE);//填充白色背景while(Calibration()!=1);//校准屏幕while(1){GetLCD_XY(&x,&y);//获取当前坐标x=(x-errx1)*280/diffx+20;//通过基准点校准xy=(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(),功能是初始化触摸屏和蜂鸣器的GPIOvoidGPIO_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].北京:北京航空航天大学出版社,2005:379-381.[3]周立功等.ARM嵌入式系统实验教程(三)[M].北京:北京航空航天大学出版社,2005:21-22.[4]陈辰等.ARM芯片S3C2410触摸屏驱动的研究与开发.科学技术与工程[J],2006,3(2):327.[5]王洪等.ARMHMS30C7202与触摸屏接口电路的设.计微计算机信息[J],2007,2(3):166.[6]马忠梅.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,2003:120-125.[7]吴明晖等.基于ARM的嵌入式系统开发与应用[M].北京:人民邮电出版社,2004:72-74.[8]刘显荣.基于S3C2410的触摸屏控制.微计算机信息[J],2007,11(3):185.[9]杜春雷.ARM体系结构与编程[M].北京:清华大学出版社,2003:61-62.[10]坛浩强.C程序设计(第二版)[M].北京:清华大学出版社,1999:107-108.附录一函数ADS7843_IRQR(),实现对ADS7843的PENIRQ引脚测量,返回当前此引脚的电平值。uint8ADS7843_IRQR(void){uint8dat[3];DelayNo(1);if(IO0PIN&ADS7843_IRQ)dat[0]=1;elsedat[0]=0;if(IO0PIN&ADS7843_IRQ)dat[1]=1;elsedat[1]=0;if(IO0PIN&ADS7843_IRQ)dat[2]=1;elsedat[2]=0;if((dat[0]+dat[1]+dat[2])>1)return(1);elsereturn(0);}函数ADS7843_WriteRead(),功能是对ADS7843进行读写操作。uint16ADS7843_WriteRead(uint8data){uint8i;uint16ret_dat;data=data|0x80; //设置S位ADS7843_IOInit();ADS7843_CSC(); //CS=0for(i=0;i<8;i++){if((data&0x80)!=0)ADS7843_DINS(); //DIN=1elseADS7843_DINC(); //DIN=0DelayNo(DELAY_200NS);ADS7843_DCLKS(); //DCLK=1DelayNo(DELAY_200NS);ADS7843_DCLKC(); //DCLK=0data=data<<1;}ADS7843_DINC(); //DIN=0DelayNo(DELAY_200NS*3);ADS7843_DCLKS(); //DCL=1DelayNo(DELAY_200NS);ADS7843_DCLKC(); //DCLK=0ret_dat=0for(i=0;i<12;i++){ret_dat=ret_dat<<1;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;i<3;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显示存储空间)*/TCOLORgui_disp_buf[GUI_LCM_YMAX][GUI_LCM_XMAX];uint8constINIT_TAB[14]={0x00,//寄存器0--B(正常工作模式,即非测试模式)0xBD, //寄存器1--B(模式控制:打开显示单屏,屏蔽XSCL水平非显示周期输出,使能LCDENB,彩色8位LCD数据--无XCSL2,16位显示存储数据总线方式)159,//寄存器2--159(行字节控制)(每行显示占用的存储器字节数,即列参数)0x0E,//寄存器3--B(非节功模式,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。voidS1D13503_Init(void){volatileuint16*REG_Point;uint8i;REG_Point=(void*)S1D13503_REG;for(i=0;i<14;i++) //共初始化14个寄存器{*REG_Point=INIT_TAB[i]; //查表取出数据,然后赋值给S1D13503相应的寄存器,实现初始化REG_Point++; //指向下一寄存器}}uint8constLUT_RED_TAB[16]={0,3,5,7,9,11,13,15,0,3,5,7,9,11,13,15};uint8constLUT_GRN_TAB[16]={0,3,5,7,9,11,13,15,0,3,5,7,9,11,13,15};uint8constLUT_BLU_TAB[16]={0,6,10,15,0,6,10,15,0,6,10,15};附录二与LCM相关的GUI接口函数函数本段程序名称GUI_FillSCR(),其功能实现全屏填充,即直接使用数据填充显示缓冲区,dat表示填充的数据voidGUI_FillSCR(TCOLORdat){uint32i,j;/*填充缓冲区*/for(i=0;i<GUI_LCM_YMAX;i++) //历遍所有行{for(j=0;j<GUI_LCM_XMAX;j++) //历遍所有行{gui_disp_buf[i][j]=dat;}}/*填充LCM*/LCD_FillAll(dat);}函数GUI_Initialize(),其功能初始化GUI,包括初始化显示缓冲区,初始化LCM并清屏。voidGUI_Initialize(void){LCD_Initialize(); //初始化LCM模块工作模式,纯模式UI_FillSCR(0x00); //初始化缓冲区为0x00,并输出屏幕(清屏)}函数GUI_ClearSCR(),其功能进行清屏。voidGUI_ClearSCR(void){GUI_FillSCR(0x00);}函数GUI_Point(),其功能实现在指定位置上画点,x表示指定在列的位置,y指定点所在行的位置,color表示显示颜色(对于黑白色LCM为0时灭,为1时显示),返回值为1时表示操作成功,为0时表示操作(作失原因是指定地址超出有效范围)。uint8GUI_Point(uint32x,uint32y,TCOLORcolor){/*参数过滤*/if(x>=GUI_LCM_XMAX)return(0);if(y>=GUI_LCM_YMAX)return(0);/*设置缓冲区相应的点*/gui_disp_buf[y][x]=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变量有效。intGUI_ReadPoint(uint32x,uint32y,TCOLOR*ret){/*参数过滤*/if(x>=GUI_LCM_XMAX)return(0);if(y>=GUI_LCM_YMAX)return(0);/*取得该点颜色(用户自行更改)*/*ret=gui_disp_buf[y][x];return(1);}函数GUI_HLine(),功能实现画水平线,其中x0表示水平线起点所在列的位置,y0表示水平线起点所在行的位置,x1表示水平线终点所在列的位置,color显示颜色(对于黑白色LCM,为0时灭,为1时显示),LCM初始化对于单色、4级灰度的液晶,可通过修改此函数作图提高速度,如色LCM,可以一次更新8个点,而不需要一个点一个点的写到LCM中。voidGUI_HLine(uint32x0,uint32y0,uint32x1,TCOLORcolor){uint32bak;if(x0>x1) //对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中。voidGUI_RLine(uint32x0,uint32y0,uint32y1,TCOLORcolor){uint32bak;if(y0>y1) //对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可以是结构类型,所以此处编写了比较函数。intGUI_CmpColor(TCOLORcolor1,TCOLORcolor2){if(color1==color2)return(1);elsereturn(0);}函数GUI_CopyColor(),其功能是进行颜色值复制,color1代表目标颜色变量,color2代表源颜色变量。由于颜色类型TCOLOR可以是结构类型,所以此处编写了复制函数。voidGUI_CopyColor(TCOLOR*color1,TCOLORcolor2){*color1=color2;}附录三子程序GPIO_Initialize(),功能是初始化触摸屏和蜂鸣器的GPIOvoidGPIO_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)的变量指针uint8Calibration(void){uint16sumx,sumy;uint16x,y,i;/*获取左上角基准点*/GUI_HLine(0,19,39,BLACK);GUI_RLine(19,0,39,BLACK);sumx=0;sumy=0;for(i=0;i<16;i++){GetLCD_XY(&x,&y);sumx=sumx+x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- PDIC-NN-生命科学试剂-MCE-4874
- ent-Corey-PG-lactone-diol-生命科学试剂-MCE-9112
- 10-Chloroestra-1-4-diene-3-17-dione-10-CIEsra-生命科学试剂-MCE-1585
- 2025年度级建造师资格证书注册与建筑产业互联网服务合同
- 二零二五年度花店知识产权保护合作协议
- 二零二五年度智能化小区物业保洁人员劳动合同
- 科技教育与学生实践基地的未来发展
- 提高电动工具使用效率保障员工操作安全
- 提高商业学校实验室安全管理的措施与方法
- 三人合作经营企业合同协议书2025
- 食堂项目组织架构图
- 食材配送公司机构设置及岗位职责
- 2023年版一级建造师-水利工程实务电子教材
- 房地产工程管理 -中建八局机电工程质量通病治理办法
- GB/T 6403.4-2008零件倒圆与倒角
- GB/T 2518-2019连续热镀锌和锌合金镀层钢板及钢带
- 企业合规管理-课件
- 火电厂安全工作规程
- GB∕T 33047.1-2016 塑料 聚合物热重法(TG) 第1部分:通则
- 电力业务许可证豁免证明
- 特发性肺纤维化IPF
评论
0/150
提交评论