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

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > μC/OS-II顯示控制系統(tǒng)設(shè)計

          μC/OS-II顯示控制系統(tǒng)設(shè)計

          作者: 時間:2011-11-21 來源:網(wǎng)絡(luò) 收藏

          3 LCD多級菜單
          對于多級菜單的編寫,控制關(guān)系比較復(fù)雜,特別是對于不同的界面,人機(jī)交互的內(nèi)容一般都不相同。所以在操作系統(tǒng)實現(xiàn)時,一般把每一級菜單的實現(xiàn)都作為一個任務(wù)分別。這樣思路清晰,不容易出現(xiàn)問題,而且方便刪減和增加菜單項,也便于程序的維護(hù)和更新。主菜單任務(wù)循環(huán)體內(nèi)程序如下:


          程序說明如下:
          ①在任務(wù)開始時判斷系統(tǒng)模式SystemMode是否為主菜單模式SysMode_MainMenu。如果不是,那么就需要把主菜單任務(wù)掛起,直到從其他任務(wù)返回。
          ②等待按鍵信號量OSKeySem,根據(jù)用戶的按鍵執(zhí)行相應(yīng)的操作,RfreshTime是菜單的刷新時間。信號量等待函數(shù)在RfreshTime時間內(nèi)等待,如果等待時間到了按鍵還沒有操作,那么它繼續(xù)執(zhí)行下面的程序,err變量會返回錯誤的數(shù)值。
          ③如果②中的err返回沒有錯誤,說明在刷新時間內(nèi)發(fā)生了按鍵中斷,那么進(jìn)入按鍵的操作處理程序。
          ④根據(jù)鍵值變量KeyNumber進(jìn)行相應(yīng)的操作,例如確定按鍵的處理、返回按鍵的處理等。
          ⑤假如是確定鍵KEY_OK按下,那么首先把系統(tǒng)子菜單的編號SubMenuNumber賦給SystemMode變量,并進(jìn)行相應(yīng)的初始化操作。
          ⑥例如是XXXX子菜單,那么在初始化完成后發(fā)送信號量OSSemPost(OSDisXXXXSem)。其中,OSDisXXXXSem是子菜單XXXX的信號量。
          ⑦目的是調(diào)用主菜單顯示函數(shù)。之所以再次進(jìn)行判斷,是因為在⑥中發(fā)送信號量要進(jìn)行系統(tǒng)調(diào)度。如果子系統(tǒng)任務(wù)優(yōu)先級比主菜單高,主菜單就會被掛起而去執(zhí)行子菜單,在子菜單執(zhí)行間隙會重新調(diào)度回來進(jìn)行主菜單顯示,那么就造成顯示錯誤。
          子菜單顯示的任務(wù)流程和主菜單類似。在按返回鍵時發(fā)送啟動主菜單的信號量OSSemPost(OSDisMain-MenuSem),系統(tǒng)就會重新返回到主菜單。

          結(jié) 語
          本文對μC/操作系統(tǒng)下的中斷按鍵消抖處理及LCD多級菜單顯示方法進(jìn)行了研究,并提出了一種簡單、可靠性高、維護(hù)方便的實現(xiàn)方案。該方法已經(jīng)應(yīng)用于某產(chǎn)品的開發(fā)中,效果較好,運(yùn)行穩(wěn)定可靠。


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁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); })();