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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 一種單片機(jī)多級(jí)菜單的模塊化設(shè)計(jì)方法

          一種單片機(jī)多級(jí)菜單的模塊化設(shè)計(jì)方法

          作者: 時(shí)間:2012-12-24 來源:網(wǎng)絡(luò) 收藏

          引言
          中,往往需要在顯示屏上顯示操作,每級(jí)都有一些項(xiàng)和對(duì)應(yīng)的按鍵操作,以及為響應(yīng)各種操作而執(zhí)行的后續(xù)處理程序。參考文獻(xiàn)以函數(shù)指針為結(jié)構(gòu)元素,把整個(gè)菜單結(jié)構(gòu)拉伸成一個(gè)結(jié)構(gòu)數(shù)組,內(nèi)部包含了全部菜單項(xiàng)。這種沒有將菜單項(xiàng)數(shù)據(jù)與功能函數(shù)分開,而把菜單項(xiàng)數(shù)據(jù)寫在功能函數(shù)中,當(dāng)菜單項(xiàng)數(shù)據(jù)需要改變時(shí),必須修改功能函數(shù),這在很大程度上限制了程序的通用性,不利于程序的維護(hù)。參考文獻(xiàn)在前者的基礎(chǔ)上略加改進(jìn),在原結(jié)構(gòu)體中增加了菜單項(xiàng)顯示文字和按鍵復(fù)用標(biāo)識(shí),這使得結(jié)構(gòu)體較為龐大,且菜單項(xiàng)的文字內(nèi)容非常固定,保存在EEPROM中,無法靈活改變顯示內(nèi)容和位置。參考文獻(xiàn)引入Windows系統(tǒng)下的窗口和消息機(jī)制實(shí)現(xiàn)菜單,該需要維護(hù)堆棧、消息隊(duì)列和窗口定時(shí)器等,設(shè)計(jì)過于復(fù)雜。
          本文旨在提供一個(gè)輕量級(jí)的菜單實(shí)現(xiàn),以較少的系統(tǒng)資源消耗和簡(jiǎn)單方便的方法完成菜單設(shè)計(jì)??紤]到菜單程序需要具備3個(gè)基本要素:一是每個(gè)菜單窗口要顯示的內(nèi)容;二是每個(gè)窗口對(duì)應(yīng)的按鍵定義與響應(yīng);三是窗口內(nèi)菜單項(xiàng)之間切換和窗口之間的切換機(jī)制。因此,將菜單分為菜單窗口模塊和鍵盤處理模塊兩部分,獨(dú)立進(jìn)行設(shè)計(jì)。

          1 菜單窗口模塊設(shè)計(jì)
          菜單窗口模塊主要功能是按照菜單窗口切換機(jī)制,實(shí)時(shí)完成窗口的顯示控制。
          1.1 菜單窗口切換機(jī)制
          菜單窗口切換機(jī)制包括兩點(diǎn):一是不同窗口之間切換效果的實(shí)現(xiàn);二是窗口內(nèi)的同級(jí)菜單項(xiàng)之間滾動(dòng)切換效果的實(shí)現(xiàn)。為實(shí)現(xiàn)上述功能,定義了兩個(gè)結(jié)構(gòu)體MenuState和MenuItems。MenuState定義如下:

          MenuState是一個(gè)與窗口跳轉(zhuǎn)和窗口顯示有關(guān)的結(jié)構(gòu)體數(shù)組,用于全局調(diào)度各窗口之間的切換。其中,CurIndex是窗口的索引值,用來標(biāo)識(shí)當(dāng)前窗口。UpIndex、DnIndex、BackIndex用來標(biāo)識(shí)當(dāng)有“上頁”、“下頁”、“返回”按鍵操作時(shí),程序應(yīng)轉(zhuǎn)向的窗口。其取值為255時(shí),表示無轉(zhuǎn)向窗口,取值在0~254時(shí)表示要轉(zhuǎn)向的窗口索引,因此本設(shè)計(jì)可支持255個(gè)菜單窗口,足以滿足工程應(yīng)用需要。CurOperate是函數(shù)指針,用來指向當(dāng)顯示當(dāng)前窗口時(shí),應(yīng)執(zhí)行的窗口顯示控制程序,以實(shí)現(xiàn)窗口的顯示。
          MenuItems是一個(gè)菜單項(xiàng)結(jié)構(gòu)體,用以保存當(dāng)前窗口的全部菜單項(xiàng)的顯示位置和內(nèi)容,這個(gè)結(jié)構(gòu)體的內(nèi)容是隨著窗口的切換,在新窗口初始化過程中被更新的。這樣就滿足了窗口的切換和菜單項(xiàng)之間反顯滾動(dòng)的需要。由于只保存與當(dāng)前窗口有關(guān)的菜單項(xiàng),因此,該結(jié)構(gòu)體的系統(tǒng)資源消耗很小。
          d.JPG
          Items包含了當(dāng)前窗口內(nèi)的所有菜單項(xiàng),考慮到有的菜單項(xiàng)是沒有轉(zhuǎn)向窗口的,所以對(duì)應(yīng)這種菜單項(xiàng)設(shè)置該值為255。當(dāng)顯示一個(gè)窗口時(shí),Items會(huì)被填入當(dāng)前窗口的菜單項(xiàng)信息,并且填寫時(shí)是按照菜單項(xiàng)的先后順序依次構(gòu)建的。這樣當(dāng)有“上移”、“下移”按鍵操作時(shí),就可迅速找到目標(biāo)行,并反顯該行。
          1.2 菜單窗口顯示控制
          窗口顯示部分是將每一個(gè)菜單窗口都以一個(gè)獨(dú)立命名的函數(shù)形式封裝,函數(shù)里包括對(duì)Items進(jìn)行賦值,在顯示屏指定位置顯示當(dāng)前窗口的菜單項(xiàng),以及根據(jù)需要完成畫點(diǎn)、畫線、畫按鈕等繪圖操作。這些函數(shù)彼此功能獨(dú)立,分別對(duì)應(yīng)不同的菜單窗口,僅在窗口切換時(shí)賦予CurOperate即可,因此非常適合多人合作開發(fā)。
          需要說明的是,菜單窗口的顯示控制是基于顯示屏的,工程中常用的是TFT屏或點(diǎn)陣液晶屏,使用時(shí)需要實(shí)現(xiàn)顯示屏的驅(qū)動(dòng)程序,對(duì)屏進(jìn)行初始化、讀、寫等操作,由于不是本文重點(diǎn),因此這部分內(nèi)容略過。


          上一頁 1 2 3 下一頁

          評(píng)論


          相關(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); })();