新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)C語言下LCD多級(jí)菜單的一種實(shí)現(xiàn)方法

單片機(jī)C語言下LCD多級(jí)菜單的一種實(shí)現(xiàn)方法

作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
0  引言

由于C 語言的結(jié)構(gòu)性和模塊化,采用C 語言編寫的程序容易閱讀和維護(hù),還有很好的可移植性。本文介紹一種用C 語言實(shí)現(xiàn)的LCD 多級(jí)菜單的方法,該方法已成功應(yīng)用在煤礦安全監(jiān)測設(shè)備上。

1  硬件環(huán)境及LCD 菜單實(shí)現(xiàn)的功能
圖形點(diǎn)陣式液晶可顯示用戶自定義的任意符號(hào)和圖形,并可卷動(dòng)顯示。它作為單片機(jī)系統(tǒng)人機(jī)交互界面的重要組成部分被廣泛應(yīng)用于實(shí)時(shí)檢測和顯示的儀器儀表中,例如手機(jī)上的顯示屏就是圖形點(diǎn)陣液晶。

采用圖形點(diǎn)陣式液晶顯示較之其它顯示方式主要有以下優(yōu)點(diǎn):

(1) 工作電壓低、功耗極低。工作電壓僅為3~5 V ,工作電流≤10 μA/ cm2 ,特別適用于低功耗的儀器儀表中。
(2) 液晶顯示屬被動(dòng)顯示,受外界光線干擾小。
(3) 圖形點(diǎn)陣式液晶可顯示的信息量大、分辨率高。
(4) 不產(chǎn)生電磁干擾。
(5) 可靠性高,使用壽命長。

本文所介紹的LCD 采用128 ×64 點(diǎn)陣的液晶屏,因此可顯示16 ×16 點(diǎn)陣的漢字4 行8 列。菜單為多級(jí)嵌套形式,最長的有13 層,主要完成對(duì)某個(gè)測點(diǎn)各方面的設(shè)置或查詢,可通過“向上”、“向下”、“回退”、“確認(rèn)”4 個(gè)鍵或遙控器來實(shí)現(xiàn)對(duì)菜單的選擇。具體功能:“向上”鍵:在本層菜單的項(xiàng)目中向上移動(dòng)進(jìn)行
選擇;“向下”鍵:在本層菜單的項(xiàng)目中向下移動(dòng)進(jìn)行選擇;“回退”鍵:取消本層的菜單設(shè)置,返回上層菜
單;“確認(rèn)”鍵:確認(rèn)本層的菜單設(shè)置,進(jìn)入下級(jí)菜單。可根據(jù)用戶在菜單中的選擇項(xiàng)對(duì)測點(diǎn)進(jìn)行某些設(shè)置,或者進(jìn)行某些特殊的顯示,例如對(duì)某個(gè)測點(diǎn)的實(shí)時(shí)曲線顯示等。

本文引用地址:http://butianyuan.cn/article/201611/321459.htm

2  程序設(shè)計(jì)
根據(jù)需求,首先建立一個(gè)結(jié)構(gòu),并定義一個(gè)結(jié)構(gòu)變量KbdTabSt ruct 。結(jié)構(gòu)變量就是把多個(gè)不同類型的變量結(jié)合在一起形成的一個(gè)組合型變量,構(gòu)成一個(gè)結(jié)構(gòu)的各個(gè)變量稱為結(jié)構(gòu)元素。該結(jié)構(gòu)中共有6 個(gè)結(jié)構(gòu)元素,分別是5 個(gè)字符型和1 個(gè)指針變量,5 個(gè)字符型變量分別為當(dāng)前及各個(gè)按鍵的索引號(hào),也就是操作的狀態(tài)號(hào),最后1 個(gè)指針變量指向需執(zhí)行函數(shù)。這樣就可以做一個(gè)結(jié)構(gòu)數(shù)組,在結(jié)構(gòu)數(shù)組里為每一個(gè)菜單項(xiàng)編制一個(gè)單獨(dú)的函數(shù),并根據(jù)菜單的嵌套順序排好本菜單項(xiàng)的索引號(hào),以及本級(jí)菜單項(xiàng)的上、下卷動(dòng)的索引號(hào)和上、下級(jí)菜單的索號(hào)。
具體程序如下所述:
typedef st ruct
{
 uchar  KeyStateIndex ;   / / 當(dāng)前狀態(tài)索引號(hào)
 uchar  KeyDnState ;   / / 按下“向下”鍵時(shí)轉(zhuǎn)向的狀態(tài)索引號(hào)
 uchar  KeyUpState ;   / / 按下“向上”鍵時(shí)轉(zhuǎn)向的狀態(tài)索引號(hào)
 uchar  KeyCrState ;   / / 按下“回車”鍵時(shí)轉(zhuǎn)向的狀態(tài)索引號(hào)
 uchar  KeyBackState ;   / / 按下“退回”鍵時(shí)轉(zhuǎn)向的狀態(tài)索引號(hào)
 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)編號(hào)
   …
KeyFuncIndex = KeyTab[ KeyFuncIndex ] . KeyCrState ;
   …
   break ;
  case 0xb0 :/ / 向下鍵,找出新的菜單狀態(tài)編號(hào)
   …
    KeyFuncIndex = KeyTab [ KeyFuncIndex ] . KeyDn2
State ;
   …
  break ;
case 0xd0 :/ / 向上鍵,找出新的菜單狀態(tài)編號(hào)
   …
    KeyFuncIndex = KeyTab [ KeyFuncIndex ] . KeyUp2
State ;
   …
   break ;
  case 0x70 :/ / 回退鍵,找出新的菜單狀態(tài)編號(hào)
   …
    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 多級(jí)嵌套菜單結(jié)構(gòu)。該結(jié)構(gòu)緊湊、性能穩(wěn)定可靠,已多次使用在安全監(jiān)測設(shè)備中。

  系統(tǒng)要運(yùn)行可靠,對(duì)其有關(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)方式下,一旦該泵的開泵信號(hào)被監(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)行情況下是不使用的。



評(píng)論


技術(shù)專區(qū)

關(guān)閉