TFT-LCD

TFT-LCD 即薄膜晶體管液晶顯示器其英文全稱爲:Thin Film Transistor-Liquid CrystalDisplay。TFT-LCD 與無源 TN-LCD、STN-LCD 的簡單矩陣不一樣,它在液晶顯示屏的每個象素上都設置有一個薄膜晶體管(TFT),可有效地克服非選通時的串擾,使顯示液晶屏的靜態特性與掃描線數無關,所以大大提升了圖像質量。TFT-LCD 也被叫作真彩液晶顯示器。ide

該模塊有以下特色:函數

  1. 2.4’/2.8’/3.5’/4.3’/7’ 5 種大小的屏幕可選。
  2. 320×240 的分辨率(3.5’分辨率爲:320*480,4.3’和 7’分辨率爲:800*480)。
  3. 16 位真彩顯示。
  4. 自帶觸摸屏,能夠用來做爲控制輸入。

 

本章,咱們以 2.8 寸的 ALIENTEK TFTLCD 模塊爲例介紹,該模塊支持 65K 色顯示,顯示分辨率爲 320×240,接口爲 16 位的 80 並口,自帶觸摸屏。ui

 

L 丨 、 T K  2 / 24 ' LCD MODULE

 

模塊原理圖如圖 18.1.1.2 所示:spa

 

妥 三  9180  •Ig CIND  -IH  OSIIX  I 」  S• 1 二  「 -80  1 -80  IS  9180  山 「 HO  11a0  「 1a0

 

TFTLCD 模塊採用 2*17 的 2.54 公排針與外部鏈接,接口定義如圖所示:設計

 

LCT) CS  LCD  LCD RSV  DB2  DB4  DB6  DBS  DBII  DB13  DBIS  DB17  LCDI  LCD CS  RSV  DB2  DB4  11  DB6  13  DBS  15  DBII  17  DB13  19  DBF  21  DB17  BL CTRS  RD  DB3  DBS  DB7  DBIO  DB12  DB14  DB16  GND  VDD3.3  GND  GND  T MISO  T PEN  T CS  VDD3.3  27  GND BL VDD  29  MISO  31  T PEN  T CS  TET LCD  MOSI  MO  CLK  10  12  14  16  18  20  22  24  26  28  30  32  34  LCD RS  LCD RD  OBI  DBS  DBS  DBIO  DB12  DB14  DB16  GND  vccs.3  GND  BL VDD  T MOSI  T CLR

 

從圖能夠看出,ALIENTEK TFTLCD 模塊採用 16 位的並方式與外部鏈接,之因此不採用 8 位的方式,是由於彩屏的數據量比較大,尤爲在顯示圖片的時候,若是用 8 位數據線,就會比 16 位方式慢一倍以上,咱們固然但願速度越快越好,因此咱們選擇 16 位的接口。3d

該模塊的 80 並口有以下一些信號線:指針

  • CS:TFTLCD 片選信號。
  • WR:向 TFTLCD 寫入數據。
  • RD:從 TFTLCD 讀取數據。
  • D[15:0]:16 位雙向數據線。
  • RST:硬復位 TFTLCD。
  • RS:命令/數據標誌(0,讀寫命令;1,讀寫數據)

 

須要說明的是,TFTLCD模塊的RST信號線是直接接到STM32的復位腳上,並不禁軟件控制,這樣能夠省下來一個 IO口。另外咱們還須要一個背光控制線來控制TFTLCD 的背光。因此,咱們總共須要的 IO口數目爲 21 個。這裏還須要注意,咱們標註的DB1~DB8,DB10~DB17,是相對於 LCD 控制 IC 標註的,實際上你們能夠把他們就等同於 D0~D15,這樣理解起來就比較簡單一點。xml

 

ILI9341 液晶控制器自帶顯存,其顯存總大小爲 172800(240*320*18/8),即 18 位模式(26萬色)下的顯存量。在 16 位模式下,ILI9341 採用 RGB565 格式存儲顏色數據,此時 ILI9341的 18 位數據線與 MCU 的 16 位數據線以及 LCD GRAM 的對應關係如圖所示:blog

 

