摘 要: 提出了一種基于ARM9嵌入式系統(tǒng)的LCD多級菜單結構的實現(xiàn)方法。本方法使用了鏈表數(shù)據(jù)結構。它建立的菜單網狀模型具有結構清晰、擴展性好、便于維護的特點。根據(jù)應用和嵌入式系統(tǒng)中液晶屏自身的特點提供了鎖屏與解鎖功能。
關鍵詞: ARM9;人機交互界面;多級菜單;鎖屏;解鎖
嵌入式應用系統(tǒng)中,使用點陣式液晶屏作為人機交互的界面和使用鍵盤控制顯示的內容已成為主流趨勢。但點陣式液晶屏顯示的內容非常有限,如何設計一個合理的結構化菜單就成了嵌入式開發(fā)中非常關鍵的問題。本文介紹了一種用鏈表表示菜單的樹形結構。該方法使設計的菜單結構清晰、功能明確、擴展性好,易維護。
此外,良好的菜單設計除包括基本的工作流程選擇外,還應包括自動鎖屏、手動鎖屏及解鎖的操作。這樣可以延長LCD的使用壽命,起到保護LCD顯示屏的作用。
下面以6個按鍵、ARM芯片LPC3250和OCMJ2X10C_5液晶屏組成的系統(tǒng)為例,在C語言環(huán)境下進行介紹。
1 系統(tǒng)硬件總體框圖
本文設計了一個在ARM嵌入式平臺上實現(xiàn)LCD160×32多級菜單的電路。采用LPC3250的ARM芯片為控制芯片,OCMJ2X10C_5液晶屏為顯示模塊,采用鍵盤掃描作為輸入控制。系統(tǒng)總體硬件框圖如圖1所示。
2 鍵盤掃描模塊
鎖屏和解鎖功能需區(qū)分按下系統(tǒng)鍵的時間長短,鍵盤中斷輸入控制方式不易實現(xiàn)這種區(qū)分。但因鍵盤掃描有一個合理的時間閾值,從而容易實現(xiàn)這種區(qū)分。故本文采用鍵盤掃描作為輸入控制,其電路原理圖如圖2所示。
3 點陣式液晶模塊
本文中系統(tǒng)采用160×32點陣液晶屏[1],可顯示16×16點陣的漢字2行10列。它還可顯示字母和數(shù)字,并且提供了多功能指令。本文中液晶屏和CPU之間采用串行連接方式[2],其電路原理圖如圖3所示。
4 基于鏈表的網狀菜單模型
本文采用鏈表法[3]將每個菜單抽象成統(tǒng)一的對象,用面向對象的思想設計菜單結構。每個對象節(jié)點需儲存自己的基本屬性及其父節(jié)點、第一個子節(jié)點和左右兄弟節(jié)點的位置。本文以三級菜單為例,基于C語言用鏈表結構來完成對菜單樹的設計,通過“上”、“下”、“左”、“右”、“確認”、“返回”6個按鍵實現(xiàn)對菜單的選擇。
鏈表法實現(xiàn)多級菜單的顯示,首先建立一個結構體,定義結構體變量。本文中結構體的C語言源代碼如下:
typedef struct MENU_STRUCT{
INT8U name[LCD_WIDTH_IN_HALF_WORD];
INT8U value[LCD_WIDTH_IN_HALF_WORD];
INT32S value_PreIdx;/*保存value上一個值*/
INT32S value_CurIdx;/*保存value當前值*/
INT8U value_addr;/*menu在LCD屏上的顯示位置*/
INT8U idx[8];/*菜單索引號*/
pfMenu pfHook;/*菜單響應函數(shù)*/
pfMenu pfDisp;/*菜單顯示函數(shù)*/
struct MENU_STRUCT*parent;/*菜單的上一級菜單*/
struct MENU_STRUCT*firstchild;
/*菜單的第一個子菜單*/
struct MENU_STRUCT*nextsiling;
/*菜單的下一個兄弟菜單*/
struct MENU_STRUCT*presiling;
/*菜單的前一個兄弟菜單*/
struct MENU_STRUCT*nextNode;
/*用于菜單數(shù)組的管理*/
}*pMENU_STRUCT;
結構體指針parent、firstchild、nextsiling、presiling和nextNode管理一段存儲菜單項的內存空間,它們通過鏈表的方式建立起菜單的網狀結構,便于菜單項的刪除、擴展和維護。通過鏈表結構可由當前菜單確定它的父菜單及第一個兄弟菜單,從而查找到當前菜單所在的菜單項并在液晶屏上顯示。每層的菜單結構模型如圖4所示。
5 菜單響應按鍵的基本事件
通過按鍵事件可對菜單進行顯示、編輯、進入下級菜單、返回上級菜單、鎖屏、解鎖等操作。在μC/OS-II系統(tǒng)中[4-5],按鍵任務模塊發(fā)送按鍵狀態(tài)消息,LCD顯示任務模塊接收消息并做相應的消息處理。非鎖屏狀態(tài)程序流程圖如圖5所示。
6 液晶屏鎖屏與解鎖
嵌入式系統(tǒng)顯示屏離不開鎖屏與解鎖操作。鎖屏狀態(tài)下按任意鍵可點亮LCD液晶屏并顯示解鎖提示信息。通過手動長按系統(tǒng)鍵或持續(xù)一段時間無按鍵操作,則進入鎖屏狀態(tài);鎖屏和解鎖的流程圖分別如圖6、圖7所示。
本文以6個按鍵、LPC3250的ARM芯片和LCD液晶屏為例,在C語言環(huán)境下介紹了用鏈表設計菜單結構和鎖屏解鎖的方法。該方法設計的菜單結構清晰,擴展性好,具有很好的可移植性,易維護,適用于嵌入式應用系統(tǒng)開發(fā)。同時,此方法也為其他應用系統(tǒng)的多級菜單設計提供了參考和選擇。
參考文獻
[1] 陸錚,羅嘉.單片機C語言下LCD多級菜單的一種實現(xiàn)方法[J].工礦自動化,2006(1):50-51.
[2] 林曉毅,謝劍英.圖形點陣式液晶結構化菜單設計與實現(xiàn)[J].控制工程,2007,14(4):391-394.
[3] 嚴蔚敏,吳偉民.數(shù)據(jù)結構(第2版)[M].北京:清華大學出版社,1992.
[4] 高俊堯,趙佳.基于μC/OS-II的顯示控制系統(tǒng)開發(fā)[J].單片機與嵌入式系統(tǒng)應用,2009(12):43-45.
[5] JEAN LABROSSE J.嵌入式實時操作系統(tǒng)μC/OS-II(第2版)[M].邵貝貝,等譯.北京:北京航空航天大學出版社,2003.