




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、基于ARM的觸摸屏控制 摘要:本文介紹了基于ARM的觸摸屏控制的設(shè)計(jì)思路、原理和實(shí)現(xiàn)方法。硬件電路主要由PHILIPS公司的ARM7TDMI-S微控制器LPC2290,F(xiàn)M7843控制器和SID13503控制器構(gòu)成。利用C語言編寫驅(qū)動(dòng)和用戶程序,通過觸摸屏的FM7843控制器將觸摸信號進(jìn)行A/D轉(zhuǎn)換,進(jìn)而利用ARM芯片和彩色液晶屏SID13503控制器,將觸摸動(dòng)作在液晶屏上進(jìn)行顯示,最終實(shí)現(xiàn)了觸摸屏和液晶屏的控制。該設(shè)計(jì)操作直觀、簡單、功耗小、提高了人機(jī)交互的友好性。關(guān)鍵詞:觸摸屏; 液晶屏; ARM The Control of Touch-screen Based on ARM Abstr
2、act: 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 co
3、mpose 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 desi
4、gn 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 總體設(shè)計(jì)33 硬件設(shè)計(jì)部分33.1 彩色液晶顯示器33.2 彩色液晶屏驅(qū)動(dòng)電路及SID13503控制器 43.3 觸摸屏原理.53.4 觸摸屏驅(qū)動(dòng)電路及FM7843控制器54 軟件設(shè)計(jì)部分.64.1 觸摸屏驅(qū)動(dòng)程序設(shè)計(jì).64.2 彩色液晶屏驅(qū)動(dòng)程序設(shè)計(jì)84.3 用戶程序.
5、115 總結(jié).13參考文獻(xiàn)14附錄一15附錄二18附錄三22附錄四261 引言隨著信息產(chǎn)業(yè)的迅猛發(fā)展,由于觸摸屏操作直觀、簡單、功耗小、有利于提高人機(jī)交互的友好性等優(yōu)點(diǎn),而逐漸取代鼠標(biāo)、鍵盤,在人機(jī)交互中成為主要輸入設(shè)備1。因此LCD觸摸屏變得也越來越普及,并成為當(dāng)今的主流配置。而目前對觸摸屏的研究性價(jià)比有所欠缺,人機(jī)交互的友好性體現(xiàn)不夠,功耗較大,占用空間多,并且大部分來自國外且價(jià)格不菲,而本文利用PHILIPS公司的LPC2290芯片,極好的解決了這些缺點(diǎn),設(shè)計(jì)出了性價(jià)比高、屏幕顯示無閃爍、畫面切換速度快、占用空間少、方便靈活、人機(jī)交換互性好、低功耗、快速準(zhǔn)確的觸摸屏系統(tǒng)。2 總體設(shè)計(jì)系統(tǒng)
6、的總體設(shè)計(jì)框圖如圖1所示。彩色液晶屏作為人機(jī)交換的最直接的交互畫面,通過其內(nèi)部的液晶屏控制器SID13503與LPC2290芯片相連,采用并行接口進(jìn)行數(shù)據(jù)傳送,對當(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ì)部分 3.1 彩色液晶顯示器液晶是一種在一定溫度范圍內(nèi)呈現(xiàn)出即不同于固態(tài)、液態(tài),又不同于氣態(tài)的特殊物質(zhì),它即具有各向異性的晶體所特有的雙折射
7、性,又具有液體的流動(dòng)性。液晶顯示器件(英文簡寫為LCD)就是利用液晶態(tài)物質(zhì)的液晶分子排列狀態(tài)在電場中改變而調(diào)制外界光的被動(dòng)型顯示器件2。液晶顯示器是平板顯示器件中的一種,具有低工作電壓、微功耗、無輻射、小體積等特點(diǎn),被廣泛應(yīng)用于各種各樣嵌入式產(chǎn)品中。本設(shè)計(jì)所用的點(diǎn)陣式圖形液晶顯示屏是LCD的一種,能夠動(dòng)態(tài)顯示圖形、漢字以及各種符號信息,為各種電子產(chǎn)品提供了友好的人機(jī)界面。隨著STN和TFT液晶顯示技術(shù)的成熟發(fā)展及制造成本的不斷降低,點(diǎn)陣式圖形液晶顯示屏也就成為了嵌入式系統(tǒng)中最主要的圖形顯示設(shè)備。3.2 彩色液晶屏驅(qū)動(dòng)電路及SID13503控制器本設(shè)計(jì)使用5.2英寸320x240彩色液晶屏,由于
8、液晶屏內(nèi)部沒有液晶控制器,而LPC2290本身也沒有液晶控制器模塊,所以需要外接一個(gè)彩色液晶控制器3.1。彩色液晶驅(qū)動(dòng)電路如圖2所示,液晶控制器型號為SID13503,采用5V電源供電。由于SID13503是可以硬件配置的,所以設(shè)計(jì)電路時(shí)根據(jù)需要對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位總線方式操
9、作SID13503(高8位數(shù)據(jù)被忽略)。 SID13503有兩個(gè)片選引腳,一個(gè)是I/O片選引腳(用于內(nèi)部寄存器操作),另一個(gè)是存儲(chǔ)器片選引腳(用于顯示存儲(chǔ)器操作),所以用了IO_nCS3,IO_nCS2兩個(gè)片選信號與其連接。如圖2所示,當(dāng)IO_nCS3 為低電平時(shí),信號nIOCS有效,所以內(nèi)部寄存器的起始地址為0x83800000;當(dāng)IO_nCS2為低電平時(shí),信號nMEMCS 有效,所以顯示存儲(chǔ)器的起始地址為0x834000003.2。為了使用I/O接口呈現(xiàn)直接訪問方式,故將SID13503的VD1接了一個(gè)10k的上拉電阻。在接5V電源時(shí),SID13503的VIH2V,所以可以直接使用LPC2
10、290的總線與它相連,不需要加電平轉(zhuǎn)換電路。由于SID13503使用的電源是5V,而LPC2290的I/O電壓為3.3V,所以在數(shù)據(jù)總線上串接470的保護(hù)電阻。圖2的具體詳細(xì)電路見附錄四圖2 彩色液晶屏驅(qū)動(dòng)電路3.3 觸摸屏原理觸摸屏采用四線電阻式觸摸屏(示意圖如圖3所示,測量原理如圖4所示),四線電阻式觸摸屏是電阻式家族中應(yīng)用最廣、最普及的一種4,其由兩個(gè)透明層構(gòu)成,其中一層在屏幕的左右邊緣各有一條垂直總線,另一層在屏幕的底部和頂部各有一條水平總線5。透明層的內(nèi)表面均涂了薄薄一層導(dǎo)電材料,當(dāng)觸摸屏表面受到的壓力(如通過觸筆或手指進(jìn)行按壓)足夠大時(shí),頂層與底層之間會(huì)產(chǎn)生接觸,從而使電阻層發(fā)生接
11、觸。當(dāng)在Y方向的電極對上施加一確定的電壓,而X方向電極對上不加電壓時(shí),在Y平行電壓場中,觸點(diǎn)處的電壓值可以在X(或X)電極上反映出來,通過測量X電極對地的電壓大小,便可得知觸點(diǎn)的Y坐標(biāo)值。同理,當(dāng)在X電極對上加電壓,而Y電極對上不加電壓時(shí),通過測量Y電極的電壓,便可得知觸點(diǎn)的X坐標(biāo)。 圖3 四線電阻式觸摸屏結(jié)構(gòu)示意圖 圖4 四線電阻式觸摸屏測量原理3.4 觸摸屏驅(qū)動(dòng)電路及FM7843控制器彩色液晶屏上帶有觸摸屏(四線電阻式觸摸屏),用于檢測屏幕觸摸輸入信號,有利于提高人際交互性的友好性。因此在使用觸摸屏?xí)r,須要一個(gè)A/D轉(zhuǎn)換器將模擬信號轉(zhuǎn)換成數(shù)字信號,這里使用觸摸屏控制器FM7843來完成這一
12、功能,其A/D轉(zhuǎn)換精度有8位和12位,本設(shè)計(jì)利用12位精度。在進(jìn)行A/D轉(zhuǎn)換后,通過SPI接口把轉(zhuǎn)換結(jié)果輸出到LPC2290。FM7843的工作電源為2.75V,這里FM7843使用3.3V電壓供電,A/D參考電源也是使用3.3V。FM7843接口電路如圖5所示3.3。 圖5 FM7843接口電路圖4軟件設(shè)計(jì)部分4.1 觸摸屏的驅(qū)動(dòng)程序設(shè)計(jì)庫文件config.h中包含了對FM7843的最基本的定義,并對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ù)Dela
13、yNo(),用來實(shí)現(xiàn)短軟件延時(shí),延時(shí)參數(shù)值越大,延時(shí)越久。函數(shù)TestDelayNo(),用來測試短軟件延時(shí),以便于產(chǎn)生正確的時(shí)序。函數(shù)FM7843_IRQR()(見附表一),對FM7843的PENIRQ引腳測量,返回當(dāng)前此引腳的電平值, 返回為0表示PENIRQ為低電平狀態(tài),否則為高電平函數(shù)FM7843_IOInit(),初始化FM7843的控制I/O,初始化結(jié)果CS=1,DCLK=0,DIN=0。函數(shù)FM7843_WriteRead()(見附表一),對FM7843進(jìn)行讀寫操作。作按照FM7843規(guī)定,24Clocks,先寫8位控制數(shù)據(jù),然后讀取12位的轉(zhuǎn)換結(jié)果,返回值為讀出的數(shù)據(jù)。 #in
14、clude "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
15、()IO2CLR = FM7843_DCLK/* 操作時(shí)序控制宏(即延時(shí)控制值) */#define DELAY_200NS5 /*實(shí)現(xiàn)短軟件延時(shí),延時(shí)參數(shù)值越大,延時(shí)越久*/void DelayNo(uint32 i) for(; i>0; i-);/*測試短軟件延時(shí),以便于產(chǎn)生正確的時(shí)序*/void TestDelayNo(void) while(1) FM7843_DCLKS();DelayNo(DELAY_200NS);FM7843_DCLKC();DelayNo(DELAY_200/*初始化FM7843的控制I/O,初始化結(jié)果CS=1,DCLK=0,DIN=0 */ void
16、FM7843_IOInit(void) FM7843_CSS(); / CS = 1FM7843_DCLKC(); / DCLK = 0FM7843_DINC(); / DIN = 0DelayNo(DELAY_200NS);/*對FM7843的PENIRQ引腳測量,返回當(dāng)前此引腳的電平值, 返回為0表示PENIRQ為低電平狀態(tài),否則為高電平*/FM7843_IRQR() .見附表一/*對FM7843進(jìn)行讀寫操作。作按照FM7843規(guī)定,24Clocks,先寫8位控制數(shù)據(jù),然后讀取12位的轉(zhuǎn)換結(jié)果,返回值為讀出的數(shù)據(jù)。*/FM7843_WriteRead()見附表一4.2 彩色液晶屏的驅(qū)動(dòng)程序
17、設(shè)計(jì)庫文件config.h中包含了對SID13503的最基本的定義。LCDDRIVE.C是彩色液晶屏的驅(qū)動(dòng)程序,功能是實(shí)現(xiàn)彩色液晶屏的驅(qū)動(dòng)程序通過操作彩色液晶屏控制器SID13503,控制256色RGB偽彩色液晶顯示屏,其中使用LPC2290芯片控制,8位總線接口,SID13503的寄存器地址為0x838000xx,顯示存儲(chǔ)器的地址為0x834xxxxx7。顯示緩沖區(qū)的定義(見附表一)。S1D13503_Init()是彩色液晶屏控制器的寄存器初始化函數(shù)(見附表一),其功能對彩色液晶屏控制器SID13503寄存器0-D進(jìn)行初始化(使用查表方法),彩色液晶屏型號為320*240 ,256色單屏彩屏
18、。其中同樣使用了函數(shù)uint8和 uint16,uint8表示無符號8位整型變量 ,uint16無符號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為要填充的
19、顏色數(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ǔ)空間) */見附表一/* 對彩色液晶屏控制器SID13503寄存器0-D進(jìn)行初始化*/S1D13503_Init(void). 見附表一/*初始化彩色液晶屏控制器SID13503的調(diào)色板*/void S1D135
20、03_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; i<16; i+) *REG_Point1 = i; / 設(shè)置為自動(dòng)更換存取方式,設(shè)置地址*REG_Point2 = LUT_RED_TABi; / 設(shè)置紅色調(diào)色板*REG_Point2 = LU
21、T_GRN_TABi; / 設(shè)置綠色調(diào)色板*REG_Point2 = LUT_BLU_TABi; / 設(shè)置藍(lán)色調(diào)色板 /* 實(shí)現(xiàn)LCM初始化,將LCM初始化為純圖形模式*/void LCD_Initialize(void) S1D13503_Init(); / 初始化LCM工作模式S1D13503_LutInit(); / 初始化調(diào)色板/* 實(shí)現(xiàn)LCD以圖形方式進(jìn)行填充,填充起始地址為0X0000,dat為要填充的顏色數(shù)據(jù)*/void LCD_FillAll(TCOLOR dat) volatile uint16 *DAT_Point; uint32 i, j; /* 開始復(fù)制填充數(shù)據(jù) */D
22、AT_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)指定地址超出有效范圍,則操作失敗*/void LCD_UpdatePoint(uint32 x, uint32 y) volatile uint16 *DAT_Point;uint32 ad
23、dr;uint32 x1, y1; x1 = GUI_LCM_XMAX - x - 1; / 對于9111屏有效y1 = GUI_LCM_YMAX - y - 1; / 對于9111屏有效/* 找出目標(biāo)地址 */addr = y1*GUI_LCM_XMAX + x1;DAT_Point = (void *) S1D13503_DAT;DAT_Point += addr;*DAT_Point = gui_disp_bufyx;/ 輸出數(shù)據(jù) . /*與LCM相關(guān)的GUI接口函數(shù)*/見附表二4.3 用戶程序本程序?qū)崿F(xiàn)讀取觸摸屏的動(dòng)作,并顯示一個(gè)方點(diǎn)在對應(yīng)的液晶屏幕上。程序運(yùn)行時(shí),首先進(jìn)行必要的初始化
24、8,即初始化GPIO、初始化LCM、將液晶屏片選信號CS置低、填充液晶屏幕背景色并校準(zhǔn)屏幕,然后判斷是否有觸摸動(dòng)作,如沒有則繼續(xù)等待,直到有觸摸輸入時(shí),讀取觸摸動(dòng)作并判斷觸摸是否有效,如無效則返回繼續(xù)等待觸摸,若有效,蜂鳴器響一聲,獲取當(dāng)前觸摸坐標(biāo)并進(jìn)行校準(zhǔn),最后將觸摸結(jié)果在液晶屏上顯示。流程圖如圖6所示。圖6 用戶程序流程圖#include "config.h"void GPIO_Initialize(void);void GetLCD_XY(uint16 *vx, uint16 *vy);void DelayNS(uint32 dly);uint8 Calibratio
25、n(void);uint16 errx1, erry1, errx2, erry2; / 一般存放基準(zhǔn)點(diǎn)坐標(biāo)uint16 diffx, diffy; / 一般存放基準(zhǔn)點(diǎn)坐標(biāo)差值uint16 x, y; / 一般存放當(dāng)前坐標(biāo)本段程序名稱main,其為程序的主函數(shù),功能包括GPIO和LCM的初始化,填充顏色,校準(zhǔn)屏幕,獲取當(dāng)前坐標(biāo),并進(jìn)行顯示9。int main (void) GPIO_Initialize(); / 初始化GPIOGPIO GUI_Initialize(); / 初始化LCM GUI_FillSCR(WHITE); / 填充白色背景 while(Calibration() !=
26、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)
27、;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);return 0;子程序GPIO_Initialize(),功能是初始化觸摸屏和蜂鳴器的GPIOvoid GPIO_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)的變量指針uint8 Calibrat
28、ion(void) 見附錄三函數(shù)GetLCD_XY(),功能是讀取觸摸屏上觸摸點(diǎn)的坐標(biāo),在讀取過程中,程序會(huì)一直等待,直到有觸摸輸入10。其原理是先通測量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)的變量指針。void GetLCD_XY(uint16 *vx, uint16 *vy) 見附錄三本程序名稱為DelayNS(),功能是實(shí)現(xiàn)長軟件延時(shí)(dly毫秒,與程序運(yùn)行速度有關(guān)),消除震顫,其中dly為延時(shí)參數(shù)
29、,值越大,延時(shí)越久。void DelayNS(uint32 dly) 見附錄三 函數(shù)Beep(),其功能實(shí)現(xiàn)控制蜂鳴器響一聲。void Beep(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+uCl
30、inux的觸摸屏設(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 王洪等. ARM HMS30C7202與觸摸屏接口電路的設(shè).計(jì)微計(jì)算機(jī)信息J, 2007,2(3):166.6 馬忠梅. 單片機(jī)的C語言應(yīng)用程序設(shè)計(jì)M.北京:北京航空航天大學(xué)出版社,200
31、3: 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)對ADS7843的PENIRQ引腳測量,返回當(dāng)前此引腳的電平值。uint8 ADS7843_IRQR(void) uint8 dat3;DelayNo
32、(1);if(IO0PIN&ADS7843_IRQ) dat0 = 1;else dat0 = 0;if(IO0PIN&ADS7843_IRQ) dat1 = 1;else dat1 = 0;if(IO0PIN&ADS7843_IRQ) dat2 = 1;else dat2 = 0;if(dat0 + dat1 + dat2) > 1) return(1);else return(0);函數(shù)ADS7843_WriteRead(),功能是對ADS7843進(jìn)行讀寫操作。uint16 ADS7843_WriteRead(uint8 data) uint8 i;uint1
33、6 ret_dat;data = data|0x80; / 設(shè)置S位ADS7843_IOInit();ADS7843_CSC(); / CS = 0for(i=0; i<8; 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 = data<<1;ADS7843
34、_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);ADS784
35、3_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ǔ)空間) */TCOL
36、OR gui_disp_bufGUI_LCM_YMAXGUI_LCM_XMAX;uint8 const INIT_TAB14 = 0x00, / 寄存器0 - 00000000B (正常工作模式,即非測試模式)0xBD, / 寄存器1 - 10111101B (模式控制:打開顯示單屏,屏蔽XSCL水平非顯示周期輸出,使能LCDENB,彩色8位LCD數(shù)據(jù)-無XCSL2,16位顯示存儲(chǔ)數(shù)據(jù)總線方式) 159, / 寄存器2 - 159 (行字節(jié)控制)(每行顯示占用的存儲(chǔ)器字節(jié)數(shù),即列參數(shù))0x0E, / 寄存器3 - 00001110B (非節(jié)功模式,256彩色方式)239, / 寄存器4 - 2
37、39 (總行數(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ù)
38、S1D13503_Init(),功能是初始化S1D13503。void S1D13503_Init(void) volatile uint16 *REG_Point; uint8 i; REG_Point = (void *) S1D13503_REG;for(i=0; i<14; i+) / 共初始化14個(gè)寄存器 *REG_Point = INIT_TABi; / 查表取出數(shù)據(jù),然后賦值給S1D13503相應(yīng)的寄存器,實(shí)現(xiàn)初始化REG_Point+; / 指向下一寄存器uint8 const LUT_RED_TAB16 = 0, 3, 5, 7, 9, 11, 13, 15, 0, 3
39、, 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相關(guān)的GUI接口函數(shù)函數(shù)本段程序名稱GUI_FillSCR(),其功能實(shí)現(xiàn)全屏填充,即直接使用數(shù)據(jù)填充顯示緩沖區(qū),dat表示填充的數(shù)據(jù)void GUI_FillSCR(TCOLOR dat) uint32 i, j; /* 填充緩沖區(qū) */for
40、(i=0; i<GUI_LCM_YMAX; i+) / 歷遍所有行 for(j=0; j<GUI_LCM_XMAX; j+) / 歷遍所有行 gui_disp_bufij = dat; /* 填充LCM */ LCD_FillAll(dat);函數(shù)GUI_Initialize(),其功能初始化GUI,包括初始化顯示緩沖區(qū),初始化LCM并清屏。void GUI_Initialize(void) LCD_Initialize(); / 初始化LCM模塊工作模式,純模式UI_FillSCR(0x00); / 初始化緩沖區(qū)為0x00,并輸出屏幕 (清屏) 函數(shù)GUI_ClearSCR(),
41、其功能進(jìn)行清屏。void GUI_ClearSCR(void) GUI_FillSCR(0x00);函數(shù)GUI_Point(),其功能實(shí)現(xiàn)在指定位置上畫點(diǎn),x表示指定在列的位置,y指定點(diǎn)所在行的位置,color表示顯示顏色(對于黑白色LCM為0時(shí)滅,為1時(shí)顯示) ,返回值為1時(shí)表示操作成功,為0時(shí)表示操作(作失原因是指定地址超出有效范圍)。uint8 GUI_Point(uint32 x, uint32 y, TCOLOR color) /* 參數(shù)過濾 */if(x>=GUI_LCM_XMAX) return(0);if(y>=GUI_LCM_YMAX) return(0); /*
42、 設(shè)置緩沖區(qū)相應(yīng)的點(diǎn) */gui_disp_bufyx = color;/* 刷新顯示 */LCD_UpdatePoint(x, y);return(1);函數(shù)GUI_ReadPoint(),其功能讀取指定點(diǎn)的顏色,x表示指定點(diǎn)在列的位置,y指定點(diǎn)所在行的位置,ret用于保存顏色值的指針,當(dāng)出口參數(shù)返回0時(shí)表示指定地址超出有效范圍。對于單色,設(shè)置ret的d0位為1或4級灰度則為d0、d1有效位RGB則d0-d7有效,RGB結(jié)構(gòu)則R、G、B變量有效。int GUI_ReadPoint(uint32 x, uint32 y, TCOLOR *ret) /* 參數(shù)過濾 */ if(x>=GUI
43、_LCM_XMAX) return(0);if(y>=GUI_LCM_YMAX) return(0);/* 取得該點(diǎn)顏色(用戶自行更改) */ *ret = gui_disp_bufyx;return(1);函數(shù)GUI_HLine(),功能實(shí)現(xiàn)畫水平線,其中x0表示水平線起點(diǎn)所在列的位置 ,y0 表示水平線起點(diǎn)所在行的位置,x1表示水平線終點(diǎn)所在列的位置,color顯示顏色(對于黑白色LCM,為0時(shí)滅,為1時(shí)顯示) ,LCM初始化對于單色、4級灰度的液晶,可通過修改此函數(shù)作圖提高速度,如色LCM,可以一次更新8個(gè)點(diǎn),而不需要一個(gè)點(diǎn)一個(gè)點(diǎn)的寫到LCM中。void GUI_HLine(uin
44、t32 x0, uint32 y0, uint32 x1, TCOLOR color) uint32 bak;if(x0>x1) / 對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)所在行的位置, 對于單色、4級灰度的液晶,可通過修改此函數(shù)作圖提高速度,如色LCM,可以一次更新8個(gè)點(diǎn),而不需要
45、一個(gè)點(diǎn)一個(gè)點(diǎn)的寫到LCM中。void GUI_RLine(uint32 x0, uint32 y0, uint32 y1, TCOLOR color) uint32 bak;if(y0>y1) / 對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表示不相同。由于顏色類型TCOLO
46、R可以是結(jié)構(gòu)類型,所以此處編寫了比較函數(shù)。int GUI_CmpColor(TCOLOR color1, TCOLOR color2) if(color1=color2) return(1); else return(0);函數(shù)GUI_CopyColor(),其功能是進(jìn)行顏色值復(fù)制,color1代表目標(biāo)顏色變量,color2代表源顏色變量。由于顏色類型TCOLOR可以是結(jié)構(gòu)類型,所以此處編寫了復(fù)制函數(shù)。void GUI_CopyColor(TCOLOR *color1, TCOLOR color2) *color1 = color2; 附錄三子程序GPIO_Initialize(),功能是初始
47、化觸摸屏和蜂鳴器的GPIOvoid GPIO_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)的變量指針uint8 Calibration(void) uint16 sumx, sumy;uint16
48、 x, 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;sumy = sumy + y; errx1 = sumx >> 4;erry1 = sumy >> 4;GUI_HLine( 0, 19, 39, WHITE);GUI_RLine( 19, 0, 39, WHITE);if( (errx1<0x500) && (errx1>0x000) && (erry1<0x500) && (erry1>0x000) )Beep();elseBeep();Beep();
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年執(zhí)業(yè)醫(yī)師考試-鄉(xiāng)鎮(zhèn)臨床執(zhí)業(yè)助理醫(yī)師歷年參考題庫含答案解析(5套典型題)
- 自治區(qū)三好學(xué)生個(gè)人事跡文檔
- 2025年建筑八大員(九大員)住房城鄉(xiāng)建設(shè)領(lǐng)域現(xiàn)場專業(yè)人員考試-資料員歷年參考題庫含答案解析(5套典型考題)
- 2025年大學(xué)試題(語言學(xué))-第二語言習(xí)得歷年參考題庫含答案解析(5套典型考題)
- 2025年大學(xué)試題(計(jì)算機(jī)科學(xué))-制造業(yè)信息化歷年參考題庫含答案解析(5套典型考題)
- 2025年大學(xué)試題(管理類)-領(lǐng)導(dǎo)科學(xué)歷年參考題庫含答案解析(5套典型考題)
- 2025年大學(xué)試題(管理類)-中國式管理與管理思維歷年參考題庫含答案解析(5套典型考題)
- 2025年大學(xué)試題(教育學(xué))-學(xué)前兒童藝術(shù)教育歷年參考題庫含答案解析(5套典型考題)
- 2025年大學(xué)試題(大學(xué)選修課)-安全行為學(xué)歷年參考題庫含答案解析(5套典型考題)
- 2025年大學(xué)試題(歷史學(xué))-外國法制史歷年參考題庫含答案解析(5套典型考題)
- 謝晉元堅(jiān)守四行倉庫-完整版課件
- 大學(xué)媒體信息發(fā)布三審三校制度(試行)
- 2023年度中心技術(shù)競賽調(diào)頻試題答案
- 新疆博樂市第九中學(xué)2024年數(shù)學(xué)八年級下冊期末統(tǒng)考模擬試題含解析
- 地?zé)豳Y源勘探開發(fā)新技術(shù)
- 制造業(yè)的智能化改造與升級
- 膿腫切開引流術(shù)
- 祛濕健康科普知識講座
- 會(huì)議場地布局方案
- 脂肪醇聚氧乙烯醚5磷酸酯鹽分的合成
- 教科版五年級科學(xué)下冊期末試卷測試卷附答案
評論
0/150
提交評論