void DrawBattery(void) { static u8 batflash; int i,BatPer; u16 batfull,batlow; //计算百分比,缺省镍电:4V~5V batfull=500; batlow=400; if(TxSys.BatType==1)//碱性:4V~6V { batfull=600; batlow=400; } if(TxSys.BatType==2)//1S LI:3.3V~4.2V { batfull=410; batlow=330; } if(TxSys.BatType==3)//2S LI:6.6V~8.4V { batfull=830; batlow=660; } if(BatVol>batfull) BatPer=LCD_BAT_FULL; else BatPer=(BatVol-batlow)*LCD_BAT_FULL/(batfull-batlow); //开始绘制电池状态 LcdDrawStart(0, 0,LCD_W-1, 8, DRAW_NWSE); //显示电池电压 if(BatLowCnt>=BAT_LOW_CNT) batflash=!batflash; else batflash=1; if(batflash) { LcdDrawMiniInt(LCD_BAT_X+18,LCD_BAT_Y,BatVol,0,2,0,1); LcdDrawMiniNum(LCD_BAT_X+18,LCD_BAT_Y,LCD_MN_CHAR('V')); } else LcdDrawRect(LCD_BAT_X,LCD_BAT_Y,LCD_BAT_X+22,LCD_BAT_Y+6,0); //显示电池柱状图 LcdDrawMaskY(LCD_BAT_X+24,LCD_BAT_Y,LCD_BAT_ICON1,5); LcdDrawMaskY(LCD_BAT_X+25,LCD_BAT_Y,BatPer==LCD_BAT_FULL?LCD_BAT_ICON4:LCD_BAT_ICON2,5); for(i=0;i<LCD_BAT_FULL;i++) { LcdDrawMaskY(LCD_BAT_X+26+i,LCD_BAT_Y,i>=(LCD_BAT_FULL-BatPer)?LCD_BAT_ICON4:LCD_BAT_ICON3,5); } LcdDrawMaskY(LCD_BAT_X+26+LCD_BAT_FULL,LCD_BAT_Y,LCD_BAT_ICON5,5); LcdDrawStop(); }
void DrawRunTimer(u16 sec) { u16 h,m,s; //开机时间 h=sec/3600; m=sec/60%60; s=sec%60; //绘制开机时间 LcdDrawMiniNum(RUNTIMER_X ,RUNTIMER_Y,h/10); LcdDrawMiniNum(RUNTIMER_X+ 4,RUNTIMER_Y,h%10); LcdDrawMiniNum(RUNTIMER_X+ 8,RUNTIMER_Y,LCD_MN_COL); LcdDrawMiniNum(RUNTIMER_X+10,RUNTIMER_Y,m/10); LcdDrawMiniNum(RUNTIMER_X+14,RUNTIMER_Y,m%10); LcdDrawMiniNum(RUNTIMER_X+18,RUNTIMER_Y,LCD_MN_COL); LcdDrawMiniNum(RUNTIMER_X+20,RUNTIMER_Y,s/10); LcdDrawMiniNum(RUNTIMER_X+24,RUNTIMER_Y,s%10); }
void Disp_NorRev(u8 x,u8 y) { LcdDrawMiniNum(x,y,LCD_MN_CHAR('N'),0); x+=4; LcdDrawMiniNum(x,y,LCD_MN_CHAR('O'),0); x+=4; LcdDrawMiniNum(x,y,LCD_MN_CHAR('R'),0); x+=12; LcdDrawMiniNum(x,y,LCD_MN_CHAR('R'),0); x+=4; LcdDrawMiniNum(x,y,LCD_MN_CHAR('E'),0); x+=4; LcdDrawMiniNum(x,y,LCD_MN_CHAR('V'),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 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; }