基于ARM的觸摸屏控制模板_第1頁
基于ARM的觸摸屏控制模板_第2頁
基于ARM的觸摸屏控制模板_第3頁
基于ARM的觸摸屏控制模板_第4頁
基于ARM的觸摸屏控制模板_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

精選優(yōu)質(zhì)文檔-----傾情為你奉上精選優(yōu)質(zhì)文檔-----傾情為你奉上專心---專注---專業(yè)專心---專注---專業(yè)精選優(yōu)質(zhì)文檔-----傾情為你奉上專心---專注---專業(yè)基于ARM的觸摸屏控制摘要:本文介紹了基于ARM的觸摸屏控制的設(shè)計(jì)思路、原理和實(shí)現(xiàn)方法。硬件電路主要由PHILIPS公司的ARM7TDMI-S微控制器LPC2290,F(xiàn)M7843控制器和SID13503控制器構(gòu)成。利用C語言編寫驅(qū)動(dòng)和用戶程序,通過觸摸屏的FM7843控制器將觸摸信號(hào)進(jìn)行A/D轉(zhuǎn)換,進(jìn)而利用ARM芯片和彩色液晶屏SID13503控制器,將觸摸動(dòng)作在液晶屏上進(jìn)行顯示,最終實(shí)現(xiàn)了觸摸屏和液晶屏的控制。該設(shè)計(jì)操作直觀、簡(jiǎn)單、功耗小、提高了人機(jī)交互的友好性。關(guān)鍵詞:觸摸屏;液晶屏;ARMTheControlofTouch-screenBasedonARMAbstract:ThispaperintroducedthedesigningofthoughtandtheachievementmethodsofthecontrolofARMtouch-screenbasedonARM.ThehardwarecircuitconsistsofARM7TDMI-SLPC2290controller,FM7843controllerandSID13503controllerwhichareallproducedbyPHILIPSCorporation.TheresearcherscomposedrivenanduserprograminClanguage,andutilizeFM7843controllerofthetouch-screentoproceedA/Dconverter,thenuseARMchipsandSID13503controllerofLCDscreentoshowtheactionoftouchingontheLCDscreen,ultimatelyrealizethecontroloftouch-screenandLCDscreen.Thisdesignisdirect-viewing、simple、aswellascostslesspowerandcanimprovethefriendlinessofhuman-computerinteraction.Keyword:touch-screen;LCD;ARM1引言隨著信息產(chǎn)業(yè)的迅猛發(fā)展,由于觸摸屏操作直觀、簡(jiǎn)單、功耗小、有利于提高人機(jī)交互的友好性等優(yōu)點(diǎn),而逐漸取代鼠標(biāo)、鍵盤,在人機(jī)交互中成為主要輸入設(shè)備[1]。因此LCD觸摸屏變得也越來越普及,并成為當(dāng)今的主流配置。而目前對(duì)觸摸屏的研究性價(jià)比有所欠缺,人機(jī)交互的友好性體現(xiàn)不夠,功耗較大,占用空間多,并且大部分來自國(guó)外且價(jià)格不菲,而本文利用PHILIPS公司的LPC2290芯片,極好的解決了這些缺點(diǎn),設(shè)計(jì)出了性價(jià)比高、屏幕顯示無閃爍、畫面切換速度快、占用空間少、方便靈活、人機(jī)交換互性好、低功耗、快速準(zhǔn)確的觸摸屏系統(tǒng)。2總體設(shè)計(jì)系統(tǒng)的總體設(shè)計(jì)框圖如圖1所示。彩色液晶屏作為人機(jī)交換的最直接的交互畫面,通過其內(nèi)部的液晶屏控制器SID13503與LPC2290芯片相連,采用并行接口進(jìn)行數(shù)據(jù)傳送,對(duì)當(dāng)前的觸摸信息進(jìn)行顯示。觸摸屏緊貼在液晶顯示屏的外表面,而觸摸屏作為一種人機(jī)交換設(shè)備,當(dāng)用戶在觸摸屏上有觸摸動(dòng)作時(shí),觸摸屏控制器通過A/D轉(zhuǎn)換,將觸摸信息傳遞給LPC2290芯片,LPC2290芯片處理信息后,控制液晶顯示器進(jìn)行相應(yīng)的畫面更新動(dòng)作,實(shí)現(xiàn)人機(jī)交換功能。圖1系統(tǒng)的總體框圖3硬件設(shè)計(jì)部分液晶是一種在一定溫度范圍內(nèi)呈現(xiàn)出即不同于固態(tài)、液態(tài),又不同于氣態(tài)的特殊物質(zhì),它即具有各向異性的晶體所特有的雙折射性,又具有液體的流動(dòng)性。液晶顯示器件(英文簡(jiǎn)寫為L(zhǎng)CD)就是利用液晶態(tài)物質(zhì)的液晶分子排列狀態(tài)在電場(chǎng)中改變而調(diào)制外界光的被動(dòng)型顯示器件[2]。液晶顯示器是平板顯示器件中的一種,具有低工作電壓、微功耗、無輻射、小體積等特點(diǎn),被廣泛應(yīng)用于各種各樣嵌入式產(chǎn)品中。本設(shè)計(jì)所用的點(diǎn)陣式圖形液晶顯示屏是LCD的一種,能夠動(dòng)態(tài)顯示圖形、漢字以及各種符號(hào)信息,為各種電子產(chǎn)品提供了友好的人機(jī)界面。隨著STN和TFT液晶顯示技術(shù)的成熟發(fā)展及制造成本的不斷降低,點(diǎn)陣式圖形液晶顯示屏也就成為了嵌入式系統(tǒng)中最主要的圖形顯示設(shè)備。本設(shè)計(jì)使用5.2英寸320x240彩色液晶屏,由于液晶屏內(nèi)部沒有液晶控制器,而LPC2290本身也沒有液晶控制器模塊,所以需要外接一個(gè)彩色液晶控制器[3.1]。彩色液晶驅(qū)動(dòng)電路如圖2所示,液晶控制器型號(hào)為SID13503,采用5V電源供電。由于SID13503是可以硬件配置的,所以設(shè)計(jì)電路時(shí)根據(jù)需要對(duì)SID13503的VD0-VD15引腳進(jìn)行設(shè)置。由于電路采用8位總線方式連接SID13503,所以SID13503的VD0沒有上拉電阻,而且SID13503的DB8-DB15引腳要接VDD(即5V)。圖2中,將SID13503的地址總線A1-A17與SID13503的AB0-AB16相連.這樣連接有一個(gè)好處,就是LPC2290可以使用16位總線方式操作SID13503(高8位數(shù)據(jù)被忽略)。SID13503有兩個(gè)片選引腳,一個(gè)是I/O片選引腳(用于內(nèi)部寄存器操作),另一個(gè)是存儲(chǔ)器片選引腳(用于顯示存儲(chǔ)器操作),所以用了IO_nCS3,IO_nCS2兩個(gè)片選信號(hào)與其連接。如圖2所示,當(dāng)IO_nCS3為低電平時(shí),信號(hào)nIOCS有效,所以內(nèi)部寄存器的起始地址為0x;當(dāng)IO_nCS2為低電平時(shí),信號(hào)nMEMCS有效,所以顯示存儲(chǔ)器的起始地址為0x[3.2]。為了使用I/O接口呈現(xiàn)直接訪問方式,故將SID13503的VD1接了一個(gè)10kΩ的上拉電阻。在接5V電源時(shí),SID13503的VIH=2V,所以可以直接使用LPC2290的總線與它相連,不需要加電平轉(zhuǎn)換電路。由于SID13503使用的電源是5V,而LPC2290的I/O電壓為3.3V,所以在數(shù)據(jù)總線上串接470Ω的保護(hù)電阻。圖2的具體詳細(xì)電路見附錄四圖2彩色液晶屏驅(qū)動(dòng)電路觸摸屏采用四線電阻式觸摸屏(示意圖如圖3所示,測(cè)量原理如圖4所示),四線電阻式觸摸屏是電阻式家族中應(yīng)用最廣、最普及的一種[4],其由兩個(gè)透明層構(gòu)成,其中一層在屏幕的左右邊緣各有一條垂直總線,另一層在屏幕的底部和頂部各有一條水平總線[5]。透明層的內(nèi)表面均涂了薄薄一層導(dǎo)電材料,當(dāng)觸摸屏表面受到的壓力(如通過觸筆或手指進(jìn)行按壓)足夠大時(shí),頂層與底層之間會(huì)產(chǎn)生接觸,從而使電阻層發(fā)生接觸。當(dāng)在Y方向的電極對(duì)上施加一確定的電壓,而X方向電極對(duì)上不加電壓時(shí),在Y平行電壓場(chǎng)中,觸點(diǎn)處的電壓值可以在X+(或X-)電極上反映出來,通過測(cè)量X+電極對(duì)地的電壓大小,便可得知觸點(diǎn)的Y坐標(biāo)值。同理,當(dāng)在X電極對(duì)上加電壓,而Y電極對(duì)上不加電壓時(shí),通過測(cè)量Y+電極的電壓,便可得知觸點(diǎn)的X坐標(biāo)。圖3四線電阻式觸摸屏結(jié)構(gòu)示意圖圖4四線電阻式觸摸屏測(cè)量原理彩色液晶屏上帶有觸摸屏(四線電阻式觸摸屏),用于檢測(cè)屏幕觸摸輸入信號(hào),有利于提高人際交互性的友好性。因此在使用觸摸屏?xí)r,須要一個(gè)A/D轉(zhuǎn)換器將模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),這里使用觸摸屏控制器FM7843來完成這一功能,其A/D轉(zhuǎn)換精度有8位和12位,本設(shè)計(jì)利用12位精度。在進(jìn)行A/D轉(zhuǎn)換后,通過SPI接口把轉(zhuǎn)換結(jié)果輸出到LPC2290。FM7843的工作電源為2.7-5V,這里FM7843使用3.3V電壓供電,A/D參考電源也是使用3.3V。FM7843接口電路如圖5所示[3.3]。圖5FM7843接口電路圖4軟件設(shè)計(jì)部分庫(kù)文件config.h中包含了對(duì)FM7843的最基本的定義,并對(duì)FM7843的控制I/O端口進(jìn)行定義,同時(shí)調(diào)整DELYA_200NS的值,可以控制系統(tǒng)時(shí)鐘的快慢,參數(shù)值越大越慢FM7843.C為FM7843驅(qū)動(dòng)程序,功能實(shí)現(xiàn)FM7843的驅(qū)動(dòng)[6]。函數(shù)DelayNo(),用來實(shí)現(xiàn)短軟件延時(shí),延時(shí)參數(shù)值越大,延時(shí)越久。函數(shù)TestDelayNo(),用來測(cè)試短軟件延時(shí),以便于產(chǎn)生正確的時(shí)序。函數(shù)FM7843_IRQR()(見附表一),對(duì)FM7843的PENIRQ引腳測(cè)量,返回當(dāng)前此引腳的電平值,返回為0表示PENIRQ為低電平狀態(tài),否則為高電平函數(shù)FM7843_IOInit(),初始化FM7843的控制I/O,初始化結(jié)果CS=1,DCLK=0,DIN=0。函數(shù)FM7843_WriteRead()(見附表一),對(duì)FM7843進(jìn)行讀寫操作。作按照FM7843規(guī)定,24Clocks,先寫8位控制數(shù)據(jù),然后讀取12位的轉(zhuǎn)換結(jié)果,返回值為讀出的數(shù)據(jù)。#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/*操作時(shí)序控制宏(即延時(shí)控制值)*/#defineDELAY_200NS 5/*實(shí)現(xiàn)短軟件延時(shí),延時(shí)參數(shù)值越大,延時(shí)越久*/voidDelayNo(uint32i){for(;i>0;i--);}/*測(cè)試短軟件延時(shí),以便于產(chǎn)生正確的時(shí)序*/voidTestDelayNo(void){while(1){FM7843_DCLKS();DelayNo(DELAY_200NS);FM7843_DCLKC();DelayNo(DELAY_200}}/*初始化FM7843的控制I/O,初始化結(jié)果CS=1,DCLK=0,DIN=0*/voidFM7843_IOInit(void){FM7843_CSS(); //CS=1FM7843_DCLKC(); //DCLK=0FM7843_DINC(); //DIN=0DelayNo(DELAY_200NS);}/*對(duì)FM7843的PENIRQ引腳測(cè)量,返回當(dāng)前此引腳的電平值,返回為0表示PENIRQ為低電平狀態(tài),否則為高電平*/FM7843_IRQR(){…….見附表一}/*對(duì)FM7843進(jìn)行讀寫操作。作按照FM7843規(guī)定,24Clocks,先寫8位控制數(shù)據(jù),然后讀取12位的轉(zhuǎn)換結(jié)果,返回值為讀出的數(shù)據(jù)。*/FM7843_WriteRead(){……見附表一}4.2液晶屏的驅(qū)動(dòng)程序設(shè)計(jì)庫(kù)文件config.h中包含了對(duì)SID13503的最基本的定義。LCDDRIVE.C是彩色液晶屏的驅(qū)動(dòng)程序,功能是實(shí)現(xiàn)彩色液晶屏的驅(qū)動(dòng)程序通過操作彩色液晶屏控制器SID13503,控制256色RGB偽彩色液晶顯示屏,其中使用LPC2290芯片控制,8位總線接口,SID13503的寄存器地址為0xxx,顯示存儲(chǔ)器的地址為0x834xxxxx[7]。顯示緩沖區(qū)的定義(見附表一)。S1D13503_Init()是彩色液晶屏控制器的寄存器初始化函數(shù)(見附表一),其功能對(duì)彩色液晶屏控制器SID13503寄存器0--D進(jìn)行初始化(使用查表方法),彩色液晶屏型號(hào)為320*240,256色單屏彩屏。其中同樣使用了函數(shù)uint8和uint16,uint8表示無符號(hào)8位整型變量,uint16無符號(hào)16位整型變量。S1D13503_LutInit()是彩色液晶屏控制器調(diào)色板的初始化函數(shù),其功能初始化彩色液晶屏控制器SID13503的調(diào)色板,其中調(diào)色板紅、綠基色設(shè)置為0、3、5、7、9、11、13、15,藍(lán)基色設(shè)置為0、6、10、15。LCD_Initialize()是LCM初始化函數(shù),功能是實(shí)現(xiàn)LCM初始化,將LCM初始化為純圖形模式,顯示起始地址為0X0000。LCD_FillAll()是LCD的填充函數(shù),功能是實(shí)現(xiàn)LCD以圖形方式進(jìn)行填充,填充起始地址為0X0000,dat為要填充的顏色數(shù)據(jù)。LCD_UpdatePoint()是LCD的畫圖函數(shù),功能是實(shí)現(xiàn)在指定位置上畫點(diǎn),并刷新某一點(diǎn),x表示指定點(diǎn)所在列的位置,y表示指定點(diǎn)所在行的位置,當(dāng)畫點(diǎn)在指定地址時(shí),實(shí)現(xiàn)其功能,當(dāng)指定地址超出有效范圍,則操作失敗。與LCM相關(guān)的GUI接口函數(shù)(見附表二)#include"config.h"{....../*定義顯示緩沖區(qū)(可根據(jù)情況定義或直接使用LCM顯示存儲(chǔ)空間)*/見附表一}/*對(duì)彩色液晶屏控制器SID13503寄存器0--D進(jìn)行初始化*/S1D13503_Init(void){......見附表一}/*初始化彩色液晶屏控制器SID13503的調(diào)色板*/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;//設(shè)置為自動(dòng)更換存取方式,設(shè)置地址*REG_Point2=LUT_RED_TAB[i]; //設(shè)置紅色調(diào)色板*REG_Point2=LUT_GRN_TAB[i]; //設(shè)置綠色調(diào)色板*REG_Point2=LUT_BLU_TAB[i]; //設(shè)置藍(lán)色調(diào)色板}}/*實(shí)現(xiàn)LCM初始化,將LCM初始化為純圖形模式*/voidLCD_Initialize(void){S1D13503_Init(); //初始化LCM工作模式S1D13503_LutInit();//初始化調(diào)色板}/*實(shí)現(xiàn)LCD以圖形方式進(jìn)行填充,填充起始地址為0X0000,dat為要填充的顏色數(shù)據(jù)*/voidLCD_FillAll(TCOLORdat){volatileuint16*DAT_Point;uint32i,j;/*開始復(fù)制填充數(shù)據(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;}}}/*實(shí)現(xiàn)在指定位置上畫點(diǎn),并刷新某一點(diǎn),x表示指定點(diǎn)所在列的位置,y表示指定點(diǎn)所在行的位置,當(dāng)畫點(diǎn)在指定地址時(shí),實(shí)現(xiàn)其功能,當(dāng)指定地址超出有效范圍,則操作失敗*/voidLCD_UpdatePoint(uint32x,uint32y){volatileuint16*DAT_Point;uint32addr;uint32x1,y1;x1=GUI_LCM_XMAX-x-1;//對(duì)于9111屏有效y1=GUI_LCM_YMAX-y-1;//對(duì)于9111屏有效/*找出目標(biāo)地址*/addr=y1*GUI_LCM_XMAX+x1;DAT_Point=(void*)S1D13503_DAT;DAT_Point+=addr;*DAT_Point=gui_disp_buf[y][x]; //輸出數(shù)據(jù)}{...../*與LCM相關(guān)的GUI接口函數(shù)*/見附表二}本程序?qū)崿F(xiàn)讀取觸摸屏的動(dòng)作,并顯示一個(gè)方點(diǎn)在對(duì)應(yīng)的液晶屏幕上。程序運(yùn)行時(shí),首先進(jìn)行必要的初始化[8],即初始化GPIO、初始化LCM、將液晶屏片選信號(hào)CS置低、填充液晶屏幕背景色并校準(zhǔn)屏幕,然后判斷是否有觸摸動(dòng)作,如沒有則繼續(xù)等待,直到有觸摸輸入時(shí),讀取觸摸動(dòng)作并判斷觸摸是否有效,如無效則返回繼續(xù)等待觸摸,若有效,蜂鳴器響一聲,獲取當(dāng)前觸摸坐標(biāo)并進(jìn)行校準(zhǔn),最后將觸摸結(jié)果在液晶屏上顯示。流程圖如圖6所示。圖6用戶程序流程圖#include"config.h"voidGPIO_Initialize(void);voidGetLCD_XY(uint16*vx,uint16*vy);voidDelayNS(uint32dly);uint8Calibration(void);uint16errx1,erry1,errx2,erry2;//一般存放基準(zhǔn)點(diǎn)坐標(biāo)uint16diffx,diffy;//一般存放基準(zhǔn)點(diǎn)坐標(biāo)差值uint16x,y;//一般存放當(dāng)前坐標(biāo)本段程序名稱main,其為程序的主函數(shù),功能包括GPIO和LCM的初始化,填充顏色,校準(zhǔn)屏幕,獲取當(dāng)前坐標(biāo),并進(jìn)行顯示[9]。intmain(void){GPIO_Initialize();//初始化GPIOGPIOGUI_Initialize(); //初始化LCMGUI_FillSCR(WHITE);//填充白色背景while(Calibration()!=1);//校準(zhǔn)屏幕while(1){GetLCD_XY(&x,&y);//獲取當(dāng)前坐標(biāo)x=(x-errx1)*280/diffx+20;//通過基準(zhǔn)點(diǎn)校準(zhǔn)xy=(y-erry1)*200/diffy+20;//通過基準(zhǔn)點(diǎn)校準(zhǔn)y/*通過點(diǎn)函數(shù)構(gòu)成一個(gè)方點(diǎn)畫在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){……見附錄三}函數(shù)Calibration(),功能是獲取校準(zhǔn)基準(zhǔn)點(diǎn)坐標(biāo),其中uint16*errx,用于保存校準(zhǔn)點(diǎn)x坐標(biāo)(LCD)的變量指針,uint16*erry,用于保存校準(zhǔn)點(diǎn)y坐標(biāo)(LCD)的變量指針uint8Calibration(void){……見附錄三}函數(shù)GetLCD_XY(),功能是讀取觸摸屏上觸摸點(diǎn)的坐標(biāo),在讀取過程中,程序會(huì)一直等待,直到有觸摸輸入[10]。其原理是先通測(cè)量y軸的觸摸輸入,判斷是否有觸摸動(dòng)作。如果有,則行6次數(shù)據(jù)采集,并進(jìn)行去極值平均濾波處理。最后還要判斷觸摸輸入是否合法,只有當(dāng)觸摸輸入合法時(shí)才返回。其中,x用于保存觸摸點(diǎn)x坐標(biāo)(LCD)的變量指針,y用于保存觸摸點(diǎn)y坐標(biāo)(LCD)的變量指針。voidGetLCD_XY(uint16*vx,uint16*vy){……見附錄三}本程序名稱為DelayNS(),功能是實(shí)現(xiàn)長(zhǎng)軟件延時(shí)(dly毫秒,與程序運(yùn)行速度有關(guān)),消除震顫,其中dly為延時(shí)參數(shù),值越大,延時(shí)越久。voidDelayNS(uint32dly){……見附錄三}函數(shù)Beep(),其功能實(shí)現(xiàn)控制蜂鳴器響一聲。voidBeep(void){……見附錄三}五總結(jié)本設(shè)計(jì)使用PHILIPS公司的LPC2290的ARM單片機(jī),從觸摸屏和液晶顯示器的性能方面為出發(fā)點(diǎn),通過C語言編程,來設(shè)計(jì)實(shí)現(xiàn)的四線電阻式觸摸屏產(chǎn)品在實(shí)際應(yīng)用中得到了很好的效果,實(shí)現(xiàn)了先進(jìn)的觸摸屏顯示、控制技術(shù),改善了傳統(tǒng)的設(shè)備顯示與控制方式,性價(jià)比高,低功耗,提高了人機(jī)交互的友好性,使設(shè)備更加人性化,有很強(qiáng)的應(yīng)用前景,相信其會(huì)變得也越來越普及,并成為當(dāng)今的主流配置。參考文獻(xiàn)[1]歐慶于等.基于S3C44B0X+uClinux的觸摸屏設(shè)計(jì).計(jì)算機(jī)與數(shù)字工程[J],2005,12(3):165.[2]周立功等.ARM與嵌入式系基礎(chǔ)教程[M].北京:北京航空航天大學(xué)出版社,2005:379-381.[3]周立功等.ARM嵌入式系統(tǒng)實(shí)驗(yàn)教程(三)[M].北京:北京航空航天大學(xué)出版社,2005:21-22.[4]陳辰等.ARM芯片S3C2410觸摸屏驅(qū)動(dòng)的研究與開發(fā).科學(xué)技術(shù)與工程[J],2006,3(2):327.[5]王洪等.ARMHMS30C7202與觸摸屏接口電路的設(shè).計(jì)微計(jì)算機(jī)信息[J],2007,2(3):166.[6]馬忠梅.單片機(jī)的C語言應(yīng)用程序設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2003:120-125.[7]吳明暉等.基于ARM的嵌入式系統(tǒng)開發(fā)與應(yīng)用[M].北京:人民郵電出版社,2004:72-74.[8]劉顯榮.基于S3C2410的觸摸屏控制.微計(jì)算機(jī)信息[J],2007,11(3):185.[9]杜春雷.ARM體系結(jié)構(gòu)與編程[M].北京:清華大學(xué)出版社,2003:61-62.[10]壇浩強(qiáng).C程序設(shè)計(jì)(第二版)[M].北京:清華大學(xué)出版社,1999:107-108.附錄一函數(shù)ADS7843_IRQR(),實(shí)現(xiàn)對(duì)ADS7843的PENIRQ引腳測(cè)量,返回當(dāng)前此引腳的電平值。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);}函數(shù)ADS7843_WriteRead(),功能是對(duì)ADS7843進(jìn)行讀寫操作。uint16ADS7843_WriteRead(uint8data){uint8i;uint16ret_dat;data=data|0x80; //設(shè)置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"/*定義顯示緩沖區(qū)(可根據(jù)情況定義或直接使用LCM顯示存儲(chǔ)空間)*/TCOLORgui_disp_buf[GUI_LCM_YMAX][GUI_LCM_XMAX];uint8constINIT_TAB[14]={0x00,//寄存器0--B(正常工作模式,即非測(cè)試模式)0xBD, //寄存器1--B(模式控制:打開顯示單屏,屏蔽XSCL水平非顯示周期輸出,使能LCDENB,彩色8位LCD數(shù)據(jù)--無XCSL2,16位顯示存儲(chǔ)數(shù)據(jù)總線方式)159,//寄存器2--159(行字節(jié)控制)(每行顯示占用的存儲(chǔ)器字節(jié)數(shù),即列參數(shù))0x0E,//寄存器3--B(非節(jié)功模式,256彩色方式)239,//寄存器4--239(總行數(shù))0,//寄存器5--0(WF翻轉(zhuǎn)周期,為0時(shí)表示每一幀WF輸出翻轉(zhuǎn)一)0x00, //寄存器6--00H(第一屏顯示RAM地址低8位)0x00,//寄存器7--00H(第一屏顯示RAM地址高8位)0x00, //寄存器8--00H(第二屏顯示RAM地址低8位)0x00,//寄存器9--00H(第二屏顯示RAM地址高8位)239,//寄存器A--239(顯示一區(qū)占用行數(shù))0, //寄存器B--0(顯示一區(qū)占用行數(shù),高2位)10, //寄存器C--10(水平默認(rèn)不顯示周期)0 //寄存器D--0(顯示域冗余寬度,正常操作模式)};函數(shù)S1D13503_Init(),功能是初始化S1D13503。voidS1D13503_Init(void){volatileuint16*REG_Point;uint8i;REG_Point=(void*)S1D13503_REG;for(i=0;i<14;i++) //共初始化14個(gè)寄存器{*REG_Point=INIT_TAB[i]; //查表取出數(shù)據(jù),然后賦值給S1D13503相應(yīng)的寄存器,實(shí)現(xiàn)初始化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相關(guān)的GUI接口函數(shù)函數(shù)本段程序名稱GUI_FillSCR(),其功能實(shí)現(xiàn)全屏填充,即直接使用數(shù)據(jù)填充顯示緩沖區(qū),dat表示填充的數(shù)據(jù)voidGUI_FillSCR(TCOLORdat){uint32i,j;/*填充緩沖區(qū)*/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);}函數(shù)GUI_Initialize(),其功能初始化GUI,包括初始化顯示緩沖區(qū),初始化LCM并清屏。voidGUI_Initialize(void){LCD_Initialize(); //初始化LCM模塊工作模式,純模式UI_FillSCR(0x00); //初始化緩沖區(qū)為0x00,并輸出屏幕(清屏)}函數(shù)GUI_ClearSCR(),其功能進(jìn)行清屏。voidGUI_ClearSCR(void){GUI_FillSCR(0x00);}函數(shù)GUI_Point(),其功能實(shí)現(xiàn)在指定位置上畫點(diǎn),x表示指定在列的位置,y指定點(diǎn)所在行的位置,color表示顯示顏色(對(duì)于黑白色LCM為0時(shí)滅,為1時(shí)顯示),返回值為1時(shí)表示操作成功,為0時(shí)表示操作(作失原因是指定地址超出有效范圍)。uint8GUI_Point(uint32x,uint32y,TCOLORcolor){/*參數(shù)過濾*/if(x>=GUI_LCM_XMAX)return(0);if(y>=GUI_LCM_YMAX)return(0);/*設(shè)置緩沖區(qū)相應(yīng)的點(diǎn)*/gui_disp_buf[y][x]=color;/*刷新顯示*/LCD_UpdatePoint(x,y);return(1);}函數(shù)GUI_ReadPoint(),其功能讀取指定點(diǎn)的顏色,x表示指定點(diǎn)在列的位置,y指定點(diǎn)所在行的位置,ret用于保存顏色值的指針,當(dāng)出口參數(shù)返回0時(shí)表示指定地址超出有效范圍。對(duì)于單色,設(shè)置ret的d0位為1或4級(jí)灰度則為d0、d1有效位RGB則d0--d7有效,RGB結(jié)構(gòu)則R、G、B變量有效。intGUI_ReadPoint(uint32x,uint32y,TCOLOR*ret){/*參數(shù)過濾*/if(x>=GUI_LCM_XMAX)return(0);if(y>=GUI_LCM_YMAX)return(0);/*取得該點(diǎn)顏色(用戶自行更改)*/*ret=gui_disp_buf[y][x];return(1);}函數(shù)GUI_HLine(),功能實(shí)現(xiàn)畫水平線,其中x0表示水平線起點(diǎn)所在列的位置,y0表示水平線起點(diǎn)所在行的位置,x1表示水平線終點(diǎn)所在列的位置,color顯示顏色(對(duì)于黑白色LCM,為0時(shí)滅,為1時(shí)顯示),LCM初始化對(duì)于單色、4級(jí)灰度的液晶,可通過修改此函數(shù)作圖提高速度,如色LCM,可以一次更新8個(gè)點(diǎn),而不需要一個(gè)點(diǎn)一個(gè)點(diǎn)的寫到LCM中。voidGUI_HLine(uint32x0,uint32y0,uint32x1,TCOLORcolor){uint32bak;if(x0>x1) //對(duì)x0、x1大小進(jìn)行排列,以便畫圖{bak=x1;x1=x0;x0=bak;}Do{GUI_Point(x0,y0,color); //逐點(diǎn)顯示,描出水平線x0++;}while(x1>=x0);}函數(shù)GUI_RLine(),功能是實(shí)現(xiàn)畫垂直線。其中x0表示垂直線起點(diǎn)所在列的位置,y0表示垂直線起點(diǎn)所在行的位置,y1表示垂直線終點(diǎn)所在行的位置,對(duì)于單色、4級(jí)灰度的液晶,可通過修改此函數(shù)作圖提高速度,如色LCM,可以一次更新8個(gè)點(diǎn),而不需要一個(gè)點(diǎn)一個(gè)點(diǎn)的寫到LCM中。voidGUI_RLine(uint32x0,uint32y0,uint32y1,TCOLORcolor){uint32bak;if(y0>y1) //對(duì)y0、y1大小進(jìn)行排列,以便畫圖{bak=y1;y1=y0;y0=bak;}do{GUI_Point(x0,y0,color); //逐點(diǎn)顯示,描出垂直線y0++;}while(y1>=y0); }函數(shù)GUI_CmpColor(),其功能是判斷顏色值是否一致,color1表示顏色值1,color2表示顏色值2,當(dāng)出口參數(shù)返回1表示相同,返回0表示不相同。由于顏色類型TCOLOR可以是結(jié)構(gòu)類型,所以此處編寫了比較函數(shù)。intGUI_CmpColor(TCOLORcolor1,TCOLORcolor2){if(color1==color2)return(1);elsereturn(0);}函數(shù)GUI_CopyColor(),其功能是進(jìn)行顏色值復(fù)制,color1代表目標(biāo)顏色變量,color2代表源顏色變量。由于顏色類型TCOLOR可以是結(jié)構(gòu)類型,所以此處編寫了復(fù)制函數(shù)。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;}函數(shù)Calibration(),功能是獲取校準(zhǔn)基準(zhǔn)點(diǎn)坐標(biāo),其中uint16*errx,用于保存校準(zhǔn)點(diǎn)x坐標(biāo)(LCD)的變量指針,uint16*erry,用于保存校準(zhǔn)點(diǎn)y坐標(biāo)(LCD)的變量指針uint8Calibration(void){uint16sumx,sumy;uint16x,y,i;/*獲取左上角基準(zhǔn)點(diǎn)*/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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論