單片機(jī)多級(jí)菜單編程實(shí)現(xiàn)_第1頁(yè)
單片機(jī)多級(jí)菜單編程實(shí)現(xiàn)_第2頁(yè)
單片機(jī)多級(jí)菜單編程實(shí)現(xiàn)_第3頁(yè)
單片機(jī)多級(jí)菜單編程實(shí)現(xiàn)_第4頁(yè)
單片機(jī)多級(jí)菜單編程實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

單片機(jī)多級(jí)菜單編程實(shí)現(xiàn)單片機(jī)多級(jí)菜單編程實(shí)現(xiàn)(ZT)建立一個(gè)樹(shù)狀的菜單結(jié)構(gòu),用鏈表實(shí)現(xiàn)鏈表中包含:1、指向同級(jí)左右菜單和指向父菜單、子菜單的四個(gè)菜單結(jié)構(gòu)體指針;2、進(jìn)入該菜單時(shí)需要執(zhí)行的初始化函數(shù)指針3、退出該菜單時(shí)需要執(zhí)行的結(jié)束函數(shù)指針4、該菜單內(nèi)的按鍵處理函數(shù)指針數(shù)組的指針操作菜單模塊需要的按鍵操作有:左、右、確認(rèn)、退出。采用這種辦法,可以方便的添加或刪減菜單。并且只需要在其頭文件中修改初始變量就可以實(shí)現(xiàn),完全無(wú)須修改C文件中的任何函數(shù)。具體結(jié)構(gòu)定義我的定義,做個(gè)參考:#defineMENU_HLP_EN//菜單幫助信息使能typedefstruct{void(*pMenuTaskInit)(void);//指向菜單任務(wù)初始化函數(shù)的指針void(*pMenuTaskEnd)(void);//指向菜單任務(wù)結(jié)束函數(shù)的指針}MENU_TASK_TYP;typedefstructMenuTyp{INT8U*MenuName;//菜單名稱字符串WORK_MODWorkMod;//工作狀態(tài)編號(hào)MENU_TASK_TYP*pMenuTask;//指向菜單任務(wù)的指針void(**pTaskKeyDeal)(void);//指向菜單任務(wù)按鍵處理函數(shù)數(shù)組的指針#ifdefMENU_HLP_ENINT8U*MenuHlp;//菜單幫助字符串#endifstructMenuTyp*pParent;//指向上層菜單的指針structMenuTyp*pChild;//指向子菜單的指針structMenuTyp*pRight;//指向右菜單的指針structMenuTyp

