單片機(jī)C語言下LCD多級菜單的一種實(shí)現(xiàn)方法
1 硬件環(huán)境及LCD 菜單實(shí)現(xiàn)的功能
采用圖形點(diǎn)陣式液晶顯示較之其它顯示方式主要有以下優(yōu)點(diǎn):
(1) 工作電壓低、功耗極低。工作電壓僅為3~5 V ,工作電流≤10 μA/ cm2 ,特別適用于低功耗的儀器儀表中。
(2) 液晶顯示屬被動(dòng)顯示,受外界光線干擾小。
(3) 圖形點(diǎn)陣式液晶可顯示的信息量大、分辨率高。
(4) 不產(chǎn)生電磁干擾。
(5) 可靠性高,使用壽命長。
選擇;“向下”鍵:在本層菜單的項(xiàng)目中向下移動(dòng)進(jìn)行選擇;“回退”鍵:取消本層的菜單設(shè)置,返回上層菜
單;“確認(rèn)”鍵:確認(rèn)本層的菜單設(shè)置,進(jìn)入下級菜單??筛鶕?jù)用戶在菜單中的選擇項(xiàng)對測點(diǎn)進(jìn)行某些設(shè)置,或者進(jìn)行某些特殊的顯示,例如對某個(gè)測點(diǎn)的實(shí)時(shí)曲線顯示等。
2 程序設(shè)計(jì)
具體程序如下所述:
typedef st ruct
{
uchar KeyStateIndex ; / / 當(dāng)前狀態(tài)索引號
uchar KeyDnState ; / / 按下“向下”鍵時(shí)轉(zhuǎn)向的狀態(tài)索引號
uchar KeyUpState ; / / 按下“向上”鍵時(shí)轉(zhuǎn)向的狀態(tài)索引號
uchar KeyCrState ; / / 按下“回車”鍵時(shí)轉(zhuǎn)向的狀態(tài)索引號
uchar KeyBackState ; / / 按下“退回”鍵時(shí)轉(zhuǎn)向的狀態(tài)索引號
void ( 3 CurrentOperate) ( ) ; / / 當(dāng)前狀態(tài)應(yīng)該執(zhí)行的
功能操作
} 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 :/ / 回車鍵,找出新的菜單狀態(tài)編號
…
KeyFuncIndex = KeyTab[ KeyFuncIndex ] . KeyCrState ;
…
break ;
case 0xb0 :/ / 向下鍵,找出新的菜單狀態(tài)編號
…
KeyFuncIndex = KeyTab [ KeyFuncIndex ] . KeyDn2
State ;
…
break ;
case 0xd0 :/ / 向上鍵,找出新的菜單狀態(tài)編號
…
KeyFuncIndex = KeyTab [ KeyFuncIndex ] . KeyUp2
State ;
…
break ;
case 0x70 :/ / 回退鍵,找出新的菜單狀態(tài)編號
…
KeyFuncIndex = KeyTab [ KeyFuncIndex ] . KeyBack2
State ;
…
break ;
case 0 ;
ret urn ; / / 錯(cuò)誤的處理
break ;
}
KeyFuncPt r = KeyTab[ KeyFuncIndex ] . CurrentOperate ;
( 3 KeyFuncPt r) () ; / / 執(zhí)行當(dāng)前按鍵的操作
}
3 結(jié)語
本文介紹了C 語言編程的特點(diǎn),簡單介紹了LCD 作為人機(jī)界面的特征,并介紹了一種用C 語言實(shí)現(xiàn)的LCD 多級嵌套菜單結(jié)構(gòu)。該結(jié)構(gòu)緊湊、性能穩(wěn)定可靠,已多次使用在安全監(jiān)測設(shè)備中。
系統(tǒng)要運(yùn)行可靠,對其有關(guān)設(shè)備是否能夠安全運(yùn)行地檢測也是很重要的一環(huán)。因而程序?qū)ο到y(tǒng)所涉及的設(shè)備都進(jìn)行了全面監(jiān)測,主要有電動(dòng)球閥故障、出水口電動(dòng)閘閥故障、水位傳感器故障、水泵啟停時(shí)間、運(yùn)行電流、電動(dòng)機(jī)溫度、電動(dòng)機(jī)和水泵軸承溫度、出水壓力、高壓柜狀態(tài)、高壓柜故障、閥門故障等,并視情況進(jìn)行事故自動(dòng)處理或報(bào)警要求檢修。本系統(tǒng)中各個(gè)機(jī)組有3 種運(yùn)行選擇:自動(dòng)、半自動(dòng)和手動(dòng)。通常情況下按照水位高低和系統(tǒng)時(shí)間自動(dòng)選擇是否開泵,同時(shí)觀察水位變化率從而選擇需要開幾臺(tái)泵。在半自動(dòng)方式下,一旦該泵的開泵信號被監(jiān)測到,系統(tǒng)將自動(dòng)根據(jù)當(dāng)前情況用射流方式或者真空泵方式來抽真空,當(dāng)真空度達(dá)到要求后啟動(dòng)電動(dòng)機(jī), 同時(shí)觀測出水口處的壓力, 當(dāng)其大于5 MPa時(shí)打開出水口處的電動(dòng)閘閥實(shí)施正常排水。為了完善系統(tǒng),防止意外情況的發(fā)生,同時(shí)為了便于檢修,還保留了手動(dòng)方式,該方式在正常運(yùn)行情況下是不使用的。
評論