計算機生成了可選文字: 93唼1總線 肥U數據 (吒位) LCDGRAM (16位) D15 D13 RC4]RC3]RC2]R[1]RCO] D17 D15 D16 DI唼 DI唼 D12 D13 D11 D12 NC D11 D10 DB 引GC4]GCS]GC2]G1]G0] BC4]BCS]BC2]B[1]ECO] D10 DB

 

從圖中能夠看出,ILI9341 在 16 位模式下面,數據線有用的是:D17~D13 和 D11~D1,D0和 D12 沒有用到,實際上在咱們 LCD 模塊裏面,ILI9341 的 D0 和 D12 壓根就沒有引出來,這樣,ILI9341 的 D17~D13 和 D11~D1 對應 MCU 的 D15~D0。接口

 

這樣 MCU 的 16 位數據,最低 5 位表明藍色,中間 6 位爲綠色,最高 5 位爲紅色。數值越大,表示該顏色越深。另外,特別注意 ILI9341 全部的指令都是 8 位的(高 8 位無效且參數除了讀寫 GRAM 的時候是 16 位,其餘操做參數,都是 8 位的,這個和 ILI9320 等驅動器不同,必須加以注意。

接下來,咱們介紹一下 ILI9341 的幾個重要命令0XD3,0X36,0X2A,0X2B,0X2C,0X2E 等 6 條指令。

 

首先來看指令:0XD3,這個是讀 ID4 指令,用於讀取 LCD 控制器的 ID,該指令如圖所示:

 

計算機生成了可選文字: 各位描述 順序 指令 參數1 參數2 參數3 參數4 RS 0 1 1 1 1 RD WR D1五、D8 XX XX XX XX XX D7 X D6 X D5 X D4 X D3 X D2 X D1 X DO 1 X 0 1 HEX D3H 0OH 93H 41H

 

從上表能夠看出,0XD3 指令後面跟了 4 個參數,最後 2 個參數,讀出來是 0X93 和 0X41,恰好是咱們控制器 ILI9341 的數字部分,從而,經過該指令,便可判別所用的 LCD 驅動器是什麼型號這樣,咱們的代碼,就能夠根據控制器的型號去執行對應驅動 IC 的初始化代碼,從而兼容不一樣驅動 IC 的屏,使得一個代碼支持多款 LCD。

 

接下來看指令:0X36,這是存儲訪問控制指令,能夠控制 ILI9341 存儲器的讀寫方向,簡單的說,就是在連續寫 GRAM 的時候,能夠控制 GRAM 指針的增加方向,從而控制顯示方式(讀 GRAM 也是同樣)。該指令如圖所示:

計算機生成了可選文字: 各位描述 順序 指令 0 控制 RD 1 WR 忄 D1五、D8 XX XX D7 0 MY D6 0 MX D5 1 MV D4 1 ML D3 0 BGR D2 1 MH DI 1 0 DO 0 0 HEX 36H 0

 

從上表能夠看出,0X36 指令後面,緊跟一個參數,這裏咱們主要關注:MY、MX、MV這三個位,經過這三個位的設置,咱們能夠控制整個 ILI9341 的所有掃描方向,如所示:

計算機生成了可選文字: MY 0 1 0 1 0 0 1 1 控制位 從左到右,從上到下 從左到右,從下到上 從右到左,從上到下 從右到左,從下到上 從上到下,從左到右 從上到下,從右到左 從下到上,從左到右 從下到上,從右到左 效果 LCD掃描方向(GRAM自增方式) MX 0 0 1 1 0 1 0 1 MV 0 0 0 0 1 1 1 1

 

這樣,咱們在利用 ILI9341 顯示內容的時候,就有很大靈活性了,好比顯示 BMP 圖片,BMP 解碼數據,就是從圖片的左下角開始,慢慢顯示到右上角若是設置 LCD 掃描方向爲從左到右,從下到上,那麼咱們只須要設置一次座標,而後就不停的往 LCD 填充顏色數據便可,這樣能夠大大提升顯示速度。

 

接下來看指令:0X2A,這是列地址設置指令,在從左到右,從上到下的掃描方式(默認)下面,該指令用於設置橫座標(x 座標),該指令如所示:

計算機生成了可選文字: 各位描述 順序 指令 參數1 參數2 參數3 參數4 RS 0 1 1 1 1 RD 1 1 1 1 1 WR 忄 忄 忄 忄 忄 D1五、D8 XX XX XX XX XX D7 0 SC15 SC7 EC15 EC7 D6 0 SC14 SC6 EC14 EC6 D5 1 SC13 SC5 EC13 EC5 D4 0 SC12 SC4 EC12 EC4 D3 1 SC11 SC3 EC11 EC3 D2 0 SCIO SC2 ECIO EC2 DI 1 SC9 SCI EC9 ECI DO 0 SC8 SCO EC8 ECO HEX 2AH SC EC

 

 

在默認掃描方式時,該指令用於設置 x 座標,該指令帶有 4 個參數,其實是 2 個座標值:SC 和 EC,即列地址的起始值和結束值,SC必須小於等於 EC,且 0≤SC/EC≤239。通常在設置 x 座標的時候,咱們只須要帶 2 個參數便可,也就是設置 SC 便可,由於若是 EC 沒有變化,咱們只須要設置一次便可(在初始化 ILI9341 的時候設置),從而提升速度。

 

指令:0X2B,與 0X2A 指令相似,是頁地址設置指令在從左到右,從上到下的掃描方式(默認)下面,該指令用於設置縱座標(y 座標)該指令如所示:

各 位 描 述  順 序  指 令  參 數 1  參 數 2  參 數 3  參 數 4  控 制  RD  RS  0  WR  D15 、 D8  XX  XX  D7  0  SP15  SP7  EP15  EP7  SP14  SP6  EP14  EP6  SP13  SP5  EP13  EP5  SP12  EP12  EP4  SPII  SP3  EPII  EP3  SPIO  SP2  EPIC)  EP2  SP9  SP 1  EP9  EP 1  2B 日  SP8  SP  SPO  EP8  EP  EPO

 