*pLeft;//指向左菜單的指針}MENU_TYP;我根據(jù)網(wǎng)上的資料做的一個(gè)菜單:/****************菜單數(shù)據(jù)結(jié)構(gòu)/****************菜單數(shù)據(jù)結(jié)構(gòu)a**—/structKeyTabStruct{uint8MenuIndex;//當(dāng)前狀態(tài)索引號(hào)uint8MaxItems;//本級(jí)菜單最大條目數(shù)uint8ShowLevel;//菜單顯示內(nèi)容uint8PressOk;//按下"回車"鍵時(shí)轉(zhuǎn)向的狀態(tài)索引號(hào)uint8PressEsc;//按下"返回"鍵時(shí)轉(zhuǎn)向的狀態(tài)索引號(hào)uint8PressDown;//按下"向下"鍵時(shí)轉(zhuǎn)向的狀態(tài)索引號(hào)uint8PressUp;//按下"向上"鍵時(shí)轉(zhuǎn)向的狀態(tài)索引號(hào)void(*CurrentOperate)();//當(dāng)前狀態(tài)應(yīng)該執(zhí)行的功能操作};uint8MenuID;//菜單ID號(hào)uint8MenuNextID;//下級(jí)菜單ID號(hào)//CurMenuID=本菜單ID//MaxMenuItem=同級(jí)菜單最大項(xiàng)數(shù)//OkMenuID=子菜單層所對(duì)應(yīng)的菜單ID,ID=999為菜單已經(jīng)到底了//EscMenuID=父菜單層所對(duì)應(yīng)的菜單ID,ID=999為菜單已經(jīng)到頂了//DownMenuID=弟菜單層所對(duì)應(yīng)的菜單ID,ID=999為菜單是獨(dú)生子//UpMenuID=兄菜單層所對(duì)應(yīng)的菜單ID,ID=999為菜單是獨(dú)生子//CurFunction=本菜單所對(duì)應(yīng)的菜單函數(shù)指針conststructKeyTabStructKeyTab[MAX_KEYTABSTRUCT_NUM]={//CurMenuID,axMenuItem,MenuShowLevel,OkMenuID,EscMenuID,DownMenulD,UpMenulD,CurFunction{MENU_EDIT,0,0,MENU_DATA_VIEW,MENU_NO,MENU_NO,MENU_NO,*MenuEdit},{MENU_DATA_VIEW,3,1,MENU_DATA_VIEW_FIRE,MENU_EDIT,MENU_SYS_EDIT,MENU_PRINT_DATA,*MenuEdit},{MENU_DATA_VIEW_FIRE,5,MENU_NO,MENU_NO,MENU_DATA_VIEW,MENU_DATA_VIEW_TROUBLE,MENU_STEP_FOLLOW,*MenuDataViewIn},{MENU_DATA_VIEW_TROUBLE,5,MENU_NO,MENU_NO,MENU_DATA_VIEW,MENU_DATA_VIEW_REPEAT,MENU_DATA_VIEW_FIRE,*MenuDataViewin},{MENU_DATA_VIEW_REPEAT,5,MENU_NO,MENU_NO,MENU_DATA_VIEW,MENU_FACE_CHECK,MENU_DATA_VIEW_TROUBLE,*MenuDataViewIn},{MENU_FACE_CHECK,5,MENU_NO,MENU_NO,MENU_DATA_VIEW,MENU_STEP_FOLLOW,MENU_DATA_VIEW_REPEAT,*MenuFaceCheck},{MENU_STEP_FOLLOW,5,MENU_NO,MENU_NO,MENU_DATA_VIEW,MENU_DATA_VIEW_FIRE,MENU_FACE_CHECK,*MenuStepFollow,{MENU_SYS_EDIT,3,2,MENU_SUM_SET,MENU_EDIT,MENU_PRINT_DATA,MENU_DATA_VIEW,*MenuEdit,{MENU_SUM_SET,6,MENU_NO,MENU_NO,MENU_SYS_EDIT,MENU_EDIT_INSULATE,MENU_TIME_SET,*MenuSumSet,{MENU_EDIT_INSULATE,6,MENU_NO,MENU_NO,MENU_SYS_EDIT,MENU_EDIT_HZ,MENU_SUM_SET,*MenuEditInsulate,{MENU_EDIT_HZ,6,MENU_NO,MENU_NO,MENU_SYS_EDIT,MENU_LD_CONTROL,MENU_EDIT_INSULATE,*MenuEditHZ},{MENU_LD_CONTROL,6,MENU_NO,MENU_NO,MENU_SYS_EDIT,MENU_LD_DELAY,

