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

          新聞中心

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

          基于AVR單片機的控制系統(tǒng)設計

          作者: 時間:2013-12-12 來源:網(wǎng)絡 收藏

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

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

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

          另一種處理方法在菜單結構中增加一個MenuSibling結構,定義為

          typedef struct _menuSibling{

          signedcharcur;
          signedchartotal;
          }SIBLING;
          同時對應的菜單結構修改為
          typedefstructmenu{
          ...
          SIBLINGSibling;
          }MENU;

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

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

          基于AVR單片機的控制系統(tǒng)設計

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

          結束語

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

          陀螺儀相關文章:陀螺儀原理



          上一頁 1 2 3 下一頁

          評論


          相關推薦

          技術專區(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); })();