承接前文,將原本緊耦合於 μC/OS-GUI 的 LCD 模擬器剝離重構,形成獨立、可配置、介面清晰的模組,為自製 chGUI 奠基。本文詳述配置參數、對外介面、專案架構與輸入介面設計。
沿用 μC/GUI 參數命名,便於移植既有專案:
| 宏定義 | 預設值 | 說明 |
|---|---|---|
LCD_XSIZE | 640 | LCD 寬度 (像素) |
LCD_YSIZE | 480 | LCD 高度 (像素) |
LCD_BITSPERPIXEL | 8 | 單像素位元數(色深) |
LCD_FIXEDPALETTE | 332 | RGB 位元分配:R=3, G=3, B=2 |
LCD_SWAP_RB | 1 | 紅藍通道是否交換 (1=交換) |
內部以 24-bit 真彩色 (R8G8B8) 渲染,自動依上述配置將索引值轉換為真彩色。
// 在模擬器 LCD 上繪製單一像素
// x, y: 座標; Index: 依 LCD_FIXEDPALETTE 定義的色彩索引值
void LCDSIM_SetPixelIndex(int x, int y, int Index);
// 讀取指定座標的色彩索引值
int LCDSIM_GetPixelIndex(int x, int y);
設計考量:極簡介面降低耦合,上層 GUI 僅需實作邏輯座標到像素的映射,色彩空間轉換完全由模擬器內部處理。
chGUI_Project/
├── LCD_SIM/ # LCD 模擬器 (不需修改,僅配置)
│ ├── myType.h # 通用型別定義 (供 chGUI 使用)
│ └── convcolor/ # 從 μC/GUI 移植的色彩轉換模組
├── chGUI/ # 核心 GUI 庫 (主要開發區)
│ └── ... # 視窗管理、控件、佈局、事件分派等
└── Application/ # 應用層 (測試程式、產品專案)
└── main.c
convcolor 現階段歸屬模擬器,未來若 chGUI 內建色彩管理可再遷移。
// 讀取按鍵:0=無按鍵, 非0=鍵值
int CXM_GetKey(void);
// 讀取觸控狀態:0=無觸控, 非0=有觸控
// pState 輸出座標 (GUI_PID_STATE 結構)
int CXM_TOUCH_GetState(GUI_PID_STATE *pState);
已知限制:無事件佇列緩衝,高頻輸入可能丟失;對目前測試層級應用足夠,量產階段需加入環狀緩衝區。
「把心裡清楚的架構用文字精準表達,比寫代碼難得多。致敬所有技術作家!」
本文為作者自製嵌入式 GUI 系列第三篇,持續更新中。