MENU_EDIT_HZ,*MenuLDControl},{MENU_LD_DELAY,6,MENU_NO,MENU_NO,MENU_SYS_EDIT,MENU_TIME_SET,MENU_LD_CONTROL,*MenuLDDelay},{MENU_TIME_SET,6,MENU_NO,MENU_NO,MENU_SYS_EDIT,MENU_SUM_SET,MENU_LD_DELAY,*MenuTimeSet},{MENU_PRINT_DATA,3,3,MENU_PRINT_DATA_FIRE,MENU_EDIT,MENU_DATA_VIEW,MENU_SYS_EDIT,*MenuEdit},{MENU_PRINT_DATA_FIRE,4,MENU_NO,MENU_NO,MENU_PRINT_DATA,MENU_PRINT_DATA_TROUBLE,MENU_PRINT_SET,*MenuPrintDataIn}{MENU_PRINT_DATA_TROUBLE,4,MENU_NO,MENU_NO,MENU_PRINT_DATA,MENU_PRINTER_CHECK,MENU_PRINT_DATA_FIRE,*MenuPrintDataln},{MENU_PRINTER_CHECK,4,MENU_NO,MENU_NO,MENU_PRINT_DATA,MENU_PRINT_SET,MENU_PRINT_DATA_TROUBLE,*MenuPrintDataIn,{MENU_PRINT_SET,4,MENU_NO,MENU_NO,MENU_PRINT_DATA,MENU_PRINT_DATA_FIRE,編程菜單顯示數(shù)據(jù)MENU_PRINTER_CHECK,*MenuPrintSet,編程菜單顯示數(shù)據(jù)/********************************************************************/conststructMenuDispDataMenuEditShow[][MENU_MAX]

{{MENU_NO,0,0,"選擇:消音一退出"},〃主菜單{MENU_DATA_VIEW,1,6,"1?數(shù)據(jù)查看"},{MENU_SYS_EDIT,2,6,"2?系統(tǒng)編程"},{MENU_PRINT_DATA,3,6,"3?數(shù)據(jù)打印"}},{{MENU_NO,0,0,"數(shù)據(jù)查看:消音一退出”},〃數(shù)據(jù)查{MENU_DATA_VIEW_FIRE,1,4,"??火警葉,{MENU_DATA_VIEW_TROUBLE,2,4,"2?故障"},{MENU_DATA_VIEW_REPEAT,3,4,"?重碼"{MENU_FACE_CHECK,1,12,"4?面板檢測(cè)"},{MENU_STEP_FOLLOW,2,12,"5?單步跟蹤"}},TOC\o"1-5"\h\z{{MENU_NO,0,0,"系統(tǒng)編程:消音一退出"},〃系統(tǒng)編程{MENU_SUM_SET,1,0,"?容量設(shè)置" ,{MENUEDITINSULATE,2,0,"2隔離點(diǎn)" ,{MENU_EDIT_HZ,3,0,"?漢字描述" ,{MENU_LD_CONTROL,1,12,"?聯(lián)動(dòng)控制" ,{MENU_LD_DELAY,2,12,"?模塊延時(shí)" ,{MENU_TIME_SET,3,12,"6?時(shí)鐘調(diào)整”}},{{MENU_NO,0,0,"數(shù)據(jù)打印:消音一退出”},〃數(shù)據(jù)打印{MENU_PRINT_DATA_FIRE,1,0,"?火警數(shù)據(jù)”{MENU_PRINT_DATA_TROUBLE,2,0,"2故障數(shù)據(jù)"{MENU_PRINTER_CHECK,3,0,”?打印機(jī)自檢"{MENU_PRINT_SET,1,12,"?打印設(shè)置" ,}等待按鍵********************voidWaitKey(void){uint32time;time=RTCFlag;WhichKey=KEY_NONE;while(!EscFlag){if(RTCFlag-time>=EDIT_TIME)EscFlag=TRUE;顯示多級(jí)菜單if(WhichKey!=KEY_NONE){KeySound(300);//按鍵音return;顯示多級(jí)菜單/**********************************/**********************************/voidMenuEdit(){uint32i,j=0;uint32oldid;j=KeyTab[MenuID].ShowLevel;if(WhichKey==KEY_ESC||WhichKey==KEY_OK){ClearScreen();for(i=0;i<KeyTab[MenuNextID].MaxItems+1;i++)ShowString(MenuEditShow[j][i].Lin,MenuEditShow[j][i].Column,MenuEditShow[j][i].Pdata,0);//初始化顯示oldid=0;//沒(méi)有原先選擇的項(xiàng)else{if(WhichKey==KEY_UP)oldid=KeyTab[MenuNextID].PressDown;elseoldid=KeyTab[MenuNextID].PressUp;//指示原先的項(xiàng)}for(i=1;i<KeyTab[MenuNextlD].Maxltems+1;i++){if(MenuEditShow[j][i].Id==oldid)ShowString(MenuEditShow[j][i].Lin,MenuEditShow[j].Column,MenuEditShow[j][i].Pdata,0);//正常顯示原先的項(xiàng)else{if(MenuEditShow[j][i].ld==MenuNextlD)ShowString(MenuEditShow[j][i].Lin,MenuEditShow[i].Column,MenuEditShow[j][i].Pdata,1);//反顯當(dāng)前選擇的項(xiàng)}}WhichKey=KEY_NONE;}/************************************/一一、*************************/************************************/系統(tǒng)編程*************************uint32Edit(void){structKeyTabStructNowKeyTab;//指示當(dāng)前的菜單值uint32escflag=FALSE;ResetFlag=FALSE;ChangeFlag=FALSE;EscFlag=FALSE;MenulD=MENU_EDlT;NowKeyTab=KeyTab[MenulD];MenuNextlD=NowKeyTab.PressOk;(*NowKeyTab.CurrentOperate)();//顯示主菜單do{if(WhichKey==KEY_NONE)WaitKey();//等待按鍵switch(WhichKey){caseKEY_ESC:if(NowKeyTab.PressEsc!=MENU_NO){MenuID=NowKeyTab.PressEsc;MenuNextID=NowKeyTab.MenuIndex;NowKeyTab=KeyTab[MenuID];NowKeyTab.PressOk=MenuNextID;(*NowKeyTab.CurrentOperate)();//顯示當(dāng)前菜單}elseescflag=TRUE;//退出編程狀態(tài)break;caseKEY_OK:if(NowKeyTab.PressOk!=MENU_NO){MenuID=NowKeyTab.PressOk;NowKeyTab=KeyTab[MenuID];MenuNextID=NowKeyTab.PressOk;}(*NowKeyTab.CurrentOperate)();//執(zhí)行當(dāng)前按鍵的操作break;caseKEY_UP:if((MenuNextID!=MENU_NO)&&(KeyTab[MenuNextlD].PressUp!=MENU_NO)){NowKeyTab.PressOk=KeyTab[MenuNextlD].PressUp;MenuNextlD=KeyTab[MenuNextlD].PressUp;(*NowKeyTab.CurrentOpera

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論