基于AVR單片機的控制系統(tǒng)設計
系統(tǒng)軟件結(jié)構(gòu)
系統(tǒng)軟件體系分為幾個部分:
(1)系統(tǒng)的循環(huán)檢測部分,用于檢測各通道的系統(tǒng)設備工作是否正常,出現(xiàn)異常時則通過三色指示燈報警(綠色代表正常,紅色代表異常,黃色為中間狀態(tài))。
(2)系統(tǒng)的設置部分,接受用戶按鍵,用戶可以在GUI上設置希望設置的參數(shù)。
(3)網(wǎng)絡接口部分,此時單片機系統(tǒng)不參與設置,主要功能將網(wǎng)絡部分獲得的數(shù)據(jù)導至各通道。軟件系統(tǒng)的核心部分在于菜單結(jié)構(gòu)的設計。
本系統(tǒng)采用一種基于節(jié)點編號的三叉樹狀菜單的設計。將整個菜單看作一個菜單樹,每個界面對應于樹中的一個節(jié)點,父節(jié)點為當前菜單的上一級菜單;右節(jié)點為當前菜單的“兄弟”菜單,亦即上級菜單的其余子菜單。
我們采用對節(jié)點編號的方式將整個菜單樹串起來,通過識別節(jié)點編號(ID)就能知道該節(jié)點處于哪一級菜單,同時也便于我們將菜單數(shù)初始化。編號方式:每級子菜單的編號為上級父菜單ID乘以10再加上該級子菜單在上級菜單中對應的子項號(1,2,3.),我們將根節(jié)點ID編號為1,則根節(jié)點菜單的子菜單對應的ID分別為11,12,13。ID為11的節(jié)點的下級菜單ID為:111,112,113。一個樹型結(jié)構(gòu)菜單的結(jié)構(gòu)和ID編號的實例如圖2所示。
Typedef structmenu{
long ID; / /當前菜單ID
void ( * disp laymenu) ( long i, unsigned char j) ; / /當前菜單對應處理函數(shù)
char cur; / /當前菜單子項
char total; / /子菜單總數(shù)
structmenu * up, * down, * right; / /毗鄰子菜單
}MENU;
圖2 一個菜單樹的實例
對于用戶按鍵操作切換不同的菜單時,我們只需修改一個指向?qū)藛喂?jié)點的全局菜單節(jié)點指針即可。當用戶按下“ESC”鍵時,菜單指針指向當前節(jié)點的父節(jié)點,按下“Enter”鍵時,則指針指向?qū)?jié)點的子節(jié)點。
用于AVR單片機的RAM空間較小,只有4KB,我們需設計一種合理而簡潔的數(shù)據(jù)結(jié)構(gòu),我們將菜單的數(shù)據(jù)結(jié)構(gòu)定義為(C語言實現(xiàn))。
圖3 menuselect函數(shù)的流程圖
將菜單分為顯示型菜單和功能性菜單,顯示型菜單項用于切換各級菜單,功能型菜單則執(zhí)行最底層菜單所對應的操作,total變量為0則表示為功能型菜單,大于0則表示選擇型菜單。通過菜單的ID,即可以知道當前菜單的顯示位置和內(nèi)容,將此信息放在對應的displaymenu函數(shù)中可以節(jié)省數(shù)據(jù)空間,不用對于功能型菜單建立額外的ID與處理函數(shù)間的對應關系表,從而實現(xiàn)功能型菜單和顯示型菜單的一致性操作。一個供參考的執(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ù)用于切換對應的菜單子項,按鍵為“UP”鍵和“DOWN”鍵時,只需修改g_pmune->cur即可;按下“ENTER”鍵時,則g_pmenu=g_pmenu->down,再根據(jù)cur值,g_pmenu=g_pmenu->right;按下“ESC”鍵,則g_pmenu=g_pmenu->up。
這種設計使得代碼數(shù)據(jù)量變得較小,同時增強了程序的擴展性,需要增加或修改菜單項時,不論是功能型菜單還是執(zhí)行性菜單,只需要修改對應的菜單結(jié)構(gòu)的數(shù)組即可,而不必修改對應的執(zhí)行代碼。經(jīng)過這樣的簡化后,發(fā)現(xiàn)對于菜單數(shù)較多的多通道輸入/輸出系統(tǒng),系統(tǒng)RAM區(qū)還是不夠用。對于一個8輸入通道的系統(tǒng),每個通道的參數(shù)設置項可能多達40項,總菜單節(jié)點大于300個,每個節(jié)點占用14B,則整個菜單節(jié)點所占的RAM已超過4K,所以這種方式還是需要進一步改進。
陀螺儀相關文章:陀螺儀原理
評論