基于STM32F103的觸摸屏驅(qū)動(dòng)模塊設(shè)計(jì)_第1頁(yè)
基于STM32F103的觸摸屏驅(qū)動(dòng)模塊設(shè)計(jì)_第2頁(yè)
基于STM32F103的觸摸屏驅(qū)動(dòng)模塊設(shè)計(jì)_第3頁(yè)
基于STM32F103的觸摸屏驅(qū)動(dòng)模塊設(shè)計(jì)_第4頁(yè)
基于STM32F103的觸摸屏驅(qū)動(dòng)模塊設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、基于STM32F103x的LCD觸摸屏驅(qū)動(dòng)的設(shè)計(jì)姓名:_徐進(jìn)東_學(xué)號(hào):_10030227_班級(jí):_10 計(jì)卓_目錄1 概述32 LCD液晶顯示屏32.1 LCD液晶顯示屏原理32.2 LCD液晶顯示屏分類33觸摸屏驅(qū)動(dòng)原理概述43.1 電阻觸摸屏工作原理43.2 觸摸屏控制實(shí)現(xiàn)44 設(shè)計(jì)目標(biāo)45 系統(tǒng)硬件設(shè)計(jì)55.1 STM32微處理器FSMC接口55.2 LCD液晶顯示屏介紹75.3 觸摸屏控制板86 系統(tǒng)軟件設(shè)計(jì)106.1 系統(tǒng)軟件結(jié)構(gòu)106.2 頭文件設(shè)計(jì)116.2 硬件初始化程序116.3 3寸LCD模塊驅(qū)動(dòng)程序146.4 觸摸坐標(biāo)獲取程序196.5 LCD控制器控制程序227 總結(jié)2

2、41 概述LCD液晶顯示屏與觸摸屏在嵌入式系統(tǒng)中的應(yīng)用越來(lái)越普及。他們是非常簡(jiǎn)單、方便、自然的人機(jī)交互方式,目前廣泛應(yīng)用于便攜式儀器、智能家電、掌上設(shè)備等領(lǐng)域。觸摸屏與LCD液晶顯示技術(shù)的緊密結(jié)合,成了主流配置。LCD液晶顯示屏(LCD Module , LCM)是一種將液晶顯示器件、連接件、集成電路、PCB線路板、背光源以及結(jié)構(gòu)件裝配在儀器的組件。觸摸屏技術(shù)在我國(guó)的應(yīng)用時(shí)間不是太長(zhǎng),但它已經(jīng)成長(zhǎng)為人們最為接受的輸入方式。利用這種技術(shù)人們只需觸碰屏幕就可以對(duì)主機(jī)進(jìn)行操作,是人機(jī)交互更為方便,直截了當(dāng)。本文檔是對(duì)LCD液晶顯示屏和觸摸屏驅(qū)動(dòng)的設(shè)計(jì)做深入介紹。2 LCD液晶顯示屏2.1 LCD液晶

3、顯示屏原理液晶(Liquid Crystal):是一種介于固態(tài)和液態(tài)之間的具有規(guī)則性分子排列,及晶體的光學(xué)各向異性的有機(jī)化合物,液晶在受熱到一定溫度的時(shí)候會(huì)呈現(xiàn)透明狀的液體狀態(tài),而冷卻則會(huì)出現(xiàn)結(jié)晶顆粒的混濁固體狀態(tài),因?yàn)槲锢砩暇哂幸后w與晶體的特性,故稱之為“液晶”。液晶顯示器LCD(Liquid Crystal Display):是新型平板顯示器件。顯示器中的液晶體并不發(fā)光,而是控制外部光的通過(guò)量。當(dāng)外部光線通過(guò)液晶分子時(shí),液晶分子的排列扭曲狀態(tài)不同,使光線通過(guò)的多少就不同,實(shí)現(xiàn)了亮暗變化,可重現(xiàn)圖像。液晶分子扭曲的大小由加在液晶分子兩邊的電壓差的大小決定。因而可以實(shí)現(xiàn)電到光的轉(zhuǎn)換。即用電壓的

4、高低控制光的通過(guò)量,從而把電信號(hào)轉(zhuǎn)換成光像。2.2 LCD液晶顯示屏分類1. 位段型液晶顯示模塊位段型液晶顯示模塊是一種由位段型液晶顯示器件與專用的集成電路組裝成一體的功能部件。2. 字符型液晶顯示模塊字符型液晶顯示模塊是由字符液晶顯示器件與專用的行、列驅(qū)動(dòng)器、控制器、必要的連接件以及結(jié)構(gòu)件裝配而成,可以顯示數(shù)字和西文字符。3. 圖形點(diǎn)陣型液晶顯示模塊圖形點(diǎn)陣型顯示模塊就是可以動(dòng)態(tài)地顯示字符和圖片的LCD。圖形點(diǎn)陣液晶模塊的點(diǎn)陣像素連續(xù)排列,行和列在拍布中均沒(méi)有空隔,不僅可以顯示字符,還可以顯示連續(xù)完整的圖像。圖形點(diǎn)陣型液晶顯示模塊有三種類型可供選擇:行列驅(qū)動(dòng)型,行列驅(qū)動(dòng)控制型及行列控制型。3

5、 觸摸屏驅(qū)動(dòng)原理概述3.1 電阻觸摸屏工作原理電阻觸摸屏是采用電阻模擬量技術(shù)。它是一層玻璃作為基層,上面涂有一層透明氧化金屬(ITO氧化銦)導(dǎo)電層,再蓋有一層玻璃或是外表面硬化處理的光滑的塑料層;內(nèi)表面也涂有一層ITO導(dǎo)電層。它們之間有許多細(xì)小的透明隔離點(diǎn)把兩導(dǎo)電層隔開絕緣,每當(dāng)有筆或是手指按下時(shí),兩導(dǎo)電層就相互接觸。而形成電路。導(dǎo)電層的兩端都涂有一條銀膠,稱為該工作面的一對(duì)電極。上下兩個(gè)導(dǎo)電層一個(gè)是水平方向,一個(gè)是豎直方向,分別用來(lái)測(cè)量X和Y的坐標(biāo)位置。在水平面上的電極稱為X+電極和X-電極,在豎直平面的電極稱為Y+電極和Y-電極。工作時(shí),兩個(gè)電極根據(jù)測(cè)量需要提供參考電壓或是作為測(cè)量端對(duì)接觸

6、點(diǎn)的位置進(jìn)行測(cè)量。當(dāng)測(cè)量接觸點(diǎn)X坐標(biāo)的時(shí)候,導(dǎo)電層上的X+電極和X-電極分別上參考電壓和地;Y電極不加電壓,那么X電極間會(huì)形成均勻的電壓分布,用Y+電極作為測(cè)量點(diǎn),得到的電壓值通過(guò)A/D轉(zhuǎn)換,就可對(duì)應(yīng)地判斷出接觸點(diǎn)的X坐標(biāo)。Y坐標(biāo)亦是類似,只需改成對(duì)Y電極加電壓而X電極不加電壓即可。圖4-1 電阻屏原理圖3.2 觸摸屏控制實(shí)現(xiàn)對(duì)觸摸屏的控制有專用的控制芯片。觸摸屏的控制芯片主要完成兩個(gè)任務(wù):一是完成電極電壓的切換,二是采集接觸點(diǎn)處的電壓值并實(shí)現(xiàn)A/D轉(zhuǎn)換。觸摸屏控制芯片主要由觸摸檢測(cè)部件和觸摸屏控制器組成。觸摸檢測(cè)部件安裝在顯示器屏幕前面,用于檢測(cè)用戶觸摸位置,接受位置信號(hào)后送至觸摸屏控制器;

7、而觸摸屏控制器的主要作用是從觸摸點(diǎn)檢測(cè)裝置上接收觸摸信息,并將它轉(zhuǎn)換成觸點(diǎn)坐標(biāo),再送給MPU,同時(shí)它能接收MPU發(fā)來(lái)的命令并加以執(zhí)行。4 設(shè)計(jì)目標(biāo)基于STM32硬件開發(fā)平臺(tái)與3寸液晶屏組成液晶顯示與觸摸屏人機(jī)交互系統(tǒng)。5 系統(tǒng)硬件設(shè)計(jì)本實(shí)驗(yàn)的主要硬件由STM32微處理器的FSMC接口,3寸屏?xí)r序轉(zhuǎn)換板以及觸摸屏控制板組成。圖5-1 硬件系統(tǒng)結(jié)構(gòu)圖5.1 STM32微處理器FSMC接口FSMC模塊能夠與同步或異步的存儲(chǔ)器和16位的PC存儲(chǔ)器卡接口,它的主要作用是:l 將AHB傳輸信號(hào)轉(zhuǎn)換到適當(dāng)?shù)耐獠吭O(shè)備協(xié)議l 滿足訪問(wèn)外部設(shè)備的時(shí)序要求,所有的外部存儲(chǔ)器共享控制器輸出的地址、數(shù)據(jù)和控制信號(hào),每個(gè)

8、外部設(shè)備可以通過(guò)一個(gè)唯一的片選信號(hào)加以區(qū)分。FSMC在任一時(shí)刻只訪問(wèn)一個(gè)外部設(shè)備。FSMC具有下列主要功能:l 具有靜態(tài)存儲(chǔ)器接口的器件包括:靜態(tài)隨機(jī)存儲(chǔ)器(SRAM)只讀存儲(chǔ)器(ROM)NOR閃存PSRAM(4個(gè)存儲(chǔ)器塊)l 兩個(gè)NAND閃存塊,支持硬件ECC并可檢測(cè)多達(dá)8K字節(jié)數(shù)據(jù)l 16位的PC卡l 支持對(duì)同步器件的成組(Burst)訪問(wèn)模式,如NOR閃存和PSRAMl 8或16位數(shù)據(jù)總線l 每一個(gè)存儲(chǔ)器塊都有獨(dú)立的片選控制l 每一個(gè)存儲(chǔ)器塊都可以獨(dú)立配置l 時(shí)序可編程以支持各種不同的器件:等待周期可編程(多達(dá)15個(gè)周期)總線恢復(fù)周期可編程(多達(dá)15個(gè)周期)輸出使能和寫使能延遲可編程(多

9、達(dá)15周期)獨(dú)立的讀寫時(shí)序和協(xié)議,可支持寬范圍的存儲(chǔ)器和時(shí)序l PSRAM和SRAM器件使用的寫使能和字節(jié)選擇輸出l 將32位的AHB訪問(wèn)請(qǐng)求,轉(zhuǎn)換到連續(xù)的16位或8位的,對(duì)外部16位或8位器件的訪問(wèn)l 具有16個(gè)字,每個(gè)字32位寬的寫入FIFO,允許在寫入較慢存儲(chǔ)器時(shí)釋放AHB進(jìn)行其它操作。在開始一次新的FSMC操作前,F(xiàn)IFO要先被清空。通常在系統(tǒng)復(fù)位或上電時(shí),應(yīng)該設(shè)置好所有定義外部存儲(chǔ)器類型和特性的FSMC寄存器,并保持它們的內(nèi)容不變;當(dāng)然,也可以在任何時(shí)候改變這些設(shè)置。FSMC包含四個(gè)主要模塊:l AHB接口(包含F(xiàn)SMC配置寄存器)l NOR閃存和PSRAM控制器l NAND閃存和P

