📄 sysmenu.c
字号:
// Include Standard LIB files
#include "dtm_v3.h"
#include "dtm.h"
#include "help.h"
#include <stdio.h>
#include "sysmenu.h"
#include "externdef.h"
void SystemMenuMain(void);
void SystemMenuDisplayWindow(_BYTE cCurMenuID);
void SystemMenuProcess(_BYTE cCurMenuID);
void AdExplore(_BYTE *cpStartAdd,_BYTE cNumberOfAd);
_BYTE KParaAdjust(void);
void ParaSetup(void);
void SystemMenuMain(void)
{
_BYTE cCurMenuID;
cCurMenuID = MENUTEMPLOGID;
SystemMenuDisplayWindow(cCurMenuID);
while(1) {
KeyReadKey();
if (gcKeyUp) {
gcKeyUp = FALSE;
switch(gdwKeyNum) {
case CANCEL_CHANGE_KEY: // 退回SystemMenu
gcDispChanged = 1;
return;
case ENTER_MENU_KEY: // 选中SytemMenu中的菜单
SystemMenuProcess(cCurMenuID);
gcDispChanged = 1;
return;
case LOGOUT_PGDN_KEY: // 选择SystemMenu中的菜单项
if (cCurMenuID==MAXMENUITEMS-1)
cCurMenuID = 0;
else
cCurMenuID++;
SystemMenuDisplayWindow(cCurMenuID);
break;
case LOGIN_PGUP_KEY:
if (cCurMenuID==0)
cCurMenuID = MAXMENUITEMS - 1;
else
cCurMenuID--;
SystemMenuDisplayWindow(cCurMenuID);
break;
} // end of switch
} // end of if
} // end of while
}
//* -----------------------------------------------------------------------------
//* 函数: SystemMenuDisplayWindow
//* 功能: 显示菜单窗口
//* 参数: cCurMenuID: 菜单ID号
//* 显示要求 cCurMenuIDz指定的菜单项始终居中
//* -----------------------------------------------------------------------------
void SystemMenuDisplayWindow(_BYTE cCurMenuID)
{
_BYTE cMenuID,cRow,cCol;
// 显示小图标
DispLCDClearScreen();
// 显示cCurMenuID选中的小图标
cRow = SMALLICONTOPX + SMALLICONHEIGHT - 1;
cCol = SMALLICONTOPY;
DispOutImageInRow(cRow,cCol,SMALLICONHEIGHT,SMALLICONWIDTH,SmallIcons+LENOFSMALLICON*cCurMenuID,1);
//DispRefreshInRow(cRow,cCol,SMALLICONHEIGHT,SMALLICONWIDTH);
// 显示缺省的大图标
cRow = LARGEICONTOPX;
cCol = LARGEICONTOPY;
DispOutImageInRow(cRow,cCol,LARGEICONHEIGHT,LARGEICONWIDTH,LargeIcons+LENOFLARGEICON*cCurMenuID,0);
//DispRefreshInRow(cRow,cCol,LARGEICONHEIGHT,LARGEICONWIDTH);
// 显示最上面的小图标
cRow = SMALLICONTOPX;
cCol = SMALLICONTOPY;
cMenuID = (cCurMenuID==0?MAXMENUITEMS-1:cCurMenuID-1);
DispOutImageInRow(cRow,cCol,SMALLICONHEIGHT,SMALLICONWIDTH,SmallIcons+LENOFSMALLICON*cMenuID,0);
//DispRefreshInRow(cRow,cCol,SMALLICONHEIGHT,SMALLICONWIDTH);
// 显示最下面的小图标
cRow = SMALLICONTOPX + 2*SMALLICONHEIGHT - 2;
cCol = SMALLICONTOPY;
cMenuID = (cCurMenuID==MAXMENUITEMS-1?0:cCurMenuID+1);
DispOutImageInRow(cRow,cCol,SMALLICONHEIGHT,SMALLICONWIDTH,SmallIcons+LENOFSMALLICON*cMenuID,0);
DispRefresh(0,0,VIDEOPAGE,VIDEOCOL,1);
}
void SystemMenuProcess(_BYTE cCurMenuID)
{
_BYTE cRetCode;
_BYTE cCardType;
switch(cCurMenuID) {
case MENUTEMPLOGID:
gcKeyDown = TRUE;
gdwKeyNum = MENU_TMPLOG_KEY;
break;
case MENULOGID:
gcKeyDown = TRUE;
gdwKeyNum = MENU_LOGIN_KEY;
break;
case MENUQUERYID:
gcKeyDown = TRUE;
gdwKeyNum = MENU_QUERY_KEY;
break;
case MENUSETUPID:
cRetCode = CheckAdmin(&cCardType);
if ((cRetCode==C_OK) && ((cCardType==DADMINCARD)||(cCardType==SADMINCARD)))
ParaSetup();
break;
case MENUDOWNADID:
break;
case MENUEXPLOERADID:
AdExplore(gcpWellcomIcon,MAXADITEMS);
gcKeyUp = FALSE;
break;
case MENUKPARAID:
cRetCode = CheckAdmin(&cCardType);
if (cRetCode==C_OK) KParaAdjust();
gcKeyUp = FALSE;
break;
case MENUINITID:
cRetCode = CheckAdmin(&cCardType);
if (cRetCode==C_OK) DeviceInit();
gcKeyUp = FALSE;
break;
case MENUHELPID:
AdExplore(cpHelp,MAXHELPITEMS);
gcKeyUp = FALSE;
break;
}
}
void AdExplore(_BYTE *cpStartAdd,_BYTE cNumberOfAd)
{
_BYTE *cpAdImage;
_BYTE cCurAdID;
cCurAdID = 0;
//cpAdImage =(_BYTE *)FLASH_BASE;
cpAdImage =cpStartAdd;
DispOutImageInRow(0,0,64,128,cpAdImage,0);
DispRefresh(0,0,VIDEOPAGE,VIDEOCOL,1);
gcKeyUp = FALSE;
while(1) {
KeyReadKey();
if (gcKeyUp) {
gcKeyUp = FALSE;
switch(gdwKeyNum) {
case CANCEL_CHANGE_KEY: // 退回SystemMenu
case ENTER_MENU_KEY: // 选中SytemMenu中的菜单
gcDispChanged = 1;
return;
case LOGOUT_PGDN_KEY: // 选择SystemMenu中的菜单项
if (cCurAdID==cNumberOfAd-1)
cCurAdID = 0;
else
cCurAdID++;
break;
case LOGIN_PGUP_KEY:
if (cCurAdID==0)
cCurAdID = cNumberOfAd - 1;
else
cCurAdID--;
break;
} // end of switch
//DispOutImageInRow(0,0,64,128,cpAdImage,0);
DispOutImageInRow(0,0,64,128,cpAdImage+cCurAdID*1024,0);
DispRefresh(0,0,VIDEOPAGE,VIDEOCOL,1);
} // end of if
} // end of while
}
//---------------- K系数校准功能 -------------
// 对K系数进行校准
_BYTE KParaAdjust(void)
{
_WORD wMileVal;
_DWORD dwKParaVal;
_BYTE cPos,cRetCode;
_BYTE cpKPara[5],cpMile[5];
_BYTE cMileChanged;
gwPluseSetup = 0;
dwKParaVal=0;
wMileVal = 100;
cMileChanged = 0;
DispLCDClearScreen();
DispOutText(0,0,12,(_BYTE *)" * K系数校准* ");
// 显示校准距离
LongToString(wMileVal,cpMile,4);
cpMile[4] = 'M';
DispOutText(2,0,5,(_BYTE *)"校准里程:");
DispOutText(2,9*8,5,cpMile);
// 将K系数转换为四位字符
LongToString(dwKParaVal,cpKPara,5);
DispOutText(4,0,7,(_BYTE *)" K系数:");
DispOutText(4,9*8,5,cpKPara);
// 显示保存
DispOutText(6,0,6,(_BYTE *)" 确认 ");
// 显示取消
DispOutText(6,8*8,6,(_BYTE *)" 取消 ");
DispRefresh(0,0,VIDEOPAGE,VIDEOCOL,1);
cPos = 1;
DispRefresh(2,9*8,2,5*8,0);
while(1) {
if ((gwPluseSetup!=dwKParaVal)||(cMileChanged!=0)) {
dwKParaVal = gwPluseSetup;
dwKParaVal = dwKParaVal*wMileVal/1000;
LongToString(dwKParaVal,cpKPara,5);
DispOutText(4,9*8,5,cpKPara);
if (cPos==2)
DispRefresh(4,9*8,2,5*8,0);
else
DispRefresh(4,9*8,2,5*8,1);
dwKParaVal = gwPluseSetup;
cMileChanged=0;
}
KeyReadKey();
if (gcKeyUp) {
gcKeyUp = FALSE;
switch(gdwKeyNum) {
case ENTER_MENU_KEY:
if (cPos==3) { // 保存
// 写K参数信息到FLASH
dwKParaVal = gwPluseSetup;
dwKParaVal = dwKParaVal*wMileVal/1000;
if (dwKParaVal==0) {
DisplayMessage(M_KPARAZERO,6,1,WAITDISP,RECOVERYDISP); // 操作被取消
return(C_NOTOK);
}
SPB.wKParm = (_WORD)dwKParaVal;
cRetCode = FlashReadWriteSPB(&SPB,ICWRITE);
if (cRetCode!=C_OK) {
DisplayMessage(M_MEMERROR,6,1,WAITDISP,RECOVERYDISP); // 操作被取消
}
return(C_OK);
}
if (cPos==4) return(C_OK);
break;
case CANCEL_CHANGE_KEY:
switch (cPos) {
case 1: // 距离栏->K系数栏
DispRefresh(2,9*8,2,5*8,1);
DispRefresh(4,9*8,2,5*8,0);
break;
case 2: // K系数栏->保存栏
DispRefresh(4,9*8,2,5*8,1);
DispRefresh(6,2*8,2,4*8,0);
break;
case 3: // 保存栏->取消栏
DispRefresh(6,2*8,2,4*8,1);
DispRefresh(6,10*8,2,4*8,0);
break;
case 4: // 取消栏->距离栏
DispRefresh(6,10*8,2,4*8,1);
DispRefresh(2,9*8,2,5*8,0);
break;
} //end switch cPos
cPos = (cPos==4?1:cPos+1);
break;
case LOGOUT_PGDN_KEY:
case LOGIN_PGUP_KEY:
if (cPos==1) {
wMileVal = (_WORD)ByteToLong(cpMile,4,ISASCII);
if (gdwKeyNum==LOGOUT_PGDN_KEY)
wMileVal=(wMileVal>100?wMileVal-100:1000);
else
wMileVal=(wMileVal==1000?100:wMileVal+100);
LongToString(wMileVal,cpMile,4);
DispOutText(2,9*8,5,cpMile);
DispRefresh(2,9*8,2,5*8,0);
cMileChanged=1;
}
} // end of gKeyNum
} // end of if
} // end of while
}
// 设置系统参数
// 对如下的系统参数进行设置
// 验证时间值,速度上限,速度界限
void ParaSetup(void)
{
_BYTE cVerifyCycle,cSpeedLine;
_BYTE cPos,cRetCode;
_BYTE cpVerifyCycle[3],cpSpeedLine[2];
DispLCDClearScreen();
DispOutText(0,0,12,(_BYTE *)" *系统设置* ");
// 验证时间
LongToString(SPB.cVerifyCycle,cpVerifyCycle,3);
DispOutText(2,0,5,(_BYTE *)"验证时间:");
DispOutText(2,9*8,3,cpVerifyCycle);
// 速度界限
DispOutText(4,0,5,(_BYTE *)"速度设置:");
LongToString(SPB.cSpeedLine,cpSpeedLine,2);
DispOutText(4,9*8,2,cpSpeedLine);
DispRefresh(0,0,VIDEOPAGE,VIDEOCOL,1);
// 反白
DispRefresh(2,9*8,2,3*8,0);
cPos = 1;
cVerifyCycle = (_BYTE)ByteToLong(cpVerifyCycle,3,ISASCII);
while(1) {
KeyReadKey();
if (gcKeyUp) {
gcKeyUp = FALSE;
switch(gdwKeyNum) {
case ENTER_MENU_KEY:
// 写K参数信息到FLASH
cVerifyCycle = (_BYTE)ByteToLong(cpVerifyCycle,3,ISASCII);
if (cVerifyCycle==0) {
DisplayMessage(M_SETUPERROR,6,1,WAITDISP,RECOVERYDISP); // 操作被取消
break;
}
SPB.cVerifyCycle = cVerifyCycle;
cSpeedLine = (_BYTE)ByteToLong(cpSpeedLine,2,ISASCII);
if (cSpeedLine==0) {
DisplayMessage(M_SETUPERROR,6,1,WAITDISP,RECOVERYDISP); // 操作被取消
break;
}
SPB.cSpeedLine = cSpeedLine;
cRetCode = FlashReadWriteSPB(&SPB,ICWRITE);
if (cRetCode!=C_OK) {
DisplayMessage(M_MEMERROR,6,1,WAITDISP,RECOVERYDISP); // 操作被取消
}
return;
case CANCEL_CHANGE_KEY:
switch (cPos) {
case 1:
DispRefresh(2,9*8,2,3*8,1);
DispRefresh(4,9*8,2,2*8,0);
break;
case 2:
DispRefresh(4,9*8,2,2*8,1);
DispRefresh(2,9*8,2,3*8,0);
break;
} //end switch cPos
cPos = (cPos==2?1:2);
break;
case LOGOUT_PGDN_KEY:
case LOGIN_PGUP_KEY:
switch(cPos) {
case 1: // 验证时间
cVerifyCycle = (_BYTE)ByteToLong(cpVerifyCycle,3,ISASCII);
if (gdwKeyNum==LOGOUT_PGDN_KEY)
cVerifyCycle=(cVerifyCycle==1?255:cVerifyCycle-1);
else
cVerifyCycle=(cVerifyCycle==255?1:cVerifyCycle+1);
LongToString(cVerifyCycle,cpVerifyCycle,3);
DispOutText(2,9*8,3,cpVerifyCycle);
DispRefresh(2,9*8,2,3*8,0);
break;
case 2: // 年
cSpeedLine = (_BYTE)ByteToLong(cpSpeedLine,2,ISASCII);
if (gdwKeyNum==LOGOUT_PGDN_KEY)
cSpeedLine = (cSpeedLine==1?99:cSpeedLine-1);
else
cSpeedLine = (cSpeedLine==99?1:cSpeedLine+1);
LongToString(cSpeedLine,cpSpeedLine,2);
DispOutText(4,9*8,2,cpSpeedLine);
DispRefresh(4,9*8,2,2*8,0);
break;
}
} // end of gKeyNum
} // end of if
} // end of while
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -