微控制器LCD簡單多級選單實現
阿新 • • 發佈:2019-01-05
微控制器簡單多級選單實現
多年以前,我寫過一篇12864lcd顯示屏多級選單程式碼實現 部落格,當時草率的實現了一個選單畫面,然並沒有實際用處,因為作為選單的選取響應動作並沒有在其中實現。多年以後,接手的專案恰恰需要選單,前人已經實現了一個選單畫面,只是簡單的畫面並沒有選單的實質功能,修修補補了好幾次之後終於受不了了,決定重新實現,就在這前一篇程式碼基礎上。
介面顯示相關資料結構
typedef void (* interface_f) (void); /* 介面互動顯示函式 */
typedef void (* draw_label_f) (void); /* 介面初始顯示畫面 */
typedef struct _interface {
draw_label_f label;
interface_f interface;
} interface_t;
interface_t display_set(interface_t faceFunc); /* 介面互動函式設定*/
void display_load(void); /* 介面顯示,在主迴圈函式(while)中呼叫 */
型別為interface_t
的變數就是一個顯示介面,這個介面可以有按鍵互動,畫面更新等動作。函式display_set(interface_t faceFunc)
主要功能實現為設定當前的顯示介面,並呼叫interface_t
draw_label_f
成員函式用以繪製介面初始畫面。函式display_load()
功能就是在主while迴圈中呼叫interface_t
資料結構中的interface_f
成員函式,該成員函式用於實時更新畫面。
如定義矩陣主顯示介面為:
interface_t interface_main = {NULL , main_interface };
相關函式實現如下:
void main_interface(void) { #ifdef INTWDG ActiveWatchDog(); #endif if(display_update_flag == 'Y') { display_update_flag = 'N'; main_draw_f(); } ProcessKeyData(); }
與介面顯示相關的main()函式程式碼實現如下:
display_set(interface_main);
while( 1 )
{
display_load();
}
選單互動相關資料結構
選單顯示介面定義如下:
interface_t interface_menu = {reflash_lcd, menu_main};
當按鍵設定按下,呼叫display_set(interface_menu)
觸發切換顯示介面為 interface_menu,這樣介面顯示變為選單介面了。