10、C卡控制器l 外部設(shè)備接口FSMC框圖如下:圖5-2 FSMC接口結(jié)構(gòu)框圖當(dāng)STM32微處理器使用FSMC接口模塊來(lái)控制LCD液晶顯示模塊時(shí),其接口信號(hào)用于驅(qū)動(dòng)LCD的對(duì)應(yīng)關(guān)系:FSMC接口信號(hào)線LCD接口信號(hào) 功能NExCSX片選 NWRWRX寫使能 NOE RDX 讀使能D15:0D15:0    數(shù)據(jù)信號(hào)A25:0 RS地址信號(hào)STM32微處理器使用FSMC接口模塊與LCD英特爾8080(類似)接口示意圖:圖5-3 FSMC接口模塊與LCD英特爾8080接口示意圖5.2 LCD液晶顯示屏介紹本實(shí)驗(yàn)的

11、LCD液晶顯示器采用宇順公司的3寸彩色液晶屏S95361,分辨率為240*400。3TFT顯示屏焊接在奮斗顯示轉(zhuǎn)接板上,在屏上貼有觸摸屏,通過(guò)40芯的接口與V5連接。40芯接口定義如下:圖5-4 40芯接口40芯里包含了16位數(shù)據(jù)線,讀寫線,命令/數(shù)據(jù)控制線,片選線,LCD硬件復(fù)位線,背光控制線以及觸摸控制線。奮斗板V3和MINI就是通過(guò)這個(gè)接口來(lái)控制顯示。 奮斗板MINI和V3都是選用了具有16位FSMC接口STM32F103VET6作為MCU, FSMC接口也可以稱為16位并行接口,時(shí)序同I8080接口。按照顯示屏驅(qū)動(dòng)電路LGDP5420的手冊(cè),為了達(dá)到色彩與顯示效率的平衡,奮斗板采用了1

12、6位 64K色接口模式。圖5-5 16位RGB真彩圖在這個(gè)模式每個(gè)像素用5位紅色6位綠色5位藍(lán)色總共16位來(lái)表示, 根據(jù)分辨率,一幀圖像占用400*240*2=192000字節(jié)。16位8080總線接口時(shí)序如下:圖5-6 總線讀寫時(shí)序圖5.3 觸摸屏控制板TSC2046是一款四線制觸摸屏控制器,內(nèi)涵12位分辨率125kHz轉(zhuǎn)換速率逐步逼近型A/D轉(zhuǎn)換器,它支持1.5V5.25V范圍的低電壓I/O口。TSC2046還具有一個(gè)片上2.5V的參考電壓,可以用于輔助輸入,電池監(jiān)測(cè),和溫度測(cè)量模式。TSC2046芯片主要功能如下:l 具有四線制觸摸屏接口;l 可單電源工作,工作電壓范圍2.2V至5.25V

13、;l 支持1.5V至5.25V的數(shù)字I / O口;l 內(nèi)部自帶2.5V參考電壓源;l 能直接測(cè)量電源電壓(0V至6V);l 片上溫度測(cè)量;l 觸摸壓力測(cè)量;l 具有3線制SPI通信接口;l 自動(dòng)省電;l 封裝小,TSSOP-16,QFN-16封裝,可在VFBGA-48封裝;其功能框圖如下:圖5-7 TSC2046功能框圖TSC2046最常用封裝TSSOP-16引腳排列如圖9所示,對(duì)應(yīng)的引腳功能定義如下表所示:圖5-8 TSC2046引腳排列圖引腳號(hào)引腳名功能描述1VCC電源2,3X+,Y+觸摸屏正電極4,5X-,Y-觸摸屏負(fù)電極6GND電源地7 VBAT 電池監(jiān)控輸入端。8AUX輔助

14、輸入端。9VREFA/D參考電壓輸入10IOVDD數(shù)字電源輸入端。 11PENIRQ筆中斷引腳,當(dāng)有觸摸事件發(fā)生時(shí),向微控制器申請(qǐng)中斷服務(wù)。12 DOUT串行數(shù)據(jù)輸出,用于輸出轉(zhuǎn)換后的觸摸位置數(shù)據(jù),12位工作方式下,最大為4095。  13BUSY忙指示,低電平有效14DIN串行數(shù)據(jù)輸入、其控制數(shù)據(jù)通過(guò)該引腳輸入。15CS片選16DCLK外部時(shí)鐘輸入引腳。 6 系統(tǒng)軟件設(shè)計(jì)6.1 系統(tǒng)軟件結(jié)構(gòu)圖6-1 系統(tǒng)軟件結(jié)構(gòu)本實(shí)驗(yàn)的觸摸模塊主要的軟件設(shè)計(jì)任務(wù)按功能和層次可分為如下幾個(gè)部分:1、 ucos系統(tǒng)建立任務(wù),包括主任務(wù),用戶界面任務(wù),CAN報(bào)文接

