基于單片機(jī)的任意菜單結(jié)構(gòu)設(shè)計(jì)
具體方法如下:
本文引用地址:http://m.butianyuan.cn/article/201612/325077.htm首先我們將菜單結(jié)構(gòu)的圖形描繪出來(lái),再根據(jù)菜單的級(jí)數(shù)來(lái)定義一個(gè)結(jié)構(gòu)體,比如菜單最大有5級(jí),則這樣定義
typedef struct
{
unsigned char f;//菜單所在級(jí)數(shù)
unsigned char s1;//菜單第1級(jí)下的子項(xiàng)號(hào)
unsigned char s2;//菜單第2級(jí)下的子項(xiàng)號(hào)
unsigned char s3;//菜單第3級(jí)下的子項(xiàng)號(hào)
unsigned char s4;//菜單第4級(jí)下的子項(xiàng)號(hào)
unsigned char s5;//菜單第5級(jí)下的子項(xiàng)號(hào)
}Menu_TypeDef;
Menu_TypeDefmenu;
再將這些變量的值標(biāo)定在繪制的菜單圖形中,如下圖所示:
即menu.f=1并且menu.s1=0表示第一級(jí)第一項(xiàng);
即menu.f=2并且menu.s1=3表示第二級(jí)第四項(xiàng);
依此類推;
于是,菜單的每一個(gè)位置都會(huì)有一個(gè)唯一的值與之對(duì)應(yīng),當(dāng)菜單的選項(xiàng)由用戶切換時(shí),我們只需要根據(jù)菜單結(jié)構(gòu)圖形的流程來(lái)修改這些變量,而當(dāng)需要查詢當(dāng)前菜單指針選中哪一項(xiàng)時(shí),則只要查詢這些變量的值即可。
由于各級(jí)菜單的變量都是獨(dú)立的,因此對(duì)菜單的結(jié)構(gòu)沒(méi)有限制,適用于設(shè)計(jì)任意結(jié)構(gòu)的菜單,如果當(dāng)菜單級(jí)數(shù)較多,定義的菜單變量較多時(shí),也不要緊,因?yàn)槲覀兊牟藛卧O(shè)計(jì)是先繪制菜單結(jié)構(gòu)圖形,再根據(jù)圖形來(lái)編寫(xiě)代碼,實(shí)際上就是根據(jù)圖形的描述往代碼里填值罷了。
經(jīng)實(shí)踐證明,采用以上方法能完全適用于所有任意結(jié)構(gòu)菜單設(shè)計(jì),而且該方法的優(yōu)點(diǎn)在于,有了圖形的描述,不僅減化了代碼編寫(xiě)的難度,而且還有利于代碼維護(hù),提高代碼的可讀性。
符件里是一個(gè)不規(guī)則結(jié)構(gòu)的菜單測(cè)試程序,基于AVR單片機(jī),通過(guò)按鍵來(lái)選擇,菜單的圖形界面在PC機(jī)的超級(jí)終端上顯示,歡迎廣大網(wǎng)友測(cè)試,并討論。
評(píng)論