學(xué)年論文-基于STM32的LCD顯示屏設(shè)計(jì)_第1頁
學(xué)年論文-基于STM32的LCD顯示屏設(shè)計(jì)_第2頁
學(xué)年論文-基于STM32的LCD顯示屏設(shè)計(jì)_第3頁
學(xué)年論文-基于STM32的LCD顯示屏設(shè)計(jì)_第4頁
學(xué)年論文-基于STM32的LCD顯示屏設(shè)計(jì)_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

前言1.1設(shè)計(jì)的背景液晶顯示器(LCD)已廣泛應(yīng)用于計(jì)算機(jī)、電視及智能儀表中,它的主要優(yōu)點(diǎn)是功耗低、控制電壓低、集成電路容易控制。LCD顯示屏的體積小、重量輕、超薄等特點(diǎn)是其它顯示屏無法比擬的。近幾年來被廣泛用于單片機(jī)控制的智能儀器、儀表和低功耗電子產(chǎn)品中。LCD可分為段式LCD、字符式LCD和點(diǎn)陣式LCD。其中段位式LCD和字符式LCD只能用于字符和數(shù)字簡(jiǎn)易顯示,而不能夠滿足圖形曲線和漢字顯示的要求;而點(diǎn)陣式LCD不僅可以顯示字符、數(shù)字,還可以顯示各種圖形、曲線和漢字,并且可以實(shí)現(xiàn)屏幕上下左右滾動(dòng),動(dòng)畫功能,區(qū)分開窗口,反轉(zhuǎn),閃爍等功能,用途十分廣泛[1]。液晶顯示器作為一種新型顯示輸出設(shè)備,消除了傳統(tǒng)CRT的屏幕閃爍和像素抖動(dòng),不僅具有高亮度、對(duì)比度,高可靠性、抗干擾能力強(qiáng)等優(yōu)點(diǎn),而且體積小,功耗低、寬視野、色彩鮮明、無輻射。隨著相關(guān)技術(shù)的日趨成熟,它的應(yīng)用領(lǐng)域迅速擴(kuò)展,尤其是在工業(yè)控制,醫(yī)療儀器、機(jī)電設(shè)備、商業(yè)消費(fèi)等方面,正逐漸成為新的熱點(diǎn)。LCD顯示多采用專用的控制器,功能強(qiáng)大,實(shí)了很好的顯示效果。但是其價(jià)格高昂,且多要求有的操作系統(tǒng)實(shí)現(xiàn)控制功能。這必然限制其在功能要求不高、對(duì)價(jià)格敏感的小型設(shè)備中使用。1.2研究現(xiàn)狀及發(fā)展趨勢(shì)在LCD顯示應(yīng)用領(lǐng)域,通常數(shù)據(jù)源輸出圖像的分辨率是變化的,而從工業(yè)生產(chǎn)標(biāo)準(zhǔn)化要求和獲得最佳顯示效果的角度出發(fā),LCD顯示器的物理分辨率則是固定不變的。這就需要將不同分辨率的輸入圖像經(jīng)過縮放后輸出到分辨率固定的LCD顯示器上,當(dāng)前工業(yè)上解決這一問題的方案是在輸入數(shù)據(jù)源和數(shù)據(jù)顯示設(shè)備之間設(shè)置LCD圖像引擎來實(shí)現(xiàn)縮放處理[2]。LCD顯示器是純數(shù)字設(shè)備,數(shù)字接口是其最佳的選擇,隨著數(shù)字接口技術(shù)標(biāo)準(zhǔn)逐漸地統(tǒng)一起來,越來越多的顯示芯片具備了支持?jǐn)?shù)字視頻輸出的能力,顯卡制造商也開始在顯卡上集成數(shù)字顯示接口?;谶@種現(xiàn)狀,當(dāng)前LCD圖像引擎芯片也就存在基于模擬到接口和數(shù)字接口兩種類型[3]。兩類芯片盡管實(shí)現(xiàn)基本功能一致,但是由于標(biāo)準(zhǔn)的不同,結(jié)構(gòu)存在較大差異。采用模擬接口方式時(shí),圖像信號(hào)處理流程是:顯卡首先將數(shù)字圖像信號(hào)變?yōu)槟M信號(hào)(DAC),然后由電纜送到顯示器上,顯示器再將模擬信號(hào)變?yōu)閿?shù)字信號(hào)(ADC),最后經(jīng)過圖像放處理后進(jìn)行圖像顯示[4]。這樣,信號(hào)經(jīng)由DAC,ADC到最后的信號(hào)輸出實(shí)際上是一個(gè)多余循環(huán)過程,這個(gè)循壞沒有任何積極的意義,相反還引入了三個(gè)信號(hào)失真源:DAC、電纜、ADC,最終影響了圖像的輸出效果。采用數(shù)字接口方式則去掉了這些不必要的環(huán)節(jié),直接輸出數(shù)字視頻信號(hào),經(jīng)圖像縮放處理后,就可以直接送到顯示器進(jìn)行顯示,圖像的輸出效果毫無疑問會(huì)優(yōu)于前一種模式。數(shù)字接口取代模擬接口是大勢(shì)所趨,考慮到數(shù)模接口兼容,目前很多廠商在同一芯片上不僅提供數(shù)字接口,而且提供模擬接口[5]。進(jìn)入大尺寸LCD圖像引擎IC的門檻較LCD驅(qū)動(dòng)IC要高,涉及專利問題較多,由目前主要Genesis、PHILIPS、NS(NationalSemiconductor),ST(STMicroelectronics)等國(guó)際大廠控制[6]。在龐大市場(chǎng)需求的強(qiáng)力吸引下,中國(guó)臺(tái)灣陸續(xù)有數(shù)十家IC設(shè)廠投入到LCD顯示相關(guān)芯片領(lǐng)域。臺(tái)灣地區(qū)廠商晨星(Mstar)、凌泰(Averlogic)、兆宏(Magicpixel)、聯(lián)詠(Novatek)、瑞昱(Realtek)、晶磊(Smartasic)、創(chuàng)品(Trumpion)、凌越(Topro)、世紀(jì)民生(Mysoncentury)、晶捷科技(MRT)等廠家在LCD圖像引擎芯片市場(chǎng)也取得了一定份額。目前我國(guó)IC設(shè)計(jì)公司數(shù)量已經(jīng)突破400家大關(guān),但在LCD圖像引擎芯片的研發(fā)上[7],內(nèi)地IC設(shè)計(jì)公司參與者卻寥寥無幾。目前僅有成都威斯達(dá)在進(jìn)行這方面的研發(fā)和設(shè)計(jì),其面向LCDTV的主打方案WS1115、WSC2100也已經(jīng)得到了成功的應(yīng)用。LCD顯示屏的發(fā)展主要有如下幾個(gè)趨勢(shì):1)實(shí)現(xiàn)分離式圖像引擎IC到初期較低程度整合,再到高集成度整合的轉(zhuǎn)變。2)LCD圖像引擎數(shù)字接口將取代模擬接口。3)低擺幅差分信號(hào)RSDS逐步導(dǎo)入控制板的輸出介面[8]。4)在控制IC中為家庭中的PC、DVD、TVCable、PS2、xBox等影音數(shù)據(jù)源提供更加廣闊的匹配接口,使大尺寸LCD顯示器功能更加多樣化。5)LCD面板開始步入10bits,因此支持10bits的LCD像引擎也將成為標(biāo)準(zhǔn)要求,同時(shí)寬屏LCD顯示器成為了消費(fèi)者的新寵??偠灾琇CD顯示器正朝著更多的輸出、更快的速度、更高的品質(zhì)(考慮電磁兼容等方面的設(shè)計(jì)加入)、更低的功耗等方向快速發(fā)展[9]。2硬件設(shè)計(jì)2.1系統(tǒng)的總體設(shè)計(jì)本次設(shè)計(jì)是通過在STM32進(jìn)行軟件編程來控制LCD液晶顯示屏的顯示設(shè)計(jì)。它的整體思想是系統(tǒng)電源部分可以使用5V電源端口供電,再通過3.3V穩(wěn)壓芯片得到單片機(jī)與LCD顯示模塊所需電源。單片機(jī)采用STM32系列的STM32F103VET6,采用LCD液晶顯示模塊作為系統(tǒng)的顯示部分。通信接口電路主要是由芯片PL2303構(gòu)成,它的功能主要是將電腦的USB接口轉(zhuǎn)換為串口,同時(shí)還將PC的邏輯電平轉(zhuǎn)換為與單片機(jī)系統(tǒng)相同的CMOS電平,方便程序的燒寫以及與上位機(jī)的通信。系統(tǒng)結(jié)構(gòu)框圖如圖2.1所示。STM32F103復(fù)位電路STM32F103復(fù)位電路SD卡讀取模塊晶振電路晶振電路LCD顯示模塊LCD顯示模塊電源電路電源電路圖2-1系統(tǒng)結(jié)構(gòu)圖2.1.1STM32的主控模塊STM32是整個(gè)LCD顯示設(shè)計(jì)的核心部分。這是一個(gè)具有較高性能而又經(jīng)濟(jì)的單片機(jī)。本設(shè)計(jì)選用屬于STM32系列的STM32F103VET6作為控制電路的核心部件,該單片機(jī)屬于ST意法半導(dǎo)體公司生產(chǎn)的32位高性能、低成本、低功耗的增強(qiáng)型系列單片機(jī),它的內(nèi)核采用的是ARM公司最新研發(fā)的CortexTM-M3架構(gòu),該內(nèi)核是專門設(shè)計(jì)于滿足用戶對(duì)高性能、低功耗和經(jīng)濟(jì)實(shí)用的要求。ARM

Cortex-M3處理器的架構(gòu)在系統(tǒng)結(jié)構(gòu)上的增強(qiáng),最高36MHz工作頻率,在存儲(chǔ)器的0等待周期訪問時(shí)可達(dá)1.25DMips/MHz(Dhrystone2.1),它使得STM32增強(qiáng)型系列單片機(jī)受益無窮,其采用的THUMB-2指令集使得其指令效率更高,而且性能更強(qiáng)。

STM32F103ZET6采用薄型四方扁平式封裝技術(shù)(LQFP)具有100管腳,片內(nèi)具有8M的SPIFLASH,64KB的RAM(片上集成12Bit

A/D、D/A、PWM、CAN、USB、安全數(shù)字輸入輸出卡SDIO、可變靜態(tài)存儲(chǔ)控制器FSMC等資源)。1個(gè)串行外設(shè)接口(SPI)總線控制的M25P16(16MB容量的串行FLASH),用于存儲(chǔ)數(shù)據(jù)、代碼、字庫及圖相等。1個(gè)3.2寸240*320分辨率觸摸屏,利用MCU的FSMC的16位數(shù)據(jù)接口模式,觸摸屏采用ADS7843(4線電阻觸摸屏轉(zhuǎn)換接口芯片)芯片用硬SPI接口控制。STM32單片機(jī)采用2.0~3.6V的供電電壓,可以工作在-40℃~85℃的溫度范圍內(nèi),其最高的工作頻率是72MHz,其最小電路如圖2-2所示,其資源圖如圖2-3所示。圖2-232F103VET6的最小系統(tǒng)圖2-3硬件資源描述圖2.1.2電源模塊STM32單片機(jī)由AMS1117-3.3芯片電路供電,輸入+5V,提供3.3V的固定電壓輸出,為了降低電磁干擾,需要經(jīng)C1-C3濾波后再為CPU供電,R38為DGND與AGND的連接電阻,電源電路如圖2-4所示。圖2-4電源電路2.1.3復(fù)位電路模塊復(fù)位電路對(duì)單片機(jī)系統(tǒng)非常重要。復(fù)位電路有幾點(diǎn)要求,其一,上電時(shí)有足夠的有效復(fù)位電平時(shí)間,以便CPU在晶振起振達(dá)到穩(wěn)態(tài)后可靠復(fù)位;其二,系統(tǒng)斷電后,復(fù)位端能快速放電,以便使系統(tǒng)在連續(xù)快速開關(guān)時(shí)能可靠復(fù)位。本電路中,要復(fù)位只需要在接高電平持續(xù)2us就可以實(shí)現(xiàn)。在單片機(jī)系統(tǒng)中,系統(tǒng)上電啟動(dòng)的時(shí)候復(fù)位一次,當(dāng)按鍵按下的時(shí)候系統(tǒng)再次復(fù)位,如果釋放后再按下,系統(tǒng)還會(huì)復(fù)位。所以可以通過按鍵的斷開和閉合在運(yùn)行的系統(tǒng)中控制其復(fù)位。圖2-5復(fù)位電路2.1.4晶振電路有源晶振是一個(gè)完整的諧振振蕩器,它是利用石英晶體的壓電效應(yīng)來起振,所以有源晶振需要供電,當(dāng)我們把有源晶振電路做好后,不需要外接其它器件,只要給它供電,它就可以主動(dòng)產(chǎn)生振蕩頻率,并且可以提供高精度的頻率基準(zhǔn),信號(hào)質(zhì)量也比無源信號(hào)要好。有源晶振通常有4個(gè)引腳,VCC,GND,晶振輸出引腳和一個(gè)使能引腳。電路只需要接到單片機(jī)的晶振的輸入引腳上,輸出引腳上不需要接。圖2-6晶振電路2.1.5SD卡讀取模塊SD卡的數(shù)據(jù)寫入、讀取的最小單位是塊,每塊的大小為512字節(jié)。見圖19-4,為多個(gè)數(shù)據(jù)塊的寫入過程。首先軟件通過SDIO接口的CMD信號(hào)線發(fā)送多塊寫入的命令,接收到正常的響應(yīng)后,要寫入的數(shù)據(jù)線從4根DAT信號(hào)線傳輸出去,每塊結(jié)束后是CRC校驗(yàn)碼。接著要檢測(cè)忙狀態(tài),數(shù)據(jù)傳輸?shù)絊D卡后,SD卡啟動(dòng)內(nèi)部時(shí)序保存數(shù)據(jù),這時(shí)SD卡會(huì)把DAT0信號(hào)線拉低,表示處于“忙”狀態(tài),忙狀態(tài)結(jié)束后,主機(jī)才能發(fā)送下一個(gè)數(shù)據(jù)塊的數(shù)據(jù)。圖2-7STM32的SDIO接口2.2LCD控制器LCD,即液晶顯示器,因?yàn)槠涔牡?、體積小,承載的信息量大,因而被廣泛用于信息輸出、與用戶進(jìn)行交互,目前仍是各種電子顯示設(shè)備的主流。因?yàn)镾TM32內(nèi)部沒有集成專用的液晶屏和觸摸屏的控制接口,所以在顯示面板中應(yīng)自帶含有這些驅(qū)動(dòng)芯片的驅(qū)動(dòng)電路(液晶屏和觸摸屏的驅(qū)動(dòng)電路是獨(dú)立的),STM32芯片通過驅(qū)動(dòng)芯片來控制液晶屏和觸摸屏。本系統(tǒng)使用的STM32有3.2寸液晶屏(240*320),它使用ILI9341芯片控制液晶屏,通過XPT2046芯片控制觸摸屏。2.2.1ILI9341控制器結(jié)構(gòu)液晶屏的控制芯片內(nèi)部結(jié)構(gòu)非常復(fù)雜,見圖2-8。最主要的是位于中間GRAM,可以理解為顯存。GRAM中每個(gè)存儲(chǔ)單元都對(duì)應(yīng)著液晶面板的一個(gè)像素點(diǎn)。它右側(cè)的各種模塊共同作用把GRAM存儲(chǔ)單元的數(shù)據(jù)轉(zhuǎn)化成液晶面板的控制信號(hào),使像素點(diǎn)呈現(xiàn)特定的顏色,而像素點(diǎn)組合起來則成為一幅完整的圖像??驁D的左上角為ILI9341的主要控制信號(hào)線和配置引腳,根據(jù)其不同狀態(tài)設(shè)置可使芯片工作在不同的模式,如每個(gè)像素點(diǎn)的位數(shù)是6、16還是18位;使用SPI接口還是8080接口與MCU進(jìn)行通訊;使用8080接口的哪種模式。MUC通過SPI或8080接口與ILI9341進(jìn)行通訊,從而訪問它的控制寄存器、地址計(jì)數(shù)器及GRAM。在GRAM的左側(cè)還有一個(gè)LED控制器。LCD為非發(fā)光性的顯示裝置,它需要借助背光源才能達(dá)到顯示功能,LED控制器就是用來控制它的背光源。圖2-8ILI9341控制器內(nèi)部框圖2.2.2像素點(diǎn)的數(shù)據(jù)格式圖像數(shù)據(jù)的像素點(diǎn)由紅(R)、綠(G)、藍(lán)(B)三原色組成,三原色根據(jù)其深淺程度被分為0~255個(gè)級(jí)別,它們按不同比例的混合可以得出各種色彩。如R:255,G255,B255混合后為白色。根據(jù)描述像素點(diǎn)數(shù)據(jù)的長(zhǎng)度,主要分為8、16、24及32位。如以8位來描述的像素點(diǎn)可表示28=256色,16位描述的為216=65536色,稱為真彩色,也稱為64K色。實(shí)際上受人眼對(duì)顏色的識(shí)別能力的限制,16位色與12位色已經(jīng)難以分辨了。ILI9341最高能夠控制18位的LCD,但為了數(shù)據(jù)傳輸簡(jiǎn)便,這里采用的是它的16位控制模式,以16位描述的像素點(diǎn)。按照標(biāo)準(zhǔn)格式,16位的像素點(diǎn)的三原色描述的位數(shù)為R:G:B=5:6:5,描述綠色的位數(shù)較多是因?yàn)槿搜蹖?duì)綠色更為敏感。16位的像素點(diǎn)格式見表2.116位像素點(diǎn)格式。表2.116位像素點(diǎn)格式圖中的是默認(rèn)18條數(shù)據(jù)線時(shí),像素點(diǎn)三原色的分配狀況,D1~D5為藍(lán)色,D6~D11為綠色,D13~D17為紅色。這樣分配有D0和D12位是無效的。若使用16根數(shù)據(jù)線傳送像素點(diǎn)的數(shù)據(jù),則D0~D4為藍(lán)色,D5~D10為綠色,D11~D15為紅色,使得剛好使用完整的16位。RGB比例為5:6:5是一個(gè)十分通用的顏色標(biāo)準(zhǔn),在GRAM相應(yīng)的地址中填入該顏色的編碼,即可控制LCD輸出該顏色的像素點(diǎn)。如黑色的編碼為0x0000,白色的編碼為0xffff,紅色為0xf800。2.2.3ILI9341的通訊時(shí)序目前,大多數(shù)的液晶控制器都使用8080或6800接口與MCU進(jìn)行通訊,它們的時(shí)序十分相似,本單片機(jī)以ILI9341使用的8080通訊時(shí)序進(jìn)行分析,實(shí)際上ILI9341也可以使用SPI接口來控制。ILI9341的8080接口有5條基本的控制信號(hào)線:(1)用于片選的CSX信號(hào)線;(2)用于寫使能的WRX信號(hào)線;(3)用于讀使能的RDX信號(hào)線;(4)用于區(qū)分?jǐn)?shù)據(jù)和命令的D/CX信號(hào)線;(5)用于復(fù)位的RESX信號(hào)線。其中帶X的表示低電平有效。除了控制信號(hào),還有數(shù)據(jù)信號(hào)線,它的數(shù)目不定,可根據(jù)ILI9341框圖中的IM[3:0]來設(shè)定,這部分一般由制作液晶屏的廠家完成。為便于傳輸像素點(diǎn)數(shù)據(jù),野火使用的液晶屏設(shè)定為16條數(shù)據(jù)線D[15:0]。使用8080接口的寫命令時(shí)序圖見圖2-9。圖2-9使用18條數(shù)據(jù)線的8080接口寫命令時(shí)序由圖可知,寫命令時(shí)序由CSX信號(hào)線拉低開始,D/CX信號(hào)線也置低電平表示寫入的是命令地址(可理解為命令編碼,如軟件復(fù)位命令:0x01),以WRX信號(hào)線為低,RDX信號(hào)為高表示數(shù)據(jù)傳輸方向?yàn)閷懭耄瑫r(shí),在數(shù)據(jù)線[17:0]輸出命令地址,在第二個(gè)傳輸階段傳送的為命令的參數(shù),所以D/CX要置高電平,表示寫入的是命令數(shù)據(jù)。當(dāng)我們需要向GRAM寫入數(shù)據(jù)的時(shí)候,把CSX信號(hào)線拉低后,把D/CX信號(hào)線置為高電平,這時(shí)由D[17:0]傳輸?shù)臄?shù)據(jù)則會(huì)被ILI9341保存至它的GRAM中。