15、收任務(wù)等。2、 ucGUI圖形用戶界面程序,設(shè)計(jì)相關(guān)操作界面。3、 中斷服務(wù)程序,主要使用的中斷處理函數(shù)為USB_HP_CAN_TX_IRQHandler(),執(zhí)行CAN總線接收的中斷處理。4、 硬件平臺(tái)初始化程序,包括時(shí)鐘,CAN模塊,觸摸屏等等的初始化。5、 LCD的底層驅(qū)動(dòng)函數(shù)。6.2 頭文件設(shè)計(jì)本實(shí)驗(yàn)由于使用函數(shù)以及宏定義較多,自定義了頭文件demo.hh。demo.h內(nèi)容如下:#ifdef GLOBALS #define EXT#else#define EXT extern #endif#define Led_ON() GPIO_SetBits(GPIOB, GPIO_Pin_5);

16、 /LED1亮#define Led_OFF() GPIO_ResetBits(GPIOB, GPIO_Pin_5); /LED1滅#define TP_CS() GPIO_ResetBits(GPIOB,GPIO_Pin_7) /觸摸SPI片選允許#define TP_DCS() GPIO_SetBits(GPIOB,GPIO_Pin_7) /觸摸SPI片選允許#define PEN GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6) /觸摸檢測(cè) #define RED 0XF800#define GREEN 0X07E0#define BLUE 0X001F #

17、define BRED 0XF81F#define GRED 0XFFE0#define GBLUE 0X07FF;#define BLACK 0; 6.2 硬件初始化程序硬件平臺(tái)初始化主要包括系統(tǒng)時(shí)鐘配置,F(xiàn)SMC接口的LCD初始化,SPI接口級(jí)觸摸屏芯片初始化,GPIO初始化等系統(tǒng)常用配置。觸摸屏初始化配置通過(guò)調(diào)用tp_Config()函數(shù)實(shí)現(xiàn),代碼如下:void tp_Config(void) GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; /* SPI1 時(shí)鐘使能 */ RCC_APB2Pe

18、riphClockCmd(RCC_APB2Periph_SPI1,ENABLE); /* SPI1 SCK(PA5)、MISO(PA6)、MOSI(PA7) 設(shè)置 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/口線速度50MHZ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /復(fù)用模式 GPIO_Init(GPIOA, &GPIO_InitSt

19、ructure); /* SPI1 觸摸芯片的片選控制設(shè)置 PB7 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/口線速度50MHZ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/推挽輸出模式 GPIO_Init(GPIOB, &GPIO_InitStructure); /* 由于SPI1總線上掛接了4個(gè)外設(shè),所以在使用觸摸屏?xí)r,需要禁止其余3個(gè)SPI1 外設(shè), 才能正常工作 */ GPIO_

20、InitStructure.GPIO_Pin = GPIO_Pin_4; /SPI1 SST25VF016B片選 GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; /SPI1 VS1003片選 GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; /SPI1 網(wǎng)絡(luò)模塊片選 GPIO_Init(GPIOA, &GPIO_InitStructure); G

21、PIO_SetBits(GPIOC, GPIO_Pin_4);/SPI CS1 GPIO_SetBits(GPIOB, GPIO_Pin_12);/SPI CS4 GPIO_SetBits(GPIOA, GPIO_Pin_4);/SPI NSS /* SPI1總線 配置 */ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; /全雙工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; /主模式 SPI_InitStructure.SPI_DataSize = SPI_D

