摘要:
????介紹了在C 語言環境下,在LCD 液晶顯示屏上實現多級嵌套菜單的一種簡便方法,提出了一個
結構緊湊、實用的程序模型。
???? 關鍵詞: 液晶顯示屏; 多級菜單; 單片機; C 語言; LCD
中圖分類號:TP311. 1 文獻標識碼:B
????? 收稿日期:2005 - 11 - 21
0 引言
??? 由于C 語言的結構性和模塊化,采用C 語言編寫的程序容易閱讀和維護,還有很好的可移植性。本文介紹一種用C 語言實現的LCD 多級菜單的方法,該方法已成功應用在煤礦安全監測設備上。
1 硬件環境及LCD 菜單實現的功能
??? 圖形點陣式液晶可顯示用戶自定義的任意符號和圖形,并可卷動顯示。它作為單片機系統人機交互界面的重要組成部分被廣泛應用于實時檢測和顯示的儀器儀表中,例如手機上的顯示屏就是圖形點陣液晶。
采用圖形點陣式液晶顯示較之其它顯示方式主要有以下優點:
(1) 工作電壓低、功耗極低。工作電壓僅為3~5 V ,工作電流≤10 μA/ cm2 ,特別適用于低功耗的儀器儀表中。
(2) 液晶顯示屬被動顯示,受外界光線干擾小。
(3) 圖形點陣式液晶可顯示的信息量大、分辨率高。
(4) 不產生電磁干擾。
(5) 可靠性高,使用壽命長。
??? 本文所介紹的LCD 采用128 ×64 點陣的液晶屏,因此可顯示16 ×16 點陣的漢字4 行8 列。菜單為多級嵌套形式,最長的有13 層,主要完成對某個測點各方面的設置或查詢,可通過“向上”、“向下”、“回退”、“確認”4 個鍵或遙控器來實現對菜單的選擇。具體功能:“向上”鍵:在本層菜單的項目中向上移動進行
選擇;“向下”鍵:在本層菜單的項目中向下移動進行選擇;“回退”鍵:取消本層的菜單設置,返回上層菜
單;“確認”鍵:確認本層的菜單設置,進入下級菜單。可根據用戶在菜單中的選擇項對測點進行某些設置,或者進行某些特殊的顯示,例如對某個測點的實時曲線顯示等。
2 程序設計
??? 根據需求,首先建立一個結構,并定義一個結構變量KbdTabSt ruct 。結構變量就是把多個不同類型的變量結合在一起形成的一個組合型變量,構成一個結構的各個變量稱為結構元素。該結構中共有6 個結構元素,分別是5 個字符型和1 個指針變量,5 個字符型變量分別為當前及各個按鍵的索引號,也就是操作的狀態號,最后1 個指針變量指向需執行函數。這樣就可以做一個結構數組,在結構數組里為每一個菜單項編制一個單獨的函數,并根據菜單的嵌套順序排好本菜單項的索引號,以及本級菜單項的上、下卷動的索引號和上、下級菜單的索號。
具體程序如下所述:
typedef st ruct
{
uchar KeyStateIndex ; / / 當前狀態索引號
uchar KeyDnState ; / / 按下“向下”鍵時轉向的狀態索引號
uchar KeyUpState ; / / 按下“向上”鍵時轉向的狀態索引號
uchar KeyCrState ; / / 按下“回車”鍵時轉向的狀態索引號
uchar KeyBackState ; / / 按下“退回”鍵時轉向的狀態索引號
void ( 3 CurrentOperate) ( ) ; / / 當前狀態應該執行的
功能操作
} KbdTabSt ruct ;
# define SIZE - OF KEYBD - MENU 55 / / 菜單總長度
KbdTabSt ruct code KeyTab[ SIZE - OF - KEYBD - MENU ] =
{
{0 ,0 ,0 ,1 ,0 , ( 3 MainJob1) } ,
{1 ,7 ,2 ,8 ,0 , ( 3 Dsp Point) } , / / 第一層
{2 ,1 ,3 ,8 ,0 , ( 3 DspCurve) ) , / / 第一層
{3 ,2 ,4 ,36 ,0 , ( 3 Dsp Kout) } , / / 第一層
{4 ,3 ,5 ,50 ,0 , ( 3 DisCloseDown) } , / / 第一層
{5 ,4 ,6 ,8 ,0 , ( 3 ModifyPoint) } , / / 第一層
{6 ,5 ,7 ,52 ,0 , ( 3 SetCloseDown) } , / / 第一層
{7 ,6 ,1 ,0 ,0 , ( 3 Cancel) } , / / 第一層
…
…
{52 ,53 ,53 ,0 ,1 , ( 3 OkSetCloseDown1) } ,
{53 ,52 ,52 ,0 ,1 , ( 3 OkSetCloseDown2) } ,
{54 ,0 ,0 ,0 ,0 , ( 3 Disable) } ,
} ;
void Get Keylnput (void)
{
switch ( status &0xf0)
{
case 0xe0 :/ / 回車鍵,找出新的菜單狀態編號
…
KeyFuncIndex = KeyTab[ KeyFuncIndex ] . KeyCrState ;
…
break ;
case 0xb0 :/ / 向下鍵,找出新的菜單狀態編號
…
KeyFuncIndex = KeyTab [ KeyFuncIndex ] . KeyDn2
State ;
…
break ;
case 0xd0 :/ / 向上鍵,找出新的菜單狀態編號
…
KeyFuncIndex = KeyTab [ KeyFuncIndex ] . KeyUp2
State ;
…
break ;
case 0x70 :/ / 回退鍵,找出新的菜單狀態編號
…
KeyFuncIndex = KeyTab [ KeyFuncIndex ] . KeyBack2
State ;
…
break ;
case 0 ;
ret urn ; / / 錯誤的處理
break ;
}
KeyFuncPt r = KeyTab[ KeyFuncIndex ] . CurrentOperate ;
( 3 KeyFuncPt r) () ; / / 執行當前按鍵的操作
}
3 結語
本文介紹了C 語言編程的特點,簡單介紹了LCD 作為人機界面的特征,并介紹了一種用C 語言實現的LCD 多級嵌套菜單結構。該結構緊湊、性能穩定可靠,已多次使用在安全監測設備中。
系統要運行可靠,對其有關設備是否能夠安全運行地檢測也是很重要的一環。因而程序對系統所涉及的設備都進行了全面監測,主要有電動球閥故障、出水口電動閘閥故障、水位傳感器故障、水泵啟停時間、運行電流、電動機溫度、電動機和水泵軸承溫度、出水壓力、高壓柜狀態、高壓柜故障、閥門故障等,并視情況進行事故自動處理或報警要求檢修。本系統中各個機組有3 種運行選擇:自動、半自動和手動。通常情況下按照水位高低和系統時間自動選擇是否開泵,同時觀察水位變化率從而選擇需要開幾臺泵。在半自動方式下,一旦該泵的開泵信號被監測到,系統將自動根據當前情況用射流方式或者真空泵方式來抽真空,當真空度達到要求后啟動電動機, 同時觀測出水口處的壓力, 當其大于5 MPa時打開出水口處的電動閘閥實施正常排水。為了完善系統,防止意外情況的發生,同時為了便于檢修,還保留了手動方式,該方式在正常運行情況下是不使用的。.
(轉)