3軟件設(shè)計(jì)3.1字模提取方法3.1.1字模液晶屏是一個(gè)由像素點(diǎn)組成的點(diǎn)陣,若要顯示文字,則需要很多像素點(diǎn)的共同構(gòu)成。見圖3-1,圖中是兩個(gè)由16*16的點(diǎn)陣顯示的兩個(gè)漢字。圖3-1字模如果規(guī)定:每個(gè)漢字都由這樣16*16的點(diǎn)陣來顯示,把筆跡經(jīng)過的像素點(diǎn)以“1”表示,沒有筆跡的點(diǎn)以“0”表示,每個(gè)像素點(diǎn)的狀態(tài)以一個(gè)二進(jìn)制位來記錄,用16*16/8=32個(gè)字節(jié)就可以把這個(gè)字記錄下來。這32個(gè)字節(jié)數(shù)據(jù)就稱為該文字的字模,還有其它常用字模是24*24、32*32的。在這樣的字模中,以兩個(gè)字節(jié)表示一行像素點(diǎn),16行構(gòu)成一個(gè)字模。如果使用LCD的畫點(diǎn)函數(shù),按位來掃描這些字模數(shù)據(jù),把為1的位以黑色來顯示(也可以使用其它顏色),即可把整個(gè)點(diǎn)陣還原出來,顯示在液晶屏上。3.1.2制作字模本文采用“字模Ⅲ-增強(qiáng)版v3.91”字模軟件來制作中文字庫。步驟如下:1、打開字模軟件2、點(diǎn)擊“批量生成字庫”按鈕選項(xiàng)3、點(diǎn)擊選項(xiàng)“文本文件”,在打開的界面里選擇“GB2132.txt”。如圖3-5、圖3-6所示。此時(shí)在“輸入批量字符框”里會(huì)列出二級(jí)漢字的所有漢字,其中共收錄了6768個(gè)漢字字符。4、點(diǎn)擊“字庫智能生成”,彈出“字庫批量參數(shù)確認(rèn)”對(duì)話框。我們?cè)凇霸醋煮w”選項(xiàng)里面做如下設(shè)置,字模寬度和高度都選擇16,因?yàn)橐旁赟D卡中,所以選擇BIN文件格式。5、點(diǎn)擊“開始轉(zhuǎn)換進(jìn)程”,就會(huì)在軟件安裝目錄下會(huì)生成Font.dat文件。將生成的漢字字庫拷貝到SD卡根目錄下并重命名為“HZLIB.bin”。把該文件保存到SD卡中,STM32芯片通過文件系統(tǒng)讀取文件即可獲得字庫的數(shù)據(jù)。3.2顯示中英文及BMP圖片系統(tǒng)的流程圖如圖3-3所示,先將LCD的引腳和寄存器初始化;再向ILI19431寫入命令和數(shù)據(jù);配置FSMC;再設(shè)置ILI9431的GRAM的掃描方向:左上角>右下角為顯示中英文的采用的模式,右下角>左上角為顯示攝像頭圖像,右上角>左下角為顯示BMP圖片;對(duì)ILI9431顯示器進(jìn)行設(shè)置,讀取ILI9431的像素?cái)?shù)據(jù);在ILI9431顯示器上畫出一個(gè)矩形;在ILI9431顯示器上顯示英文、中文字符和BMP圖片。圖3-3系統(tǒng)流程圖3.2.1配置工程環(huán)境本實(shí)驗(yàn)需要制作字庫,其文件名為:HZLIB.bin,三個(gè)BMP圖片文件,文件名為:pic1.bmp、pic2.bmp、pic3.bmp,把這四個(gè)文件保存到SD卡中,再把該SD卡插入開發(fā)板的SD卡接口。本實(shí)驗(yàn)中要把舊文件:systick.c、usart1.c、lcd.c、ff.c、sdio_sdcard.c、lcd_botton.c文件添加進(jìn)新工程,新建Sd_bmp.c、sd_fs_app.c文件,分別用于編寫B(tài)MP文件相關(guān)的函數(shù)和字模獲取函數(shù)。3.2.2main文件顯示中英文字符和BMP圖片用了兩個(gè)函數(shù),所以在這里放置了兩個(gè)main函數(shù)。顯示漢字的main函數(shù)它調(diào)用了很多函數(shù),主要是將SD卡的讀取接口和LCD初始化,再調(diào)用掃描和讀取的函數(shù),并設(shè)置了要顯示的中英文。同樣的,顯示BMP圖片的main函數(shù)也調(diào)用了一些函數(shù)用于顯示BMP圖。//顯示漢字的main函數(shù)intmain(void){ Sd_fs_init();//初始化SDIO LCD_Init();//LCD初始化 ILI9341_GramScan(1);//設(shè)定(坐標(biāo)軸)掃描方向 ILI9341_Clear(0,0,240,320,macBLACK);ILI9341_DispString_EN(5,5,"Iamqq",macBLACK,macRED); ILI9341_DispString_EN(5,25,"myxuehaois2",macBLACK,macRED) ILI9341_DispString_CH(50,57,"XX大學(xué)",macBLACK,macRED);ILI9341_DispString_EN_CH(30,90,"Welcometouse野火ISOStm32開發(fā)板bigo",macBLACK,macRED); while(1); }//顯示圖片的main函數(shù)intmain(void){ Sd_fs_init();//初始化SDIO LCD_Init();//LCD初始化 Lcd_show_bmp(10,10,"/pic1.bmp"); //顯示BMP圖片 Lcd_show_bmp(10,100,"/pic2.bmp"); while(1); }3.2.3顯示中英文的主要代碼ILI9341_DispString_EN_CH()函數(shù)的作用主要為在ILI9341顯示器上顯示中英文字符串,在得到特定掃描方向下字符串的起始X、Y坐標(biāo)后進(jìn)行對(duì)像素?cái)?shù)據(jù)的讀取,然后設(shè)置字符串的背景色、前景色,將字符顯示出來。/***@brief在ILI9341顯示器上顯示中英文字符串*@paramusX:在特定掃描方向下字符串的起始X坐標(biāo)*@paramusY:在特定掃描方向下字符串的起始Y坐標(biāo)*@parampStr:要顯示的字符串的首地址*@paramusColor_Background:選擇字符串的背景色*@paramusColor_Background:選擇字符串的前景色*@retval無*/voidILI9341_DispString_EN_CH(uint16_tusX,uint16_tusY,constuint8_t*pStr,uint16_tusColor_Background,uint16_tusColor_Foreground){ uint16_tusCh; while(*pStr!='\0') { if(*pStr<=126) //英文字符 { if((usX-macILI9341_DispWindow_X_Star+macWIDTH_EN_CHAR)>macILI9341_DispWindow_COLUMN) { usX=macILI9341_DispWindow_X_Star; usY+=macHEIGHT_EN_CHAR; } if((usY-macILI9341_DispWindow_Y_Star+macHEIGHT_EN_CHAR)>macILI9341_DispWindow_PAGE) { usX=macILI9341_DispWindow_X_Star; usY=macILI9341_DispWindow_Y_Star; } ILI9341_DispChar_EN(usX,usY,*pStr,usColor_Background,usColor_Foreground); usX+=macWIDTH_EN_CHAR; pStr++; } else //漢字字符 { if((usX-macILI9341_DispWindow_X_Star+macWIDTH_CH_CHAR)>macILI9341_DispWindow_COLUMN) { usX=macILI9341_DispWindow_X_Star; usY+=macHEIGHT_CH_CHAR; } if((usY-macILI9341_DispWindow_Y_Star+macHEIGHT_CH_CHAR)>macILI9341_DispWindow_PAGE) { usX=macILI9341_DispWindow_X_Star; usY=macILI9341_DispWindow_Y_Star; } usCh=*(uint16_t*)pStr; usCh=(usCh<<8)+(usCh>>8); ILI9341_DispChar_CH(usX,usY,usCh,usColor_Background,usColor_Foreground); usX+=macWIDTH_CH_CHAR; pStr+=2;//一個(gè)漢字兩個(gè)字節(jié)}}}3.2.4顯示BMP圖片的主要代碼該函數(shù)的主要工作流程是:讀取頭部信息確定寬度和高度并確定每一行后面具體需要讀出的字節(jié)數(shù)(保證是4字節(jié)的倍數(shù));讀取一行像素點(diǎn)并顯示;讀取下一行并顯示,直至讀完所有行。/***@brief設(shè)置ILI9341的截取BMP圖片*@paramx:在掃描模式1下截取區(qū)域的起點(diǎn)X坐標(biāo)*@paramy:在掃描模式1下截取區(qū)域的起點(diǎn)Y坐標(biāo)*@parampic_name:BMP存放的全路徑*@retval無*/voidLcd_show_bmp(uint16_tx,uint16_ty,uint8_t*pic_name){ inti,j,k; intwidth,height,l_width; BYTEred,green,blue; BITMAPFILEHEADERbitHead; BITMAPINFOHEADERbitInfoHead; WORDfileType; unsignedintread_num; unsignedchartmp_name[20]; sprintf((char*)tmp_name,"0:%s",pic_name); f_mount(0,&bmpfs[0]); BMP_DEBUG_PRINTF("filemountok\r\n"); bmpres=f_open(&bmpfsrc,(char*)tmp_name,FA_OPEN_EXISTING|FA_READ); /**/ if(bmpres==FR_OK) { BMP_DEBUG_PRINTF("Openfilesuccess\r\n"); /*讀取文件頭信息兩個(gè)字節(jié)*/ f_read(&bmpfsrc,&fileType,sizeof(WORD),&read_num); /*判斷是不是BMP文件“BM”*/ if(fileType!=0x4d42) { BMP_DEBUG_PRINTF("fileisnot.bmpfile!\r\n"); return; } else { BMP_DEBUG_PRINTF("Okthisis.bmpfile\r\n"); } /*讀取BMP文件頭信息*/ f_read(&bmpfsrc,&bitHead,sizeof(tagBITMAPFILEHEADER),&read_num); showBmpHead(&bitHead); /*讀取位圖信息頭信息*/ f_read(&bmpfsrc,&bitInfoHead,sizeof(BITMAPINFOHEADER),&read_num); showBmpInforHead(&bitInfoHead); } else { BMP_DEBUG_PRINTF("fileopenfail!\r\n"); return; }/**/ width=bitInfoHead.biWidth; height=bitInfoHead.biHeight; /*計(jì)算位圖的實(shí)際寬度并確保它為32的倍數(shù)*/ l_width=WIDTHBYTES(width*bitInfoHead.biBitCount); if(l_width>960) { BMP_DEBUG_PRINTF("\nSORRY,PICISTOOBIG(<=320)\n"); return; } /*設(shè)置LCDGram掃描方向?yàn)椋河蚁陆?>左上角*/ ILI9341_GramScan(1); /*開一個(gè)圖片大小的窗口*/ ILI9341_OpenWindow(x,y,width,height); ILI9341_Write_Cmd(macCMD_SetPixel); /*判斷是否是24bit真彩色圖*/ if(bitInfoHead.biBitCount>=24) { for(i=0;i<height;i++) {f_lseek(&bmpfsrc,bitHead.bfOffBits+(height-i-1)*l_width); /*讀取一行bmp的數(shù)據(jù)到數(shù)組pColorData里*/ #if0 for(j=0;j<l_width;j++) {f_read(&bmpfsrc,pColorData+j,1,&read_num);} #elif0 f_read(&bmpfsrc,pColorData,l_width/2,&read_num); f_read(&bmpfsrc,pColorData+l_width/2,l_width/2,&read_num); #else f_read(&bmpfsrc,pColorData,l_width,&read_num); #endif for(j=0;j<width;j++) //一行有效信息 { k=j*3; //一行中第k個(gè)像素的起點(diǎn) red=pColorData[k+2]; green=pColorData[k+1]; blue= pColorData[k]; ILI9341_Write_Data(RGB24TORGB16(red,green,blue));//寫入LCD-GRAM } } } else {BMP_DEBUG_PRINTF("SORRY,THISPICISNOTA24BITSREALCOLOR"); return; } f_close(&bmpfsrc); }

