找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6464|回復: 3
打印 上一主題 下一主題
收起左側

ucGUI移植經(jīng)驗總結

[復制鏈接]
跳轉到指定樓層
樓主
ID:438753 發(fā)表于 2018-12-10 20:29 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
UCGUI移植經(jīng)驗總結 BYBYBYBY :機長
如果沒有找到 ucGUI 沒有提供你所使用的 LCD 驅動,看完本文章,定有大收獲。
本教程是將 ucGUI 移植到 STM32 單片機 。 LCD 驅動器為 HX8347 。 為了教程有更大的通用性, LCD 驅動程序未采用 ucGUI 官方提供。編譯環(huán)境為 5.4 。
本教程可作為其它單片機、 LCD 、編譯環(huán)境的參考。
不足之處,敬請指出。
1 解壓 “ u c GUI-V3-90a---- 非常好用 .rar ”
這個版本的優(yōu)點:需要改動的地方少;編譯時不會由于在 Linux 環(huán)境下編輯源代碼 , 然后又拿回 IAR 環(huán)境編譯造成 大量 “ Warning[Pa050]: …… ” ; LCD 底層驅動獲取方便,不依賴于 u c GUI 官方驅動。
順次打開 “ uCGUI-V3-90a → UCGUI390a → Start ” 。 將 Start 文件夾下的 Config 和 GU I
文件夾復制的自己所建立工程文件夾。
然后打開 IAR ,在 Workspace 中添加 Config 和 GUI 文件夾內(nèi)容。添加完后,如下圖所示。其中 “ FWLib ” 是我的工程中所需要的,屬于多余項。



對應 LCD 驅動程序,此處填 -1 ,然后 解壓 “ u c GUI-V3-90a---- 非常好用 .rar ” ,打開 GUI 文件夾下的 LCDDriver 文件夾,打開 LCDDummy.c 文件進一步配置,具體配置在第 5 步講 */
#define LCD_FIXEDPALETTE 565 /* 定義顏色查詢表,此處選擇與 LCD 有關,具體參數(shù)查看 LCD 資料,查詢顏色格式。然后打開 GUI 文件夾下的 ConvertColor 文件夾 ,查找對應文件進行配置 */
#define LCD_SWAP_RB 1 /* 激活紅 、 藍基色的交換 。 此處建議首先配置為 0 。待所有配置完成后,運行程序,設定全屏顯示為藍色。如果顯示為紅色,改為 1 ,即可正常顯示 */
#define LCD_INIT_CONTROLLER() LCD_InitPanel() /*LCD_InitPanel() 是之前已經(jīng)編寫好的 LCD 初始化程序,非 ucGUI 自帶 */
如果說 LCD 自帶的驅動程序已經(jīng)對寄存器進行了配置,那么以下寄存器配置語句,請注釋掉,否則在程序運行時可能會出現(xiàn)錯誤。
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ù),在其留空處,調用 LCD 在獲。 x,y )處以某一顏色的函數(shù)。
通過以上幾步 , ucGUI 移植基本完成 。 接下來所要做的就是 , 編寫測試函數(shù) , 然后將整個程序進行編譯。有錯誤,該錯誤。如果遇到 ucGUI 的變量沒有定義,則在出現(xiàn)的錯誤文件開頭加入 ucGUI 對應的頭文件。
Ex: 調用 GUI_SetColor(GUI_BLACK);
編譯時,出現(xiàn)錯誤,提示 GUI_BLACK 沒有定義。則只需在出現(xiàn)錯誤的 C 文件開頭加上 “ #include "GUI.h" ” ,即可解決。

6 底層配置優(yōu)化
如果 ucGUI 已經(jīng)移植成功,并通過測試,那么請繼續(xù)看這一節(jié)。如果沒有,請?zhí)^。
在測試 ucGUI 時 , 我發(fā)現(xiàn) , 在刷屏 ( 將 LCD 屏幕全部填充為某一顏色 ) 時 , 調用 ucGU I的刷屏函數(shù) , 遠不如 LCD 的刷屏函數(shù)執(zhí)行速度快 。 通過測試 , ucGUI 的刷屏速度不及 LC D的 20 分之 1 。
通過查看 ucGUI 的底層文件,我找到了 ucGUI 刷屏速度慢的原因。
ucGUI 的畫圖機制是找到某一個點 , 然后對其進行顏色填充 ; 然后再找下一個點對其進行顏色填充。我們通常所用的 LCD 驅動器,如果說所畫圖像,某一區(qū)域顏色單一,在設定繪圖區(qū)域后,順次進行顏色填充,無需找一個點畫一個點。這就是 ucGUI 畫圖時不如 LC D速度快的原因。

優(yōu)化的方法很簡單:
打開對應的 ucGUI 的 LCDDriver 文件夾下的 LCD 驅動程序 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) ” 。這樣的話,不再找一個點畫一個點。大大加快了 ucGUI 的畫圖執(zhí)行速率。
本節(jié)小結:此種優(yōu)化方法并不適用于所有的 LCD 驅動器。 ucGUI 畫圖時采取找一個點畫一個點的方法,應該是出于程序通用性的考慮。如果 ucGUI 移植完成后,刷屏效果可以接受,為了程序穩(wěn)定性考慮,不建議進行優(yōu)化。

常見問題解決:
如果移植后,顯示的畫面進行了橫豎翻轉,或者鏡像翻轉。只需要在 LCDConf.h 文件中,加入以下語句

完整的pdf格式文檔51黑下載地址:
ucGUI移植經(jīng)驗總結.pdf (290.02 KB, 下載次數(shù): 63)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:495323 發(fā)表于 2019-10-25 12:44 來自手機 | 只看該作者
你成功了嗎?能否交流一下
回復

使用道具 舉報

板凳
ID:258516 發(fā)表于 2020-7-16 17:27 | 只看該作者
這是 本尊 多年前寫的文章,
請立即 將 本文章中的 PDF,
修改為免費下載 。!
回復

使用道具 舉報

地板
ID:229137 發(fā)表于 2020-10-3 18:23 | 只看該作者
還是下載了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表