22、ataSize_8b; /8位 SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;/時(shí)鐘極性 空閑狀態(tài)時(shí),SCK保持低電平 SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; /時(shí)鐘相位 數(shù)據(jù)采樣從第一個(gè)時(shí)鐘邊沿開始 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; /軟件產(chǎn)生NSS SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64; /波特率控制 SYSCLK/64 SPI_InitStructure.S

23、PI_FirstBit = SPI_FirstBit_MSB;/數(shù)據(jù)高位在前 SPI_InitStructure.SPI_CRCPolynomial = 7; /CRC多項(xiàng)式寄存器初始值為7 SPI_Init(SPI1, &SPI_InitStructure); /* SPI1 使能 */ SPI_Cmd(SPI1,ENABLE); FSMC接口的LCD初始化通過(guò)調(diào)用FSMC_LCD_Init()函數(shù)實(shí)現(xiàn)信號(hào)引腳配置等功能。函數(shù)代碼如下:/* 名 稱:void FSMC_LCD_Init(void)* 功 能:基于FSMC接口的16位TFT接口初始化* 入口參數(shù):無(wú)* 出口參數(shù):無(wú)*

24、說(shuō) 明:* 調(diào)用方法:無(wú) */void FSMC_LCD_Init(void) FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; FSMC_NORSRAMTimingInitTypeDef p; GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE); /使能FSMC接口時(shí)鐘 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; /背光控制 GPIO_InitStructure.GPIO_Mod

25、e = GPIO_Mode_Out_PP; /通用推挽輸出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/輸出模式最大速度50MHz GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_SetBits(GPIOD, GPIO_Pin_13); /打開背光 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; /TFT 復(fù)位腳 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /通用推挽輸出模式 GPIO_InitSt

26、ructure.GPIO_Speed = GPIO_Speed_50MHz; /輸出模式最大速度50MHz GPIO_Init(GPIOE, &GPIO_InitStructure); /* 啟用FSMC復(fù)用功能, 定義FSMC D0-D15及nWE, nOE對(duì)應(yīng)的引腳 */ /* 設(shè)置 PD.00(D2), PD.01(D3), PD.04(nOE), PD.05(nWE), PD.08(D13), PD.09(D14), PD.10(D15), PD.14(D0), PD.15(D1) 為復(fù)用上拉 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_

27、0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /最大速度50MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /復(fù)用模式 GPIO_Init(GPIOD, &GPIO_InitStructure); /* 設(shè)置 PE.07(D4), PE.08(D5), PE.0

28、9(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10), PE.14(D11), PE.15(D12) 為復(fù)用上拉 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_Init(GPIOE, &GPIO_InitStructure); /* FSMC NE1 配置 PD7 */

29、 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_Init(GPIOD, &GPIO_InitStructure); /* FSMC RS配置 PD11-A16 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 ; GPIO_Init(GPIOD, &GPIO_InitStructure); p.FSMC_AddressSetupTime = 0x02; p.FSMC_AddressHoldTime = 0x00; p.FSMC_DataSetupTime = 0x05; p.FSMC_Bus

30、TurnAroundDuration = 0x00; p.FSMC_CLKDivision = 0x00; p.FSMC_DataLatency = 0x00; p.FSMC_AccessMode = FSMC_AccessMode_B; FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; FSMC_NORSRAMInitStructure.FSMC_MemoryType =

31、FSMC_MemoryType_NOR; FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; FSMC_NORSRAMInitStructure.FSMC_WrapMode = FS

32、MC_WrapMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; FSMC_NORSRAMInitStructure.FSMC_ExtendedMode =

33、 FSMC_ExtendedMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); /* 使能FSMC BANK1_SRAM 模式 */ FSMC

34、_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); 6.3 3寸LCD模塊驅(qū)動(dòng)程序/* 本例程在 奮斗版STM32開發(fā)板V5上調(diào)試通過(guò) * 文件名: Fun.c* 內(nèi)容簡(jiǎn)述:* 文件歷史:* 版本號(hào) 日期 作者 說(shuō)明* v1.0 2013-10 xjd */#include "fsmc_sram.h"#include "font.h" #include "demo.h" #define Bank1_LCD_D (uint32_t)0x60020000) /disp Data ADDR#define Ba