4系統(tǒng)調(diào)試在SD卡中放入HZLIB.bin的字模文件和兩個(gè)BMP圖片pic1.bmp、pic2.bmp,再把該SD卡插入開發(fā)板的SD卡接口,然后將野火STM32開發(fā)板供電(DC5V),插上JLINK,插上串口線(兩頭都是母的交叉線),接上液晶屏,將編譯好的程序下載到開發(fā)板。調(diào)試過程中主要出現(xiàn)的問題有:1、如果SD卡中的字模文件出現(xiàn)錯(cuò)誤或是沒有讀取到SD卡的文件,則會(huì)出現(xiàn)中文亂碼或是圖片不顯示的問題。2、如果程序出現(xiàn)錯(cuò)誤會(huì)導(dǎo)致LCD屏無法打開或是產(chǎn)生黑屏的現(xiàn)象,程序與開發(fā)板不兼容也會(huì)產(chǎn)生同樣的現(xiàn)象。最后在不斷的調(diào)試和改進(jìn)下,LCD能夠根據(jù)給出的指令正常顯示中、英文字符以及BMP圖片,實(shí)驗(yàn)現(xiàn)象如圖4-1和圖4-2所示。 圖4-1LCD顯示中英文字符 圖4-2LCD顯示BMP圖片