在默認掃描方式時,該指令用於設置 y 座標,該指令帶有 4 個參數,其實是 2 個座標值:SP 和 EP,即頁地址的起始值和結束值,SP 必須小於等於 EP,且 0≤SP/EP≤319。通常在設置y 座標的時候,咱們只須要帶 2 個參數便可,也就是設置 SP 便可,由於若是 EP 沒有變化,咱們只須要設置一次便可(在初始化 ILI9341 的時候設置),從而提升速度。

 

接下來看指令:0X2C,該指令是寫 GRAM 指令,在發送該指令以後,咱們即可以往 LCD的 GRAM 裏面寫入顏色數據了,該指令支持連續寫,指令描述如所示:

RS  RD  ifi4  xx  o  DI  0  DO  0  o  Dn[15:  0]  HEX  2CH  xx  xx  xx

 

從上表可知,在收到指令0X2C以後,數據有效位寬變爲16位,咱們能夠連續寫入 LCD-GRAM 值,而 GRAM 的地址將根據 MY/MX/MV 設置的掃描方向進行自增。例如:假設設置的是從左到右,從上到下的掃描方式,那麼設置好起始座標(經過 SC,SP 設置)後,每寫入一個顏色值,GRAM 地址將會自動自增 1(SC++),若是碰到 EC,則回到 SC,同時 SP++,一直到座標:EC,EP 結束,其間無需再次設置的座標,從而大大提升寫入速度。

 

最後,來看看指令:0X2E,該指令是讀 GRAM 指令,用於讀取 ILI9341 的顯存(GRAM),該指令在 ILI9341 的數據手冊上面的描述是有誤的,真實的輸出狀況如所示:

RS  0  RD  DIO  xx  1  R114:0]  BIC4:O]  D9  xx  xx  xx  xx  D8 D7 D6  0  0  xx  105  D2  0  Dl  1  xx  xx  xx  xx  DO  0  R2C4:O]  HEX  2EH  dummy  RIGI  BIR2  G2B2  R3G3

 

該指令用於讀取 GRAM,如所示,ILI9341 在收到該指令後,第一次輸出的是dummy 數據,也就是無效的數據,第二次開始,讀取到的纔是有效的 GRAM 數據(從座標:SC,SP 開始),輸出規律爲:每一個顏色份量佔 8 個位,一次輸出 2 個顏色份量。好比:第一次輸出是 R1G1,隨後的規律爲:B1R2→G2B2→R3G3→B3R4→G4B4→R5G5... 以此類推。若是咱們只須要讀取一個點的顏色值,那麼只須要接收到參數 3 便可,若是要連續讀取(利用 GRAM地址自增,方法同上),那麼就按照上述規律去接收顏色數據。

 

以上,就是操做 ILI9341 經常使用的幾個指令,經過這幾個指令,咱們即可以很好的控制 ILI9341

顯示咱們所要顯示的內容了。

 

通常 TFTLCD 模塊的使用流程如圖:

硬 復 位  LCD RST=O;  delay_ms( 100L  LCD RST=I;  初 始 化 序 列  設 置 坐 標  寫 GRAM 指 令  寫 入 顏 色 數 據  LCD 顯 示  讀 GRAM 指 令  讀 出 顏 色 數 據  單 片 機 處 理

 

任何 LCD,使用流程均可以簡單的用以上流程圖表示。其中硬復位和初始化序列,只須要執行一次便可。而畫點流程就是:設置座標→寫 GRAM 指令→寫入顏色數據,而後在 LCD 上面,咱們就能夠看到對應的點顯示咱們寫入的顏色了。

讀點流程爲:設置座標→讀 GRAM 指令→讀取顏色數據,這樣就能夠獲取到對應點的顏色數據了。

 

以上只是最簡單的操做,也是最經常使用的操做,有了這些操做,通常就能夠正常使用 TFTLCD了。接下來咱們將該模塊(2.8 寸屏模塊)用來來顯示字符和數字,經過以上介紹,咱們能夠得出 TFTLCD 顯示須要的相關設置步驟以下:

  1. 設置 STM32F1 與 與 TFTLCD 模塊相鏈接的 IO 。

這一步,先將咱們與 TFTLCD 模塊相連的 IO 口進行初始化,以便驅動 LCD。這裏咱們用到的是 FSMC,FSMC 將在 18.1.2 節向你們詳細介紹。

  1. 初始化 TFTLCD 模塊。

即初始化序列,這裏咱們沒有硬復位 LCD,由於精英 STM32F103 的 LCD 接口,將 TFTLCD 的 RST 同 STM32F1 的 RESET 鏈接在一塊兒了,只要按下開發板的 RESET 鍵,就會對 LCD 進行硬復位。初始化序列,就是向 LCD 控制器寫入一系列的設置值(好比伽馬校準),這些初始化序列通常 LCD 供應商會提供給客戶,咱們直接使用這些序列便可,不須要深刻研究。在初始化以後,LCD 才能夠正常使用。

經過函數將字符和數字顯示到 TFTLCD 模塊上。

  1. 這一步則經過圖 18.1.1.5 左側的流程,即:設置座標→寫 GRAM 指令→寫 GRAM 來實現,可是這個步驟,只是一個點的處理,咱們要顯示字符/數字,就必需要屢次使用這個步驟,從而達到顯示字符/數字的目的,因此須要設計一個函數來實現數字/字符的顯示,以後調用該函數,就能夠實現數字/字符的顯示了。
相關文章
相關標籤/搜索