35、nk1_LCD_C (uint32_t)0x60000000) /disp Reg ADDRvoid LCD_Init(void);void LCD_WR_REG(unsigned int index);void LCD_WR_CMD(unsigned int index,unsigned int val);void LCD_WR_Data(unsigned int val);void LCD_test(void);void LCD_clear(unsigned int p);void Delay(_IO uint32_t nCount);unsigned short LCD_RD_data(

36、void);extern void lcd_rst(void);extern void Delay(_IO uint32_t nCount);void TFT_CLEAR(u8 x,u16 y,u8 len,u16 wid); void TFT_DrawPoint(u8 x,u16 y);void TFT_ShowChar(u8 x,u16 y,u8 num);void TFT_ShowNum(u8 x,u16 y,u32 num);void TFT_ShowString(u8 x,u16 y,const u8 *p);void TFT_ShowBmp(u8 x,u16 y,u8 lenth,

37、u16 wide,const u8 *p);u16 POINT_COLOR=RED; /默認(rèn)紅色 /* 名 稱:LCD_WR_REG(unsigned int index)* 功 能:FSMC寫顯示器寄存器地址函數(shù)* 入口參數(shù):無(wú)* 出口參數(shù):無(wú)* 說(shuō) 明:* 調(diào)用方法:無(wú) */ void LCD_WR_REG(unsigned int index)*(_IO uint16_t *) (Bank1_LCD_C)= index; /* 名 稱:void LCD_WR_CMD(unsigned int index,unsigned int val)* 功 能:FSMC寫顯示器寄存器數(shù)據(jù)函數(shù)* 入口

38、參數(shù):無(wú)* 出口參數(shù):無(wú)* 說(shuō) 明:* 調(diào)用方法:無(wú) */ void LCD_WR_CMD(unsigned int index,unsigned int val)*(_IO uint16_t *) (Bank1_LCD_C)= index;*(_IO uint16_t *) (Bank1_LCD_D)= val;/* 名 稱:unsigned short LCD_RD_data(void)* 功 能:FSMC讀顯示區(qū)16位數(shù)據(jù)函數(shù)* 入口參數(shù):無(wú)* 出口參數(shù):無(wú)* 說(shuō) 明:* 調(diào)用方法:無(wú) */ unsigned short LCD_RD_data(void)unsigned int a=0

39、;a=*(_IO uint16_t *) (Bank1_LCD_D); /空操作a=*(_IO uint16_t *) (Bank1_LCD_D); /讀出的實(shí)際16位像素?cái)?shù)據(jù) return(a);/* 名 稱:LCD_WR_Data(unsigned int val)* 功 能:FSMC寫16位數(shù)據(jù)函數(shù)* 入口參數(shù):無(wú)* 出口參數(shù):無(wú)* 說(shuō) 明:* 調(diào)用方法:無(wú) */ void LCD_WR_Data(unsigned int val) *(_IO uint16_t *) (Bank1_LCD_D)= val; void LCD_WR_Data_8(unsigned int val)*(_I

40、O uint16_t *) (Bank1_LCD_D)= val;/* 名 稱:void Delay(_IO uint32_t nCount)* 功 能:延時(shí)函數(shù)* 入口參數(shù):無(wú)* 出口參數(shù):無(wú)* 說(shuō) 明:* 調(diào)用方法:無(wú) */ void Delay(_IO uint32_t nCount) for(; nCount != 0; nCount-);/* 名 稱:void LCD_Init(void)* 功 能:2.4 寸TFT 初始化函數(shù)* 入口參數(shù):無(wú)* 出口參數(shù):無(wú)* 說(shuō) 明:* 調(diào)用方法:無(wú) */ void LCD_Init(void)unsigned int i;/lcd_rst();

