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