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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于AVR單片機(jī)的控制系統(tǒng)設(shè)計(jì)

          基于AVR單片機(jī)的控制系統(tǒng)設(shè)計(jì)

          作者: 時(shí)間:2014-12-19 來(lái)源:網(wǎng)絡(luò) 收藏

            對(duì)于用戶按鍵操作切換不同的菜單時(shí),我們只需修改一個(gè)指向?qū)?yīng)菜單節(jié)點(diǎn)的全局菜單節(jié)點(diǎn)指針即可。當(dāng)用戶按下“ESC”鍵時(shí),菜單指針指向當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn),按下“Enter”鍵時(shí),則指針指向?qū)?yīng)節(jié)點(diǎn)的子節(jié)點(diǎn)。

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

            用于單片機(jī)的RAM空間較小,只有4KB,我們需設(shè)計(jì)一種合理而簡(jiǎn)潔的數(shù)據(jù)結(jié)構(gòu),我們將菜單的數(shù)據(jù)結(jié)構(gòu)定義為(C語(yǔ)言實(shí)現(xiàn))。

            

           

            圖3 menuselect函數(shù)的流程圖

            將菜單分為顯示型菜單和功能性菜單,顯示型菜單項(xiàng)用于切換各級(jí)菜單,功能型菜單則執(zhí)行最底層菜單所對(duì)應(yīng)的操作,total變量為0則表示為功能型菜單,大于0則表示選擇型菜單。通過(guò)菜單的ID,即可以知道當(dāng)前菜單的顯示位置和內(nèi)容,將此信息放在對(duì)應(yīng)的displaymenu函數(shù)中可以節(jié)省數(shù)據(jù)空間,不用對(duì)于功能型菜單建立額外的ID與處理函數(shù)間的對(duì)應(yīng)關(guān)系表,從而實(shí)現(xiàn)功能型菜單和顯示型菜單的一致性操作。一個(gè)供參考的執(zhí)行函數(shù)可以寫作:

            if(g_pmenu->total>0)

            { g_pmenu=menuselect(g_pmenu,Key);} else {(g_pmenu->displaymenu)(g_pmenu->ID,g_pmenu->cur);}

            其中menuselect函數(shù)用于切換對(duì)應(yīng)的菜單子項(xiàng),按鍵為“UP”鍵和“DOWN”鍵時(shí),只需修改g_pmune->cur即可;按下“ENTER”鍵時(shí),則g_pmenu=g_pmenu->down,再根據(jù)cur值,g_pmenu=g_pmenu->right;按下“ESC”鍵,則g_pmenu=g_pmenu->up.

            這種設(shè)計(jì)使得代碼數(shù)據(jù)量變得較小,同時(shí)增強(qiáng)了程序的擴(kuò)展性,需要增加或修改菜單項(xiàng)時(shí),不論是功能型菜單還是執(zhí)行性菜單,只需要修改對(duì)應(yīng)的菜單結(jié)構(gòu)的數(shù)組即可,而不必修改對(duì)應(yīng)的執(zhí)行代碼。經(jīng)過(guò)這樣的簡(jiǎn)化后,發(fā)現(xiàn)對(duì)于菜單數(shù)較多的多通道輸入/輸出系統(tǒng),系統(tǒng)RAM區(qū)還是不夠用。對(duì)于一個(gè)8輸入通道的系統(tǒng),每個(gè)通道的參數(shù)設(shè)置項(xiàng)可能多達(dá)40項(xiàng),總菜單節(jié)點(diǎn)大于300個(gè),每個(gè)節(jié)點(diǎn)占用14B,則整個(gè)菜單節(jié)點(diǎn)所占的RAM已超過(guò)4K,所以這種方式還是需要進(jìn)一步改進(jìn)。

            注意到多通道的參數(shù)設(shè)置項(xiàng)完全相同,ID為111,112,。,118的菜單分支完全一樣,ID為121和122的菜單分支也完全相同??梢远x一種Sibling菜單,從而刪去ID為112~118以及ID為122的菜單節(jié)點(diǎn)和子節(jié)點(diǎn)(虛線框所示),其上級(jí)菜單(ID為11和ID為12)的項(xiàng)目中的total值均變?yōu)?.為了區(qū)別不同的通道分支,有兩種實(shí)現(xiàn)辦法:

            一種處理方法采用全局變量

            增加一個(gè)g_CODER_Channel_Number的全局變量,用于保存當(dāng)前的通道號(hào)。在menuselect函數(shù)中,增加一個(gè)針對(duì)本系統(tǒng)設(shè)計(jì)的一個(gè)判斷,當(dāng)ID為11時(shí),則不修改對(duì)應(yīng)的g_pmenu->cur,而是直接修改變量g_CODER_Channel_Number,進(jìn)入對(duì)應(yīng)的顯示函數(shù)后,直接根據(jù)g_CODER_Channel_Number判斷通道號(hào),從而輸出對(duì)應(yīng)的值。這種方法不需要改變系統(tǒng)設(shè)計(jì)的結(jié)構(gòu),但需要針對(duì)不同的系統(tǒng)修改主處理函數(shù)menuselect.

            另一種處理方法在菜單結(jié)構(gòu)中增加一個(gè)MenuSibling結(jié)構(gòu),定義為

            typedef struct _menuSibling{

            signedcharcur;signedchartotal;}SIBLING;同時(shí)對(duì)應(yīng)的菜單結(jié)構(gòu)修改為typedefstructmenu{……

            SIBLINGSibling;}MENU;

            這樣,ID為11的結(jié)構(gòu)項(xiàng)的Sibling.total為8,Sibling.cur為當(dāng)前的子菜單項(xiàng)。判斷到total>0且Sibling.total>0時(shí),可知其下一級(jí)菜單為SIB2LING菜單,此時(shí)以前需修改cur想的操作則修改Sibling.cur即可。這種設(shè)計(jì)下,每個(gè)節(jié)點(diǎn)增加了2B的空間,但是保證的程序的一致性,對(duì)于不同的系統(tǒng)其設(shè)計(jì)基本一致。

            以上菜單項(xiàng)的設(shè)計(jì)用于系統(tǒng)設(shè)置部分,當(dāng)退出系統(tǒng)設(shè)置時(shí),即進(jìn)入系統(tǒng)循環(huán)檢測(cè)部分。單片機(jī)通過(guò)接口檢測(cè)各個(gè)通道是否正常,當(dāng)正常時(shí)則顯示為綠燈,出現(xiàn)異常則顯示為紅燈,黃燈為中間狀態(tài)。指示燈的流程參見(jiàn)圖4.

            

           

            圖4循環(huán)檢測(cè)的指示燈流程

            結(jié)束語(yǔ)

            按照本文提供的方法優(yōu)化后的設(shè)計(jì),可以滿足大多數(shù)的多通道輸入/輸出系統(tǒng)的控制系統(tǒng)的需要,整個(gè)系統(tǒng)的設(shè)計(jì)主要在于建立一個(gè)菜單樹,將對(duì)應(yīng)的節(jié)點(diǎn)編號(hào),再編寫對(duì)應(yīng)的節(jié)點(diǎn)處理函數(shù)即可。這種設(shè)計(jì)使得程序的開發(fā)、維護(hù)都很容易,具有較強(qiáng)的可擴(kuò)展性和可移植性。

          c語(yǔ)言相關(guān)文章:c語(yǔ)言教程


          單片機(jī)相關(guān)文章:單片機(jī)教程


          單片機(jī)相關(guān)文章:單片機(jī)視頻教程


          單片機(jī)相關(guān)文章:單片機(jī)工作原理


          蜂鳴器相關(guān)文章:蜂鳴器原理

          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: AVR ATmega128 RS-485

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