5結(jié)論本文通過研究LCD顯示屏的顯示特點(diǎn)與原理、與STM32單片機(jī)的件連接和軟件編程,以及字模提取方法和中間退到的問題的解決技術(shù)等,得到了以下結(jié)論:1.LCD可分為段式LCD、字符式LCD和點(diǎn)陣式LCD。其中段位式LCD和字符式LCD只能用于字符和數(shù)字的簡(jiǎn)易顯示,而不能夠滿足圖形曲線和漢字顯示的要求;而點(diǎn)陣式LCD不僅可以顯示字符、數(shù)字,還可以顯示各種圖形、曲線和漢字,并且可以實(shí)現(xiàn)屏幕上下左右滾動(dòng),動(dòng)畫功能,分區(qū)開窗口,反轉(zhuǎn),閃爍等功能。2.ILI9341液晶顯示模組上提供了液晶顯示器的接口及其所需的復(fù)位電路等,并把對(duì)液晶模組的操作接口引出,方便用戶使用;此外還提供有背光、電源指示燈。3.“字模Ⅲ-增強(qiáng)版v3.91”字模軟件是針對(duì)STM32F103的字模數(shù)據(jù)提取工具.用戶可以利用此工具提取漢字字模BMP位圖字模,還可以很方便地提取ASCII碼字模。用戶還可以利用此工具對(duì)所要取的漢字、位圖等進(jìn)行輯;生成的字模數(shù)據(jù)用以Word(字型〕數(shù)據(jù)為基本單元,并以數(shù)組形式保存;字模數(shù)據(jù)導(dǎo)出時(shí),可以導(dǎo)出一個(gè).C文件和一個(gè).h的頭文件,用戶可以直接把這個(gè)文件加載到用戶的工程中,供漢字顯示位圖顯示使用。綜上所述,本設(shè)計(jì)的硬件部分及軟件部分都基本符合所要設(shè)計(jì)的要求?;贑8051F單片機(jī)直流電動(dòng)機(jī)反饋控制系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的嵌入式Web服務(wù)器的研究MOTOROLA單片機(jī)MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對(duì)良率的影響研究基于模糊控制的電阻釬焊單片機(jī)溫度控制系統(tǒng)的研制基于MCS-51系列單片機(jī)的通用控制模塊的研究基于單片機(jī)實(shí)現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機(jī)控制的二級(jí)倒立擺系統(tǒng)的研究基于增強(qiáng)型51系列單片機(jī)的TCP/IP協(xié)議棧的實(shí)現(xiàn)基于單片機(jī)的蓄電池自動(dòng)監(jiān)測(cè)系統(tǒng)基于32位嵌入式單片機(jī)系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機(jī)的作物營(yíng)養(yǎng)診斷專家系統(tǒng)的研究基于單片機(jī)的交流伺服電機(jī)運(yùn)動(dòng)控制系統(tǒng)研究與開發(fā)基于單片機(jī)的泵管內(nèi)壁硬度測(cè)試儀的研制基于單片機(jī)的自動(dòng)找平控制系統(tǒng)研究基于C8051F040單片機(jī)的嵌入式系統(tǒng)開發(fā)基于單片機(jī)的液壓動(dòng)力系統(tǒng)狀態(tài)監(jiān)測(cè)儀開發(fā)模糊Smith智能控制方法的研究及其單片機(jī)實(shí)現(xiàn)一種基于單片機(jī)的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機(jī)沖床數(shù)控系統(tǒng)的研究基于CYGNAL單片機(jī)的在線間歇式濁度儀的研制基于單片機(jī)的噴油泵試驗(yàn)臺(tái)控制器的研制基于單片機(jī)的軟起動(dòng)器的研究和設(shè)計(jì)基于單片機(jī)控制的高速快走絲電火花線切割機(jī)床短循環(huán)走絲方式研究基于單片機(jī)的機(jī)電產(chǎn)品控制系統(tǒng)開發(fā)基于PIC單片機(jī)的智能手機(jī)充電器基于單片機(jī)的實(shí)時(shí)內(nèi)核設(shè)計(jì)及其應(yīng)用研究基于單片機(jī)的遠(yuǎn)程抄表系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的煙氣二氧化硫濃度檢測(cè)儀的研制基于微型光譜儀的單片機(jī)系統(tǒng)單片機(jī)系統(tǒng)軟件構(gòu)件開發(fā)的技術(shù)研究基于單片機(jī)的液體點(diǎn)滴速度自動(dòng)檢測(cè)儀的研制基于單片機(jī)系統(tǒng)的多功能溫度測(cè)量?jī)x的研制基于PIC單片機(jī)的電能采集終端的設(shè)計(jì)和應(yīng)用基于單片機(jī)的光纖光柵解調(diào)儀的研制氣壓式線性摩擦焊機(jī)單片機(jī)控制系統(tǒng)的研制基于單片機(jī)的數(shù)字磁通門傳感器基于單片機(jī)的旋轉(zhuǎn)變壓器-數(shù)字轉(zhuǎn)換器的研究基于單片機(jī)的光纖Bragg光柵解調(diào)系統(tǒng)的研究單片機(jī)控制的便攜式多功能乳腺治療儀的研制基于C8051F020單片機(jī)的多生理信號(hào)檢測(cè)儀基于單片機(jī)的電機(jī)運(yùn)動(dòng)控制系統(tǒng)設(shè)計(jì)Pico專用單片機(jī)核的可測(cè)性設(shè)計(jì)研究基于MCS-51單片機(jī)的熱量計(jì)基于雙單片機(jī)的智能遙測(cè)微型氣象站MCS-51單片機(jī)構(gòu)建機(jī)器人的實(shí)踐研究基于單片機(jī)的輪軌力檢測(cè)基于單片機(jī)的GPS定位儀的研究與實(shí)現(xiàn)基于單片機(jī)的電液伺服控制系統(tǒng)用于單片機(jī)系統(tǒng)的MMC卡文件系統(tǒng)研制基于單片機(jī)的時(shí)控和計(jì)數(shù)系統(tǒng)性能優(yōu)化的研究基于單片機(jī)和CPLD的粗光柵位移測(cè)量系統(tǒng)研究單片機(jī)控制的后備式方波UPS提升高職學(xué)生單片機(jī)應(yīng)用能力的探究基于單片機(jī)控制的自動(dòng)低頻減載裝置研究基于單片機(jī)控制的水下焊接電源的研究基于單片機(jī)的多通道數(shù)據(jù)采集系統(tǒng)基于uPSD3234單片機(jī)的氚表面污染測(cè)量?jī)x的研制基于單片機(jī)的紅外測(cè)油儀的研究96系列單片機(jī)仿真器研究與設(shè)計(jì)基于單片機(jī)的單晶金剛石刀具刃磨設(shè)備的數(shù)控改造基于單片機(jī)的溫度智能控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)基于MSP430單片機(jī)的電梯門機(jī)控制器的研制基于單片機(jī)的氣體測(cè)漏儀的研究基于三菱M16C/6N系列單片機(jī)的CAN/USB協(xié)議轉(zhuǎn)換器基于單片機(jī)和DSP的變壓器油色譜在線監(jiān)測(cè)技術(shù)研究基于單片機(jī)的膛壁溫度報(bào)警系統(tǒng)設(shè)計(jì)基于AVR單片機(jī)的低壓無功補(bǔ)償控制器的設(shè)計(jì)基于單片機(jī)船舶電力推進(jìn)電機(jī)監(jiān)測(cè)系統(tǒng)基于單片機(jī)網(wǎng)絡(luò)的振動(dòng)信號(hào)的采集系統(tǒng)基于單片機(jī)的大容量數(shù)據(jù)存儲(chǔ)技術(shù)的應(yīng)用研究基于單片機(jī)的疊圖機(jī)研究與教學(xué)方法實(shí)踐基于單片機(jī)嵌入式Web服務(wù)器技術(shù)的研究及實(shí)現(xiàn)基于AT89S52單片機(jī)的通用數(shù)據(jù)采集系統(tǒng)基于單片機(jī)的多道脈沖幅度分析儀研究機(jī)器人旋轉(zhuǎn)電弧傳感角焊縫跟蹤單片機(jī)控制系統(tǒng)基于單片機(jī)的控制系統(tǒng)在PLC虛擬教學(xué)實(shí)驗(yàn)中的應(yīng)用研究基于單片機(jī)系統(tǒng)的網(wǎng)絡(luò)通信研究與應(yīng)用基于PIC16F877單片機(jī)的莫爾斯碼自動(dòng)譯碼系統(tǒng)設(shè)計(jì)與研究基于單片機(jī)的模糊控制器在工業(yè)電阻爐上的應(yīng)用研究基于雙單片機(jī)沖床數(shù)控系統(tǒng)的研究與開發(fā)基于Cygnal單片機(jī)的μC/OS-Ⅱ的研究基于單片機(jī)的一體化智能差示掃描量熱儀系統(tǒng)研究基于TCP/IP協(xié)議的單片機(jī)與Internet互聯(lián)的研究與實(shí)現(xiàn)變頻調(diào)速液壓電梯單片機(jī)控制器的研究基于單片機(jī)γ-免疫計(jì)數(shù)器自動(dòng)換樣功能的研究與實(shí)現(xiàn)基于單片機(jī)的倒立擺控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)單片機(jī)嵌入式以太網(wǎng)

溫馨提示

  • 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. 人人文庫網(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)論