LCD顯示方向


一、ILI9341內存到顯示地址的映射

  本文只討論“正常顯示”,不討論“垂直滾動顯示”模式。

  可以看到物理內存被兩個指針訪問,行指針和列指針,行指針范圍從000h到013Fh,列指針范圍為0000h到00EFh。也就是說,物理內存和LCD顯示屏的對應關系是一種豎屏(240*320)的對應的關系。至於如何讓GRAM數據顯示到LCD屏上,不需要我們去考慮,只要知道這種對應關系就可以了。

  那么ILI9341有8種顯示方式:左上角->右下角(豎屏)、左下角->右上角(豎屏)、右上角->左下角(豎屏)、右下角->左上角(豎屏)、左上角->右下角(橫屏)、左下角->右上角(橫屏)、右上角->左下角(橫屏)、右下角->左上角(橫屏),又是怎么實現的呢?

二、MCU讀寫GRAM的方向

1、來自MCU讀寫數據流

2、ILI9341讀寫GRAM的控制

1) ILI9341讀寫GRAM的控制器的結構圖

2) 虛擬地址到物理地址的轉換關系

  由此可見,正是通過虛擬地址到物理地址的轉換,使得寫入到GRAM中圖片的映射方向發生了改變。也就是說,通過改變寫入GRAM的位置,改變了LCD的顯示方向。

3、8中顯示方向描述

看圖說明:

  1. MV、MX、MY的控制位在命令0x36對應的寄存器中
  2. Image in the Memory(MPU)中描述的是在MCU的240(寬)*320(高)*16bit(假設565顯示方式)中顯示了一個圖像“F”。
  3. Image In the Driver(Frame Memory)描述的是經過虛擬地址到物理地址轉換器后,實際傳輸到GRAM中的數據顯示陣列。
  4. B、E分別描述了MCU傳輸的數據流的起始位置和終止位置。

注:(x,y)代表(列地址,行地址)

example 1: Y-Mirror

   MCU向(0,0)寫入數據,經過虛擬地址到物理地址的轉換,實際寫入到GRAM的地址是(0,319),對應LCD的左下角。MCU向(239,319)寫入數據,經過虛擬地址到物理地址的轉換,實際寫入到GRAM的地址是(239,0),對應LCD的右上角。最終的效果就是LCD的顯示實現了Y方向上的翻轉。

example 1: X-Y Exchange

   MCU向(0,0)寫入數據,經過虛擬地址到物理地址的轉換,實際寫入到GRAM的地址是(0,0),對應LCD的左上角。MCU向(239,319)寫入數據,經過虛擬地址到物理地址的轉換,實際寫入到GRAM的地址是(319,239),對應LCD的右下角。

  經過這樣的變換,LCD變成了橫屏顯示。最終的效果就是LCD的顯示實現了行列的交換。

4、8種顯示方向探秘

  不論哪種顯示方向,其實並沒有改變GRAM物理內存與LCD顯示屏的對應關系,也即是說GRAM物理內存與顯示屏之間的對應關系、內存到LCD的掃描方式,是固定不變的。

  那么這種顯示方向是怎么說起的?

  實際上,顯示方向說的是MCU的顯示緩存MPU(或者MCU讀寫GRAM的數據流)與LCD顯示屏的對應關系。由於GRAM物理內存與LCD顯示屏的對應關系是不會改變的,所以就是MPU與GRAM的對應關系,也即是虛擬地址與物理地址的轉換關系。

  用戶在寫程序的過程中,LCD顯示操作是更改MPU的內容,至於MPU到GRAM的傳輸是驅動程序完成的。也就是說,用戶控制顯示的內容,接觸的是MPU,而更改顯示方向需要配置ILI9341的寄存器。

  其實,ILI9341的掃描方向的功能也可以沒有,這個時候需要用戶自己軟件進行轉換,實際上就是那么轉換關系表。

三、測試

1、左上角->右下角(豎屏)

2、左下角->右上角(豎屏)

3、右上角->左下角(豎屏)

4、右下角->左上角(豎屏)

5、左上角->右下角(橫屏)

6、左下角->右上角(橫屏)

7、右上角->左下角(橫屏)

8、右下角->左上角(橫屏)

 

參考資料:《ILI9341芯片手冊》

附STM32測試代碼:GramScan_Test.zip


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM