UCGUI移植經驗總結 BYBYBYBY :機長
如果沒有找到 ucGUI 沒有提供你所使用的 LCD 驅動,看完本文章,定有大收獲。
本教程是將 ucGUI 移植到 STM32 單片機 。 LCD 驅動器為 HX8347 。 為了教程有更大的通用性, LCD 驅動程序未采用 ucGUI 官方提供。編譯環境為 5.4 。
本教程可作為其它單片機、 LCD 、編譯環境的參考。
不足之處,敬請指出。
1 解壓 “ u c GUI-V3-90a---- 非常好用 .rar ”
這個版本的優點:需要改動的地方少;編譯時不會由于在 Linux 環境下編輯源代碼 , 然后又拿回 IAR 環境編譯造成 大量 “ Warning[Pa050]: …… ” ; LCD 底層驅動獲取方便,不依賴于 u c GUI 官方驅動。
順次打開 “ uCGUI-V3-90a → UCGUI390a → Start ” 。 將 Start 文件夾下的 Config 和 GU I
文件夾復制的自己所建立工程文件夾。
然后打開 IAR ,在 Workspace 中添加 Config 和 GUI 文件夾內容。添加完后,如下圖所示。其中 “ FWLib ” 是我的工程中所需要的,屬于多余項。
0.png (90.29 KB, 下載次數: 39)
下載附件
2018-12-11 03:17 上傳
對應 LCD 驅動程序,此處填 -1 ,然后 解壓 “ u c GUI-V3-90a---- 非常好用 .rar ” ,打開 GUI 文件夾下的 LCDDriver 文件夾,打開 LCDDummy.c 文件進一步配置,具體配置在第 5 步講 */
#define LCD_FIXEDPALETTE 565 /* 定義顏色查詢表,此處選擇與 LCD 有關,具體參數查看 LCD 資料,查詢顏色格式。然后打開 GUI 文件夾下的 ConvertColor 文件夾 ,查找對應文件進行配置 */
#define LCD_SWAP_RB 1 /* 激活紅 、 藍基色的交換 。 此處建議首先配置為 0 。待所有配置完成后,運行程序,設定全屏顯示為藍色。如果顯示為紅色,改為 1 ,即可正常顯示 */
#define LCD_INIT_CONTROLLER() LCD_InitPanel() /*LCD_InitPanel() 是之前已經編寫好的 LCD 初始化程序,非 ucGUI 自帶 */
如果說 LCD 自帶的驅動程序已經對寄存器進行了配置,那么以下寄存器配置語句,請注釋掉,否則在程序運行時可能會出現錯誤。
LCD_WRITE_REGLH(0x00>>1,LCD_REG0,LCD_REG1); \
LCD_WRITE_REGLH(0x02>>1,LCD_REG2,LCD_REG3); \
LCD_WRITE_REGLH(0x04>>1,LCD_REG4,LCD_REG5); \
同理,找到 void LCD_L0_GetPixelIndex 函數,在其留空處,調用 LCD 在獲。 x,y )處以某一顏色的函數。
通過以上幾步 , ucGUI 移植基本完成 。 接下來所要做的就是 , 編寫測試函數 , 然后將整個程序進行編譯。有錯誤,該錯誤。如果遇到 ucGUI 的變量沒有定義,則在出現的錯誤文件開頭加入 ucGUI 對應的頭文件。
Ex: 調用 GUI_SetColor(GUI_BLACK);
編譯時,出現錯誤,提示 GUI_BLACK 沒有定義。則只需在出現錯誤的 C 文件開頭加上 “ #include "GUI.h" ” ,即可解決。
6 底層配置優化
如果 ucGUI 已經移植成功,并通過測試,那么請繼續看這一節。如果沒有,請跳過。
在測試 ucGUI 時 , 我發現 , 在刷屏 ( 將 LCD 屏幕全部填充為某一顏色 ) 時 , 調用 ucGU I的刷屏函數 , 遠不如 LCD 的刷屏函數執行速度快 。 通過測試 , ucGUI 的刷屏速度不及 LC D的 20 分之 1 。
通過查看 ucGUI 的底層文件,我找到了 ucGUI 刷屏速度慢的原因。
ucGUI 的畫圖機制是找到某一個點 , 然后對其進行顏色填充 ; 然后再找下一個點對其進行顏色填充。我們通常所用的 LCD 驅動器,如果說所畫圖像,某一區域顏色單一,在設定繪圖區域后,順次進行顏色填充,無需找一個點畫一個點。這就是 ucGUI 畫圖時不如 LC D速度快的原因。
優化的方法很簡單:
打開對應的 ucGUI 的 LCDDriver 文件夾下的 LCD 驅動程序 C 文件。找到 “ voidLCD_L0_DrawHLine (int x0, int y, int x1) ” 函 數 。 將 “ else ” 語 句 下 的“ LCD_L0_SetPixelIndex(x0, y, LCD_COLORINDEX); ” 改寫為 LCD 顏色填充函數 。 比如說 ,我將其改為了 “ LCD_WriteRAM(LCD_COLORINDEX) ” 。這樣的話,不再找一個點畫一個點。大大加快了 ucGUI 的畫圖執行速率。
本節小結:此種優化方法并不適用于所有的 LCD 驅動器。 ucGUI 畫圖時采取找一個點畫一個點的方法,應該是出于程序通用性的考慮。如果 ucGUI 移植完成后,刷屏效果可以接受,為了程序穩定性考慮,不建議進行優化。
常見問題解決:
如果移植后,顯示的畫面進行了橫豎翻轉,或者鏡像翻轉。只需要在 LCDConf.h 文件中,加入以下語句
完整的pdf格式文檔51黑下載地址:
ucGUI移植經驗總結.pdf
(290.02 KB, 下載次數: 63)
2018-12-10 20:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|