<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

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

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

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

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

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

          本文引用地址:http://www.ex-cimer.com/article/201611/321459.htm

          2  程序設計
          根據(jù)需求,首先建立一個結(jié)構(gòu),并定義一個結(jié)構(gòu)變量KbdTabSt ruct 。結(jié)構(gòu)變量就是把多個不同類型的變量結(jié)合在一起形成的一個組合型變量,構(gòu)成一個結(jié)構(gòu)的各個變量稱為結(jié)構(gòu)元素。該結(jié)構(gòu)中共有6 個結(jié)構(gòu)元素,分別是5 個字符型和1 個指針變量,5 個字符型變量分別為當前及各個按鍵的索引號,也就是操作的狀態(tài)號,最后1 個指針變量指向需執(zhí)行函數(shù)。這樣就可以做一個結(jié)構(gòu)數(shù)組,在結(jié)構(gòu)數(shù)組里為每一個菜單項編制一個單獨的函數(shù),并根據(jù)菜單的嵌套順序排好本菜單項的索引號,以及本級菜單項的上、下卷動的索引號和上、下級菜單的索號。
          具體程序如下所述:
          typedef st ruct
          {
           uchar  KeyStateIndex ;   / / 當前狀態(tài)索引號
           uchar  KeyDnState ;   / / 按下“向下”鍵時轉(zhuǎn)向的狀態(tài)索引號
           uchar  KeyUpState ;   / / 按下“向上”鍵時轉(zhuǎn)向的狀態(tài)索引號
           uchar  KeyCrState ;   / / 按下“回車”鍵時轉(zhuǎn)向的狀態(tài)索引號
           uchar  KeyBackState ;   / / 按下“退回”鍵時轉(zhuǎn)向的狀態(tài)索引號
           void  ( 3 CurrentOperate) ( ) ;   / / 當前狀態(tài)應該執(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 ;   / / 錯誤的處理
              break ;
             }
            KeyFuncPt r = KeyTab[ KeyFuncIndex ] . CurrentOperate ;
            ( 3 KeyFuncPt r) () ;   / / 執(zhí)行當前按鍵的操作
          }
          3  結(jié)語
          本文介紹了C 語言編程的特點,簡單介紹了LCD 作為人機界面的特征,并介紹了一種用C 語言實現(xiàn)的LCD 多級嵌套菜單結(jié)構(gòu)。該結(jié)構(gòu)緊湊、性能穩(wěn)定可靠,已多次使用在安全監(jiān)測設備中。

            系統(tǒng)要運行可靠,對其有關設備是否能夠安全運行地檢測也是很重要的一環(huán)。因而程序?qū)ο到y(tǒng)所涉及的設備都進行了全面監(jiān)測,主要有電動球閥故障、出水口電動閘閥故障、水位傳感器故障、水泵啟停時間、運行電流、電動機溫度、電動機和水泵軸承溫度、出水壓力、高壓柜狀態(tài)、高壓柜故障、閥門故障等,并視情況進行事故自動處理或報警要求檢修。本系統(tǒng)中各個機組有3 種運行選擇:自動、半自動和手動。通常情況下按照水位高低和系統(tǒng)時間自動選擇是否開泵,同時觀察水位變化率從而選擇需要開幾臺泵。在半自動方式下,一旦該泵的開泵信號被監(jiān)測到,系統(tǒng)將自動根據(jù)當前情況用射流方式或者真空泵方式來抽真空,當真空度達到要求后啟動電動機, 同時觀測出水口處的壓力, 當其大于5 MPa時打開出水口處的電動閘閥實施正常排水。為了完善系統(tǒng),防止意外情況的發(fā)生,同時為了便于檢修,還保留了手動方式,該方式在正常運行情況下是不使用的。



          評論


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

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();