/////////////////////////////////////////////////////////////////////////////////////// // // 模型参数调节菜单处理过程 // u32 PageAeroSet(u8 event) { static MENUSTAT ms; if(event==PV_INIT) { LcdClear(0); if(!ms.Init) { ms.iFocus=ms.iStart=0; ms.Init=1; } ms.Total=MenuAeroSet[0].Max; ms.DrawMask=PD_ALL; return 1; } if(event==PV_REDRAW) { ms.DrawMask=PD_ALL; } //菜单通用处理过程 PageMenuProc(MenuAeroSet,&ms); //回车键处理 if(KeyTstDown(KEY_ENT)) { //如果有子菜单或子功能,进入 if(MenuAeroSet[ms.iFocus+1].SubItem) { if(MenuAeroSet[ms.iFocus+1].SubItem==PageCurveSet) { PageCurveCnt =MenuAeroSet[ms.iFocus+1].Max; if(MenuAeroSet[ms.iFocus+1].Min==1) { PageCurveTitle =PageStkCurveTitle; PageCurveValue =&Model.StkCurve[0][0][0]; } else { PageCurveTitle =PageThrCurveTitle; PageCurveValue =&Model.ThrCurve[0][0]; } } BeepMusic(MusicEnter); PageEnter((PAGEPROC)MenuAeroSet[ms.iFocus+1].SubItem,PV_INIT); } } //返回键处理 if(KeyTstDown(KEY_EXT)) { PageReturn(PV_REDRAW); } KeyClearDown(KEY_MENUALL); return 0; }
/////////////////////////////////////////////////////////////////////////////////////// // // 陀螺仪菜单处理 // u32 PageGyroSet(u8 event) { static MENUSTAT ms; if(event==PV_INIT) { LcdClear(0); if(!ms.Init) { ms.iFocus=ms.iStart=0; ms.Init=1; } ms.Total=MenuGyroSet[0].Max; ms.DrawMask=PD_ALL; return 1; } if(event==PV_REDRAW) { ms.DrawMask=PD_ALL; } //菜单通用处理过程 PageMenuProc(MenuGyroSet,&ms); //返回键处理 if(KeyTstDown(KEY_EXT)) { PageReturn(PV_REDRAW); } KeyClearDown(KEY_MENUALL); return 0; }
/////////////////////////////////////////////////////////////////////////////////////// // // 模型参数调节菜单处理过程 // u32 PageDeltaSet(u8 event) { static MENUSTAT ms; if(event==PV_INIT) { LcdClear(0); if(!ms.Init) { ms.iFocus=ms.iStart=0; ms.Init=1; } ms.Param=0xff; ms.Total=MenuDeltaSet[0].Max; ms.DrawMask=PD_ALL; return 1; } //根据使能开关确定菜单数 if(Model.Delta.Enable) ms.Total=MenuDeltaSet[0].Max; else ms.Total=1; //菜单数变化重绘 if(ms.Param!=ms.Total) { LcdClear(0); ms.Param=ms.Total; ms.DrawMask=PD_ALL; } if(event==PV_REDRAW) { ms.DrawMask=PD_ALL; } //菜单通用处理过程 PageMenuProc(MenuDeltaSet,&ms); //返回键处理 if(KeyTstDown(KEY_EXT)) { //V尾混控和三角翼/襟副翼混控互斥 if(Model.Delta.Enable) { Model.Vtail.Enable=0; Model.FlpAil.Enable=0; } PageReturn(PV_REDRAW); } KeyClearDown(KEY_MENUALL); return 0; }
/////////////////////////////////////////////////////////////////////////////////////// // // 混控菜单处理过程 // u32 PageMixerSet(u8 event) { static MENUSTAT ms; if(event==PV_INIT) { LcdClear(0); if(!ms.Init) { ms.iFocus=ms.iStart=0; ms.Init=1; } ms.Total=MenuMixerSet[0].Max; ms.DrawMask=PD_ALL; return 1; } if(event==PV_REDRAW) { ms.DrawMask=PD_ALL; } //设置各混控状态 strcpy(MenuMixerVtailStat,PageOptionOnOff[Model.Vtail.Enable]); strcpy(MenuMixerDeltaStat,PageOptionOnOff[Model.Delta.Enable]); strcpy(MenuMixerFlpAilStat,PageOptionOnOff[Model.FlpAil.Enable]); //菜单通用处理过程 PageMenuProc(MenuMixerSet,&ms); //回车键处理 if(KeyTstDown(KEY_ENT)) { //如果有子菜单或子功能,进入 if(MenuMixerSet[ms.iFocus+1].SubItem) { BeepMusic(MusicEnter); PageEnter((PAGEPROC)MenuMixerSet[ms.iFocus+1].SubItem,PV_INIT); } } //返回键处理 if(KeyTstDown(KEY_EXT)) { PageReturn(PV_REDRAW); } KeyClearDown(KEY_MENUALL); return 0; }
//模型参数调节菜单处理过程 u32 PageEpaSet(u8 event) { static MENUSTAT ms; if(event==PV_INIT) { LCD_Clr_All();//清屏 if(!ms.Init) { ms.iFocus=ms.iStart=0; ms.Init=1; } ms.Total=MenuEpaSet[0].Max; ms.DrawMask=PD_ALL; return 1; } if(event==PV_REDRAW) { LCD_Clr_All();//清屏 ms.DrawMask=PD_ALL; } //菜单通用处理过程 PageMenuProc(MenuEpaSet,&ms); //返回键处理 if(KeyTstDown(KEY_EXT)) { edit_enable = 0; PageReturn(PV_REDRAW); } KeyClearDown(KEY_MENUALL); return 0; }
u32 PageCurveSet(u8 event) { static u8 DrawMask; static u8 iStk; static u8 iFocus,Total,iStart; if(event==PV_INIT) { LcdClear(0); iStk=0; iFocus=CURVE_NUM; iStart=0; Total=CURVE_NUM+CURVE_FUNC; DrawMask=PD_ALL; return 1; } if(event==PV_USER) { LcdClear(0); DrawMask=PD_ALL; } //开始绘图 if(DrawMask) { LcdDrawStart(0, 0,LCD_W-1, LCD_H-1, DRAW_NWSE); //标题绘制 if(DrawMask&PD_TITLE) { LcdDrawRect(0, 0,127,13,0); LcdDrawText(2,0,(char*)PageCurveTitle[iStk]); if(PageCurveCnt>1) LcdDrawText(96,0,"\1ENT\x2"); LcdDrawHLine(0,LCD_CV_X-2,14,1); LcdDrawHLine(0,LCD_CV_X-2,15,1); } //曲线点列表 if(DrawMask&(PD_LIST|PD_VALUE)) { u16 i,x,y,idx; for(i=0,y=18;i<LCD_CURVE_LINES ;i++,y+=7) { idx=iStart+i; LcdBw=(idx==iFocus); LcdDrawRect(LCD_CV_IX,y,LCD_CV_IX+31,y+7,LcdBw); //绘制选中框 LcdDrawMiniInt(LCD_CV_IX+3,y+1,idx+1,1,0,0xff,0); //绘制曲线序号 LcdDrawMiniNum(LCD_CV_IX+7,y+1,LCD_MN_COL); //绘制分隔点 LcdDrawMiniInt(LCD_CV_IX+30,y+1,PageCurveValue[iStk*CURVE_DS+idx],0,1,0,1); //绘制曲线值 LcdBw=0; } //绘制EXP EPA菜单 LcdBw=(iFocus==CURVE_NUM); LcdDrawRect(3,20,LCD_CV_IX-4,26,LcdBw); LcdDrawMiniEng(5,21,"EPA\x12"); LcdDrawMiniInt(40,21,PageCurveValue[iStk*CURVE_DS+CURVE_NUM],0,0,1,1); //绘制EPA LcdBw=(iFocus==CURVE_NUM+1); LcdDrawRect(3,30,LCD_CV_IX-4,36,LcdBw); LcdDrawMiniEng(5,31,"EXP\x12"); LcdDrawMiniInt(40,31,PageCurveValue[iStk*CURVE_DS+CURVE_NUM+1],0,0,1,1);//绘制EXP LcdBw=(iFocus==CURVE_NUM+2); LcdDrawRect(3,40,LCD_CV_IX-4,46,LcdBw); LcdDrawMiniEng(5,41,"LEVEL"); LcdBw=(iFocus==CURVE_NUM+3); LcdDrawRect(3,50,LCD_CV_IX-4,56,LcdBw); LcdDrawMiniEng(5,51,"RESET"); LcdBw=0; //绘制曲线 LcdDrawRect(LCD_CV_X,LCD_CV_Y,LCD_CV_X+LCD_CV_W,LCD_CV_Y+LCD_CV_H,1); LcdDrawRect(LCD_CV_X+1,LCD_CV_Y+1,LCD_CV_X+LCD_CV_W-1,LCD_CV_Y+LCD_CV_H-1,0); LcdDrawHLine(LCD_CV_X,LCD_CV_X+LCD_CV_W,LCD_CV_Y+LCD_CV_H/2,1); LcdDrawVLine(LCD_CV_X+LCD_CV_W/2,LCD_CV_Y,LCD_CV_Y+LCD_CV_H,1); u16 x0,y0; for(i=0,x0=y0=0;i<CURVE_NUM;i++) { x=i*LCD_CV_W/(CURVE_NUM-1); y=LCD_CV_H-(s32)PageCurveValue[iStk*CURVE_DS+i]*LCD_CV_H/CURVE_TRV; if(y>LCD_CV_H) y=LCD_CV_H; LcdDrawLine(LCD_CV_X+x0,LCD_CV_Y+y0,LCD_CV_X+x,LCD_CV_Y+y,1); if(i==iFocus) LcdDrawVLine(LCD_CV_X+x,LCD_CV_Y,LCD_CV_Y+LCD_CV_H,1); x0=x; y0=y; } } //完成绘图 LcdDrawStop(); DrawMask=0; } //加减按键处理 s16 v=PageCurveValue[iStk*CURVE_DS+iFocus]; /////////////////////////////////////////////////////////////// if(iFocus<CURVE_NUM)//曲线值 { if(KeyTstHold(KEY_R)) { v=(v/10+1)*10; if(v>CURVE_TRV) v=CURVE_TRV; DrawMask=PD_LIST; } else if(KeyTstDown(KEY_R)) { if(v<CURVE_TRV) v++; DrawMask=PD_LIST; } if(KeyTstHold(KEY_L)) { v=(v/10-1)*10; if(v<0) v=0; DrawMask=PD_LIST; } else if(KeyTstDown(KEY_L)) { if(v>0) v--; DrawMask=PD_LIST; } } /////////////////////////////////////////////////////////////// else//EXP EPA等 { //////////////////////////////////////// if(iFocus==CURVE_NUM+3)//RESET { if(KeyTstDown(KEY_R) || KeyTstDown(KEY_L)) { u32 i; for(i=0;i<CURVE_NUM;i++) PageCurveValue[iStk*CURVE_DS+i]=i*125; PageCurveValue[iStk*CURVE_DS+CURVE_NUM ]=100; //epa PageCurveValue[iStk*CURVE_DS+CURVE_NUM+1]=0; //exp PageAlert("曲线参数已复位!",500,PV_USER); } } //////////////////////////////////////// if(iFocus==CURVE_NUM+2)//LEVEL { s16 delta=0; if(KeyTstHold(KEY_R)) delta=10; else if(KeyTstDown(KEY_R)) delta=1; if(KeyTstHold(KEY_L)) delta=-10; else if(KeyTstDown(KEY_L)) delta=-1; if(delta) { for(u32 i=0;i<CURVE_NUM;i++) { s16 v=PageCurveValue[iStk*CURVE_DS+i]; v+=delta; if(v>1000) v=1000; if(v<0) v=0; PageCurveValue[iStk*CURVE_DS+i]=v; } DrawMask=PD_LIST; } } //////////////////////////////////////// if(iFocus==CURVE_NUM+1)//EXP { if(KeyTstDown(KEY_R)) if(v<50) v++; if(KeyTstDown(KEY_L)) if(v>0) v--; if(PageCurveValue[iStk*CURVE_DS+CURVE_NUM+1]!=v) { CurveMake(&PageCurveValue[iStk*CURVE_DS],PageCurveValue[iStk*CURVE_DS+CURVE_NUM],v); DrawMask=PD_LIST; } } //////////////////////////////////////// if(iFocus==CURVE_NUM)//EPA { if(KeyTstDown(KEY_R)) if(v<100) v++; if(KeyTstDown(KEY_L)) if(v>-100) v--; if(PageCurveValue[iStk*CURVE_DS+CURVE_NUM]!=v) { CurveMake(&PageCurveValue[iStk*CURVE_DS],v,PageCurveValue[iStk*CURVE_DS+CURVE_NUM+1]); DrawMask=PD_LIST; } } } PageCurveValue[iStk*CURVE_DS+iFocus]=v; /////////////////////////////////////////////////////////////// //上下按键处理 if(KeyTstDown(KEY_UP)) { if(iFocus>0) iFocus--; else iFocus=Total-1; DrawMask=PD_LIST|PD_IDX; } if(KeyTstDown(KEY_DW)) { if(iFocus<Total-1) iFocus++; else iFocus=0; DrawMask=PD_LIST|PD_IDX; } if(iFocus>=Total) iFocus=Total-1; if(iFocus>=CURVE_NUM) iStart=0; else if(iFocus<iStart) iStart=iFocus; else if(iFocus>iStart+LCD_CURVE_LINES-1) iStart=iFocus-LCD_CURVE_LINES+1; /////////////////////////////////////////////////////////////// //回车键切换曲线 if(KeyTstDown(KEY_ENT) ) { iStk++; if(iStk>=PageCurveCnt) iStk=0; DrawMask|=PD_ALL; } /////////////////////////////////////////////////////////////// //返回键处理 if(KeyTstDown(KEY_EXT) ) { PageReturn(PV_REDRAW); } KeyClearDown(KEY_MENUALL); return 0; }
/////////////////////////////////////////////////////////////////////////////////////// // // 摇杆校准 // u32 PageStkCal(u8 event) { u8 i; static s8 StkCalStep,Step; static s16 stkmax[STK_NUM],stkmin[STK_NUM],stkmid[STK_NUM]; if(event==PV_INIT) { StkCalStep=0; Step=-1; LcdClear(0); LcdDrawStart(0, 0,LCD_W-1, LCD_H-1, DRAW_NWSE); LcdDrawText(3,0,"摇杆校准"); LcdDrawHLine(0,128,14,1); LcdDrawHLine(0,128,15,1); LcdDrawStop(); stkmin[0]=5000; stkmin[1]=5000; stkmin[2]=5000; stkmin[3]=5000; stkmax[0]=0; stkmax[1]=0; stkmax[2]=0; stkmax[3]=0; return 1; } if(Step!=StkCalStep) { LcdDrawStart(0, 0,LCD_W-1, LCD_H-1, DRAW_NWSE); if(StkCalStep==0) { LcdDrawBmpFile(8,18,"res/stk.bmp"); LcdDrawText(36,18,"将所有摇杆置中"); LcdDrawText(42,32,"然后按ENT键"); } if(StkCalStep==1) { LcdDrawBmpFile(8,18,"res/stkmax.bmp"); LcdDrawText(36,18,"打满各摇杆行程"); LcdDrawText(42,32,"然后按ENT键"); } LcdDrawStop(); Step=StkCalStep; } //记录最大最小值 for(i=0;i<STK_NUM;i++) { if(StickRaw[i]>stkmax[i]) stkmax[i]=StickRaw[i]; if(StickRaw[i]<stkmin[i]) stkmin[i]=StickRaw[i]; } //返回键处理 if(KeyTstDown(KEY_EXT) || event==PV_END) { PageReturn(PV_REDRAW); } //回车键处理 if(KeyTstDown(KEY_ENT)) { StkCalStep++; if(StkCalStep==1)//记录中点 { for(i=0;i<STK_NUM;i++) { stkmid[i]=StickRaw[i]; } } if(StkCalStep>=2) { for(i=0;i<STK_NUM;i++) { TxSys.StkCali[i][1]=stkmid[i]; TxSys.StkCali[i][0]=stkmid[i]-stkmin[i]; TxSys.StkCali[i][2]=stkmax[i]-stkmid[i]; } PageAlert("摇杆校准完成!",1000,PV_END); TxSys.StkCalied=CALMARK; } } //100ms定时处理 if(SysTimerClk%100==0) { LcdDrawStart(0, 50,LCD_W-1, LCD_H-1, DRAW_NWSE); LcdDrawRect(0, 50,127,63,0); for(i=0;i<STK_NUM;i++) { LcdDrawMiniInt(i*20+22,50,StickRaw[i],0,0,0,1); LcdDrawMiniInt(i*20+22,58,StickCal[i],0,0,1,1); } LcdDrawStop(); } KeyClearDown(KEY_MENUALL); return 0; }
/////////////////////////////////////////////////////////////////////////////////////// // // 主界面绘制和按键处理 // u32 PageMain(u8 event) { if(event==PV_INIT) { FILE *ficon=fopen("res/flymode.bmp","rb"); if(ficon) { setbuf(ficon,0); fseek(ficon,62,SEEK_SET); fread(ChsIcon,sizeof(ChsIcon),1,ficon); fclose(ficon); } PageMainDrawMask=PMD_ALL; BatteryHandler();//启动一次电压检测 return 1; } //界面绘制 if(PageMainDrawMask) { LcdDrawStart(0, 0,LCD_W-1, LCD_H-1, DRAW_NWSE); if(PageMainDrawMask&PMD_BACK) LcdDrawBmpFile(0,0,"res/main.bmp"); //模型图标 if(PageMainDrawMask&PMD_ICON) { char file[20]; strcpy(file,"icon/"); strcat(file,Model.Icon); strcat(file,".bmp"); LcdDrawBmpFile(74,9,file); } //模型名称 if(PageMainDrawMask&PMD_NAME) { u16 x=100-strlen(Model.Name)*6/2; LcdWriteStr(x,6,Model.Name); } //绘制电池 if(PageMainDrawMask&PMD_BAT) DrawBattery(); if(PageMainDrawMask&PMD_TRIM) DrawTrimBar(); LcdDrawStop(); PageMainDrawMask=0; } //定时界面绘制 DrawInfo(); //按键处理 if(KeyTstDown(KEY_ENT)) { PageEnter(PageMenuMain,PV_INIT); PageMainDrawMask=PMD_ALL; } //定时器处理 if(PageMainTimerSel>0 && PageMainTimerSel<=3) { if(KeyTstDown(KEY_R)) { TxTimer[PageMainTimerSel-1].Cnt+=60; } if(KeyTstDown(KEY_L)) { TxTimer[PageMainTimerSel-1].Cnt-=60; } } if(KeyTstDown(KEY_DW)) { PageMainTimerSel++; } if(KeyTstDown(KEY_UP)) { PageMainTimerSel--; } if(PageMainTimerSel>3) PageMainTimerSel=0; else if(PageMainTimerSel<0) PageMainTimerSel=3; else { if(KeyTstDown(KEY_EXT)) { TxTimer[PageMainTimerSel-1].Reset=1; } } //清空未处理按键 KeyClearDown(KEY_MENUALL); return 0; }
u32 PageModelSel(u8 event) { static u32 DrawMask; if(event==PV_INIT) { LcdClear(0); LcdDrawStart(0, 0,LCD_W-1, LCD_H-1, DRAW_NWSE); LcdDrawText(3,0,"选择模型"); LcdDrawHLine(0,128,14,1); LcdDrawHLine(0,128,15,1); LcdDrawStop(); DrawMask=PD_ALL; PageModFileCnt=0; PageModFileIdx=0; PageModFileStart=0; //枚举所有模型图标 if(FS_OpenDir("model")) { char modfile[13]; int type; while((type = FS_ReadDir(modfile)) != 0 && PageModFileCnt<MODCFG_NUM) { BeepHandler();//此循环耗时太长,需要执行一些必要过程 if (type == 1) { //打开配置文件读取模型名称 char filename[32]; strcpy(filename,"model/"); strcat(filename,modfile); FILE *fcfg=fopen(filename,"rb"); if(fcfg) { MODEL model; fread(&model,sizeof(model),1,fcfg); if(model.Mark==CFGMARK || model.Mark==CFGMARKOLD) { u16 idx=(modfile[0]-'0')*10+(modfile[1]-'0'); PageModFiles[PageModFileCnt][0]=modfile[0]; PageModFiles[PageModFileCnt][1]=modfile[1]; PageModFiles[PageModFileCnt][2]=0xba;//号 PageModFiles[PageModFileCnt][3]=0xc5;//号 PageModFiles[PageModFileCnt][4]='.'; if(idx==TxSys.ModelNo) strcpy(&PageModFiles[PageModFileCnt][5],Model.Name); else strcpy(&PageModFiles[PageModFileCnt][5],model.Name); if(idx==TxSys.ModelNo)//寻找当前配置文件 { PageModFileIdx=PageModFileCnt; } PageModFileCnt++; } fclose(fcfg); } } } FS_CloseDir(); } //判断是否有配置文件 if(PageModFileCnt==0) { PageAlert("没有配置文件...",1000,PV_END); } return 1; } //绘制界面 if(DrawMask) { //起始位置整理 if(PageModFileIdx<PageModFileStart) PageModFileStart=PageModFileIdx; if(PageModFileIdx>PageModFileStart+LCD_MENULINES-1) PageModFileStart=PageModFileIdx-LCD_MENULINES+1; LcdDrawStart(0, 0,LCD_W-1, LCD_H-1, DRAW_NWSE); /* //菜单项索引号 if(DrawMask&PD_IDX) { if(PageModFileCnt>9) { LcdDrawMiniInt(110,4,PageModFileIdx+1,2,0,0xff,1); LcdDrawMiniNum(110,4,LCD_MN_SPA); LcdDrawMiniInt(114,4,PageModFileCnt,2,0,0xff,0); } else { LcdDrawMiniInt(120,4,PageModFileIdx+1,2,0,0xff,1); LcdDrawMiniNum(120,4,LCD_MN_SPA); LcdDrawMiniInt(124,4,PageModFileCnt,1,0,0xff,0); } } */ //绘制文件列表和模型图标 if(DrawMask&PD_LIST) { //显示列表 int i,y,idx; for(i=0,y=16;i<LCD_MENULINES;i++,y+=16) { idx=PageModFileStart+i; LcdBw=(idx==PageModFileIdx); LcdDrawRect(2,y,125,y+15,LcdBw); //绘制选中框 LcdDrawText(3,y,PageModFiles[idx]); //绘制名称 LcdBw=0; } } LcdDrawStop(); DrawMask=0; } //上下按键处理 if(KeyTstDown(KEY_UP)) { if(PageModFileIdx>0) PageModFileIdx--; else PageModFileIdx=PageModFileCnt-1; DrawMask=PD_LIST|PD_IDX; } if(KeyTstDown(KEY_DW)) { if(PageModFileIdx<PageModFileCnt-1) PageModFileIdx++; else PageModFileIdx=0; DrawMask=PD_LIST|PD_IDX; } //选中位图 if(KeyTstDown(KEY_ENT)) { //取得选中的模型号 PageModFileIdx= 10*(PageModFiles[PageModFileIdx][0]-'0')+PageModFiles[PageModFileIdx][1]-'0'; //保存现有模型的配置 ModelSave(TxSys.ModelNo); //加载新遥控器配置 ModelLoad(TxSys.ModelNo=PageModFileIdx,1); PageAlert("模型已切换!",1000,PV_END); } //退出消息 if(KeyTstDown(KEY_EXT) || event==PV_END) PageReturn(PV_INIT);//这里不要用REDRAW,要用INIT,让模型菜单初始化 KeyClearDown(KEY_MENUALL); return 0; }
//模型参数调节菜单处理过程 u32 PageNorRevSet(u8 event) { static u8 DrawMask; static u8 iFocus; if(event==PV_INIT) { LCD_Clr_All();//清屏 DrawMask = PD_ALL; iFocus = 0; return 1; } if(event==PV_REDRAW) { LCD_Clr_All();//清屏 DrawMask = PD_ALL; } if(DrawMask) { if(DrawMask&PD_TITLE) { LCD_Fill_Rect(0,0,127,13,0); Disp_GB2312_String(0,3,(u8 *)TitleNorRevSet[TxSys.Language],0,0); LCD_Draw_Line(0,14,127,14,1); LCD_Draw_Line(0,15,127,15,1); Disp_NorRev(24,17); Disp_NorRev(92,17); } if(DrawMask&PD_IDX) { if(iFocus==0) LcdDraw_RevBarArrow(ARROW_X1,ARROW_Y); else LCD_Fill_Rect(ARROW_X1,ARROW_Y,ARROW_X1+6,ARROW_Y+8,0); if(iFocus==1) LcdDraw_RevBarArrow(ARROW_X1,ARROW_Y+8); else LCD_Fill_Rect(ARROW_X1,ARROW_Y+8,ARROW_X1+6,ARROW_Y+16,0); if(iFocus==2) LcdDraw_RevBarArrow(ARROW_X1,ARROW_Y+16); else LCD_Fill_Rect(ARROW_X1,ARROW_Y+16,ARROW_X1+6,ARROW_Y+24,0); if(iFocus==3) LcdDraw_RevBarArrow(ARROW_X1,ARROW_Y+24); else LCD_Fill_Rect(ARROW_X1,ARROW_Y+24,ARROW_X1+6,ARROW_Y+32,0); if(iFocus==4) LcdDraw_RevBarArrow(ARROW_X1,ARROW_Y+32); else LCD_Fill_Rect(ARROW_X1,ARROW_Y+32,ARROW_X1+6,ARROW_Y+40,0); if(iFocus==5) LcdDraw_RevBarArrow(ARROW_X2,ARROW_Y); else LCD_Fill_Rect(ARROW_X2,ARROW_Y,ARROW_X2+6,ARROW_Y+8,0); if(iFocus==6) LcdDraw_RevBarArrow(ARROW_X2,ARROW_Y+8); else LCD_Fill_Rect(ARROW_X2,ARROW_Y+8,ARROW_X2+6,ARROW_Y+16,0); if(iFocus==7) LcdDraw_RevBarArrow(ARROW_X2,ARROW_Y+16); else LCD_Fill_Rect(ARROW_X2,ARROW_Y+16,ARROW_X2+6,ARROW_Y+24,0); if(iFocus==8) LcdDraw_RevBarArrow(ARROW_X2,ARROW_Y+24); else LCD_Fill_Rect(ARROW_X2,ARROW_Y+24,ARROW_X2+6,ARROW_Y+32,0); if(iFocus==9) LcdDraw_RevBarArrow(ARROW_X2,ARROW_Y+32); else LCD_Fill_Rect(ARROW_X2,ARROW_Y+32,ARROW_X2+6,ARROW_Y+40,0); } if(DrawMask&PD_VALUE) { LcdDrawMiniNum(REVBAR_X1,REVBAR_Y,LCD_MN_CHAR('C'),0); LcdDrawMiniNum(REVBAR_X1+4,REVBAR_Y,LCD_MN_CHAR('H'),0); LcdDrawMiniNum(REVBAR_X1+8,REVBAR_Y,1,0); Disp_RevBar(REVBAR_X1+12,REVBAR_Y,Model.Rev[0]); LcdDrawMiniNum(REVBAR_X1,REVBAR_Y+8,LCD_MN_CHAR('C'),0); LcdDrawMiniNum(REVBAR_X1+4,REVBAR_Y+8,LCD_MN_CHAR('H'),0); LcdDrawMiniNum(REVBAR_X1+8,REVBAR_Y+8,2,0); Disp_RevBar(REVBAR_X1+12,REVBAR_Y+8,Model.Rev[1]); LcdDrawMiniNum(REVBAR_X1,REVBAR_Y+16,LCD_MN_CHAR('C'),0); LcdDrawMiniNum(REVBAR_X1+4,REVBAR_Y+16,LCD_MN_CHAR('H'),0); LcdDrawMiniNum(REVBAR_X1+8,REVBAR_Y+16,3,0); Disp_RevBar(REVBAR_X1+12,REVBAR_Y+16,Model.Rev[2]); LcdDrawMiniNum(REVBAR_X1,REVBAR_Y+24,LCD_MN_CHAR('C'),0); LcdDrawMiniNum(REVBAR_X1+4,REVBAR_Y+24,LCD_MN_CHAR('H'),0); LcdDrawMiniNum(REVBAR_X1+8,REVBAR_Y+24,4,0); Disp_RevBar(REVBAR_X1+12,REVBAR_Y+24,Model.Rev[3]); LcdDrawMiniNum(REVBAR_X1,REVBAR_Y+32,LCD_MN_CHAR('C'),0); LcdDrawMiniNum(REVBAR_X1+4,REVBAR_Y+32,LCD_MN_CHAR('H'),0); LcdDrawMiniNum(REVBAR_X1+8,REVBAR_Y+32,5,0); Disp_RevBar(REVBAR_X1+12,REVBAR_Y+32,Model.Rev[4]); LcdDrawMiniNum(REVBAR_X2,REVBAR_Y,LCD_MN_CHAR('C'),0); LcdDrawMiniNum(REVBAR_X2+4,REVBAR_Y,LCD_MN_CHAR('H'),0); LcdDrawMiniNum(REVBAR_X2+8,REVBAR_Y,6,0); Disp_RevBar(REVBAR_X2+12,REVBAR_Y,Model.Rev[5]); LcdDrawMiniNum(REVBAR_X2,REVBAR_Y+8,LCD_MN_CHAR('C'),0); LcdDrawMiniNum(REVBAR_X2+4,REVBAR_Y+8,LCD_MN_CHAR('H'),0); LcdDrawMiniNum(REVBAR_X2+8,REVBAR_Y+8,7,0); Disp_RevBar(REVBAR_X2+12,REVBAR_Y+8,Model.Rev[6]); LcdDrawMiniNum(REVBAR_X2,REVBAR_Y+16,LCD_MN_CHAR('C'),0); LcdDrawMiniNum(REVBAR_X2+4,REVBAR_Y+16,LCD_MN_CHAR('H'),0); LcdDrawMiniNum(REVBAR_X2+8,REVBAR_Y+16,8,0); Disp_RevBar(REVBAR_X2+12,REVBAR_Y+16,Model.Rev[7]); LcdDrawMiniNum(REVBAR_X2,REVBAR_Y+24,LCD_MN_CHAR('C'),0); LcdDrawMiniNum(REVBAR_X2+4,REVBAR_Y+24,LCD_MN_CHAR('H'),0); LcdDrawMiniNum(REVBAR_X2+8,REVBAR_Y+24,9,0); Disp_RevBar(REVBAR_X2+12,REVBAR_Y+24,Model.Rev[8]); LcdDrawMiniNum(REVBAR_X2-4,REVBAR_Y+32,LCD_MN_CHAR('C'),0); LcdDrawMiniNum(REVBAR_X2,REVBAR_Y+32,LCD_MN_CHAR('H'),0); LcdDrawMiniNum(REVBAR_X2+4,REVBAR_Y+32,1,0); LcdDrawMiniNum(REVBAR_X2+8,REVBAR_Y+32,0,0); Disp_RevBar(REVBAR_X2+12,REVBAR_Y+32,Model.Rev[9]); } DrawMask = 0; } if(KeyTstDown(KEY_ENT)) { Model.Rev[iFocus] = !Model.Rev[iFocus]; DrawMask = PD_VALUE; } //上下按键处理 if(KeyTstDown(KEY_DOWN)) { if(iFocus<9) iFocus++; else iFocus = 0; DrawMask = PD_IDX; } if(KeyTstDown(KEY_UP)) { if(iFocus>0) iFocus--; else iFocus = 9; DrawMask = PD_IDX; } //返回键处理 if(KeyTstDown(KEY_EXT)) { PageReturn(PV_INIT); } KeyClearDown(KEY_MENUALL); return 0; }
u32 PageMenuMod(u8 event) { static MENUSTAT ms; PageMenuModMarkNo(); if(event==PV_INIT) { LcdClear(0); if(!ms.Init) { ms.iFocus=ms.iStart=0; ms.Init=1; } ms.Total=MenuMod[0].Max; ms.DrawMask=PD_ALL; return 1; } if(event==PV_REDRAW) { ms.DrawMask=PD_ALL; } //菜单通用处理过程 PageMenuProc(MenuMod,&ms); //回车键处理 if(KeyTstDown(KEY_ENT)) { //如果有子菜单或子功能,进入 if(MenuMod[ms.iFocus+1].SubItem) { BeepMusic(MusicEnter); PageEnter((PAGEPROC)MenuMod[ms.iFocus+1].SubItem,PV_INIT); } //复位功能 if(MenuMod[ms.iFocus+1].pValue==&PageMenuModelReset) { if(PageMenuModelReset==1) { PageMenuModelReset=0; memcpy(&Model,&ModelDef,sizeof(Model)); Model.Name[5]=TxSys.ModelNo/10+'0'; Model.Name[6]=TxSys.ModelNo%10+'0'; Model.Name[7]=0; PageAlert("模型已重置!",1000,PV_INIT); } if(PageMenuModelReset==2) { PageMenuModelReset=0; ModelFormat(); PageAlert("所有模型已重置!",1000,PV_INIT); } } } //返回键处理 if(KeyTstDown(KEY_EXT)) { PageReturn(PV_INIT); } KeyClearDown(KEY_MENUALL); return 0; }