41、 GPIO_ResetBits(GPIOE, GPIO_Pin_1); /硬件復(fù)位 Delay(0x1AFFf); GPIO_SetBits(GPIOE, GPIO_Pin_1 ); Delay(0x1AFFf);LCD_WR_CMD(0x0000, 0x00000); LCD_WR_CMD(0x0000, 0x00000);LCD_WR_CMD(0x0000, 0x00000);LCD_WR_CMD(0x0000, 0x00000);/time, 0010 ,msLCD_WR_CMD(0x0400, 0x06200);LCD_WR_CMD(0x0008, 0x00808);LCD_WR_CM

42、D(0x0300, 0x00C00);/gammaLCD_WR_CMD(0x0301, 0x05A0B);LCD_WR_CMD(0x0302, 0x00906);LCD_WR_CMD(0x0303, 0x01017);LCD_WR_CMD(0x0304, 0x02300);LCD_WR_CMD(0x0305, 0x01700);LCD_WR_CMD(0x0306, 0x06309);LCD_WR_CMD(0x0307, 0x00C09);LCD_WR_CMD(0x0308, 0x0100C);LCD_WR_CMD(0x0309, 0x02232);LCD_WR_CMD(0x0010, 0x00

43、016);/69.5HzLCD_WR_CMD(0x0011, 0x00101);/LCD_WR_CMD(0x0012, 0x00000);/LCD_WR_CMD(0x0013, 0x00001);/LCD_WR_CMD(0x0100, 0x00330);/BT,APLCD_WR_CMD(0x0101, 0x00237);/DC0,DC1,VCLCD_WR_CMD(0x0103, 0x00F00);/VDVLCD_WR_CMD(0x0280, 0x06100);/VCMLCD_WR_CMD(0x0102, 0x0C1B0);/VRH,VCMR,PSON,PON/time, 0100 ,msLCD

44、_WR_CMD(0x0001, 0x00100);LCD_WR_CMD(0x0002, 0x00100);LCD_WR_CMD(0x0003, 0x01030);LCD_WR_CMD(0x0009, 0x00001);LCD_WR_CMD(0x000C, 0x00000);LCD_WR_CMD(0x0090, 0x08000);LCD_WR_CMD(0x000F, 0x00000);LCD_WR_CMD(0x0210, 0x00000);LCD_WR_CMD(0x0211, 0x000EF);LCD_WR_CMD(0x0212, 0x00000);LCD_WR_CMD(0x0213, 0x00

45、18F);/432=1AF, 400=18FLCD_WR_CMD(0x0500, 0x00000);LCD_WR_CMD(0x0501, 0x00000);LCD_WR_CMD(0x0502, 0x0005F);LCD_WR_CMD(0x0401, 0x00001);LCD_WR_CMD(0x0404, 0x00000);/time, 0100 ,msLCD_WR_CMD(0x0007, 0x00100);/BASEE/time, 0100 ,msLCD_WR_CMD(0x0200, 0x00000);LCD_WR_CMD(0x0201, 0x00000); LCD_WR_CMD(0x200,

46、 0); LCD_WR_CMD(0x201, 0);*(_IO uint16_t *) (Bank1_LCD_C)= 0x202; /準(zhǔn)備寫數(shù)據(jù)顯示區(qū)for(i=0;i<96000;i+) LCD_WR_Data(0xffff); /用黑色清屏 /* 名 稱:u32 abs(s32 res)* 功 能:取絕對(duì)值函數(shù)* 入口參數(shù):無(wú)* 出口參數(shù):無(wú)* 說(shuō) 明:* 調(diào)用方法:無(wú) */ u32 abs(s32 res)if(res<0)return -res;else return res; /* 名 稱:u32 mn(u8 m,u8 n)* 功 能:* 入口參數(shù):無(wú)* 出口參數(shù):無(wú)* 說(shuō) 明:* 調(diào)用方法:無(wú) */ u32 mn(u8 m,u8 n)u32 result=1; while(n-)result*=m; return result;6.4

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論