📄 submenu.c
字号:
//SubMenu.c
/**========================================================================**
***本c文件以"..\c1335_public\c1335_driver.h"为基础,显示三级、四级菜单。
***供第二级菜单调用。
***文件层次:main.c <- menu.c <- subMenu.c <- c1335_driver.c
***=========================================================================*/
#include "config.h"
#include "c1335_driver.h"
#include "subMenu.h"
#include "IIC24c02.h"
//#include "config.h"
extern unsigned char KeyScan(void);
extern unsigned char g_ucLanguageIndex;
unsigned char xdata RegNoData[20]={ 0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0};
unsigned char xdata g_ucFuelType;
//#define MAIN_MENU_MAX_NUM 8
unsigned char* code MainMenuString[MAIN_MENU_MAX_NUM*2]=
{
"LEAK CHECK",
"HANG-UP TEST",
"VEHICLE MSG",
"MESSURE",
"FUNCTION",
"HELP",
"DIAGNOSE",
"SETTING",
"\X82\X83\X84\X85", //泄漏检查
"\X86\X87\X84\X85", //吸附检查
"\X88\X89\X8A\X8B", //车辆信息
"\X8c\X8d", //测量
"\X93\X94\X95\X96", //功能选择
"\X9b\X9c", //帮助
"\X9d\X9e", //诊断
"\X9f\Xa0" //设置
};
//#define MEASURE_MENU_MAX_NUM 3
unsigned char* code MeasureMenuString[MEASURE_MENU_MAX_NUM*2]=
{
"COMMON MEAS.",
"IDLE MEAS.",
"DUAL MEAS.",
"\X8e\X8f\X8c\X8d", //普通测量
"\X90\X91\X8c\X8d", //怠速测量
"\X92\X90\X91\X8c\X8d" //双怠速测量
};
//#define VEHICLE_MSG_MENU_MAX_NUM 3
unsigned char* code VehicleMsgMenuString[VEHICLE_MSG_MENU_MAX_NUM*2]=
{
"VEHICLE REG.NO.",
"RPM MESSAGE",
"FUEL TYPE",
"\X88\Xbd\Xbe\Xbf", //车牌号码
"\Xc0\Xc1\X8A\X8B", //转速信息
"\Xc2\Xc3\Xc4\Xc5" //燃料类型
};
//#define FUEL_TYPE_MAX_NUM 4
unsigned char* code FuelTypeMenuString[FUEL_TYPE_MAX_NUM*2]=
{
"PETROL",
"LPG",
"CNG",
"ALCOHOL",
"\Xc6\Xc7", //汽油
"LPG",
"CNG", //
"\Xc8\Xc9" //酒精
};
//#define SETTING_MENU_MAX_NUM 3
unsigned char* code SettingMenuString[SETTING_MENU_MAX_NUM*2]=
{
"COM SETTING",
"TIME SETTING",
"LANGUAGE" ,
"\Xa3\Xa4\X9f\Xa0", //串口设置
"\Xa1\Xa2\X9f\Xa0", //时间设置
"\Xac\Xad\X9f\Xa0" //语言设置
};
//#define LANGUAGE_MENU_MAX_NUM 2
unsigned char* code LanguageMenuString[LANGUAGE_MENU_MAX_NUM*2]=
{
"CHINESE",
"ENGLISH",
"\Xae\Xaf ", //中文
"\Xb0\Xaf " //英文
};
//#define COM_MENU_MAX_NUM 3
unsigned char* code ComMenuString[COM_MENU_MAX_NUM*2]=
{
"PROTOCOL",
"BAUDRATE",
"ADDRESS" ,
"\Xa5\Xa6", //协议
"\Xa7\Xa8\Xa9", //波特率
"\Xaa\Xab" //地址
};
//#define FUNCTION_MENU_MAX_NUM 2
unsigned char* code FunctionMenuString[FUNCTION_MENU_MAX_NUM*2]=
{
"CALIBRATION",
"ZERO" ,
"\X97\X98", //校准
"\X99\X9a" //调零
};
//#define BUADRATE_MAX_NUM 4
unsigned char* code BaudRateString[BUADRATE_MAX_NUM]=
{
"57600",
"19200",
"9600 ",
"2400 "
};
unsigned char* code ProtocolString[4]=
{
"NEW PROTOCOL",
"OLD PROTOCOL",
"",
"",
};
unsigned char* code CommonTip[]=
{
"MENU",
" START? ",
"ENTER?",
"SAVE? ",
"SAVED ",
"CHECKING...",
" PASS ",
" FAIL ",
"\X80\X81", // "菜单"
" \Xb7\Xb8?", // "开始? ",
"\Xb3\Xb4? ", // "进入? ",
"\Xb1\Xb2?", // "保存? ",
"\Xbc\Xb1\Xb2", // "已保存"
"\X84\X85\Xae...", // "检查中..."
" \Xba\Xbb ", // " 合格 "
" \Xb9\Xba\Xbb " // " 不合格 "
};
#define COMMON_TIP_NUM sizeof(CommonTip)/sizeof(CommonTip[0])/2
unsigned char g_ucKeyData;
BOOL SleepAndQueryMsg(unsigned int nDelayTime)
{
while(nDelayTime--)
{
g_ucKeyData = KeyScan();
if(g_ucKeyData)
return FALSE;
DelayMS(1);
}
return TRUE;
}
/*======================================================================**
**函 数 名:void KeyNote(void); **
**功能介绍:显示 2 区图形方式显示按键提示信息 **
**传人参数:无**
**编 写:黄伟德 日期:2005-04-11 **
**======================================================================*/
void KeyNote(void)
{
unsigned char i;
for (i=0;i<6;i++)
{
DrawRect(7*i, 216,1);
DispBmp16x24(&KEY_NOTE[48*i], 1+7*i, 220,0);
}
}
void DispSubMenuNum( unsigned char Number,
unsigned char MaxNum,
unsigned char X,
unsigned char Y,
unsigned char RowWidth)
{
unsigned char i,color;
Y -= RowWidth;
for(i=1;i<=MaxNum;i++)
{
if(i == Number) color = 1;
else color = 0;
DispCHAR_16x8(&ASCII_16[(16+i)*16], X,Y+RowWidth*i,color);
}
}
void DispSubMenuContent( unsigned char* str[],
unsigned char MaxNum,
unsigned char X,
unsigned char Y,
unsigned char RowWidth)
{
unsigned char i;
X += 2;
for(i=0;i<MaxNum;i++)
DispASCIIStr(str[i+MaxNum*g_ucLanguageIndex],X, Y+RowWidth*i, 0);
}
BOOL SettingLanguageMenu(void)
{
unsigned char ucSubMenu = 1;
ClearLCD(0x28, 6,10, 30,200);
//DispASCIIStr("LANGUAGE",14,10,0);
DispASCIIStr(SettingMenuString[SETTING_LANGUAGE-1
+sizeof(SettingMenuString)/sizeof(SettingMenuString[0])/2*g_ucLanguageIndex],
14,10,0);
DispSubMenuContent(LanguageMenuString,2, 10,64, 32);
DispSubMenuNum(ucSubMenu,2,
10,64,32);
DispASCIIStr(CommonTip[TIP_ASK_SAVE_ID + COMMON_TIP_NUM*g_ucLanguageIndex], 16,180,0);
while(TRUE)
{
g_ucKeyData = 0;
if(!SleepAndQueryMsg(1000))//KeyScan();
{
switch(g_ucKeyData)
{
case KEY_ESCAPE:
return TRUE;
case KEY_UP:
if(ucSubMenu == 1)
ucSubMenu = 2;
else
ucSubMenu = 1;
DispSubMenuNum(ucSubMenu,2,
10,64,32);
break;
case KEY_DOWN:
if(ucSubMenu == 2)
ucSubMenu = 1;
else
ucSubMenu = 2;
DispSubMenuNum(ucSubMenu,2,
10,64,32);
break;
case KEY_OK:
if(ucSubMenu == 1)
{
g_ucLanguageIndex = 1;
DispASCIIStr(LanguageMenuString[2*g_ucLanguageIndex],12,64,1);
DispASCIIStr(LanguageMenuString[1+2*g_ucLanguageIndex],12,96,0);
}
else
{
g_ucLanguageIndex = 0;
DispASCIIStr(LanguageMenuString[1+2*g_ucLanguageIndex],12,96,1);
DispASCIIStr(LanguageMenuString[2*g_ucLanguageIndex],12,64,0);
}
DispASCIIStr(SettingMenuString[SETTING_LANGUAGE-1
+sizeof(SettingMenuString)/sizeof(SettingMenuString[0])/2*g_ucLanguageIndex],
14,10,0);
//保存设置,例如写到EEPROM
DispASCIIStr(CommonTip[TIP_SAVED_ID + COMMON_TIP_NUM*g_ucLanguageIndex],16,180,0);
break;
}
}
}
return TRUE;
}
//void CalibrationMenu(void);
BOOL ComChangeBaudRate(unsigned char *pComSetting)
{
unsigned char ucBaudRateIndex;
ucBaudRateIndex = (*pComSetting>>5) & 0x3;
DispASCIIStr(BaudRateString[ucBaudRateIndex], 22,96,1);
DispASCIIStr(CommonTip[TIP_ASK_SAVE_ID + COMMON_TIP_NUM*g_ucLanguageIndex],16,180,0);
while(TRUE)
{
g_ucKeyData =0;
if(!SleepAndQueryMsg(1000))
{
switch(g_ucKeyData)
{
case KEY_UP:
if(ucBaudRateIndex == 0)
ucBaudRateIndex = 3;
else
(ucBaudRateIndex)--;
DispASCIIStr(BaudRateString[ucBaudRateIndex],
22,96,1);
break;
case KEY_DOWN:
if(ucBaudRateIndex == 3)
ucBaudRateIndex = 0;
else
(ucBaudRateIndex)++;
DispASCIIStr(BaudRateString[ucBaudRateIndex],
22,96,1);
break;
case KEY_OK:
//SaveBaudRate();
*pComSetting &= 0x9f;
*pComSetting |= (ucBaudRateIndex<<5);
Write24c02(pComSetting,IIC_ADDR_COM_SETTING,1);
DispASCIIStr(CommonTip[TIP_SAVED_ID + COMMON_TIP_NUM*g_ucLanguageIndex],16,180,0);
SleepAndQueryMsg(1000);
//break;
case KEY_ESCAPE:
return TRUE;
}
}
}
}
BOOL ComChangeAddress(unsigned char *pComSetting)
{
unsigned char ucAddr;
ucAddr = *pComSetting & 0x01f;
DispDecimalNum(ucAddr, 22,64+32+32, 2, 1);
DispASCIIStr(CommonTip[TIP_ASK_SAVE_ID + COMMON_TIP_NUM*g_ucLanguageIndex],16,180,0);
while(TRUE)
{
g_ucKeyData =0;
if(!SleepAndQueryMsg(1000))
{
switch(g_ucKeyData)
{
case KEY_UP:
if(ucAddr == 31)
ucAddr = 0;
else
ucAddr++;
DispDecimalNum(ucAddr, 22,64+32+32, 2, 1);
break;
case KEY_DOWN:
if(ucAddr == 0)
ucAddr = 31;
else
ucAddr--;
DispDecimalNum(ucAddr, 22,64+32+32, 2, 1);
break;
case KEY_OK:
*pComSetting &= 0xe0;
*pComSetting |= ucAddr;
Write24c02(pComSetting,IIC_ADDR_COM_SETTING,1);
DispASCIIStr(CommonTip[TIP_SAVED_ID + COMMON_TIP_NUM*g_ucLanguageIndex],16,180,0);
SleepAndQueryMsg(1000);
//break;
case KEY_ESCAPE:
return TRUE;
}
}
}
}
BOOL ComChangeProtocol(void)
{
return TRUE;
}
BOOL SettingComMenu(void)
{
unsigned char ucSubMenu=1;
unsigned char ucComSetting,ucProtocol;
ucComSetting = 0;
Read24c02(&ucComSetting,IIC_ADDR_COM_SETTING,1);//0;
ucProtocol = ucComSetting>>7;
/* */
ClearLCD(0x28,6, 10,30,200);
//DispASCIIStr("COM SETTING",14,10,0);
DispASCIIStr(SettingMenuString[SETTING_COM-1
+sizeof(SettingMenuString)/sizeof(SettingMenuString[0])/2*g_ucLanguageIndex],
14,10,0);
DispSubMenuContent(ComMenuString,3, 6,64, 32);
DispCom:
DispASCIIStr(ProtocolString[ucProtocol], 22,64, 0);
DispASCIIStr(BaudRateString[(ucComSetting>>5)&0x03], 22,64+32, 0);
DispDecimalNum(ucComSetting&0x1f, 22,64+32+32, 2, 0);
//DispASCIIStr("ENTER?", 14,64+32+32, 0);
DispSubMenuNum(ucSubMenu, 3, 6,64, 32);
DispASCIIStr(CommonTip[TIP_ENTER_ID + COMMON_TIP_NUM*g_ucLanguageIndex], 16,180, 0);
while(TRUE)
{
g_ucKeyData = 0;
if(!SleepAndQueryMsg(1000))
{
switch(g_ucKeyData)
{
case KEY_UP:
if(ucSubMenu == 1)
ucSubMenu = 3;
else
(ucSubMenu)--;
DispSubMenuNum(ucSubMenu,3, 6,64, 32);
break;
case KEY_DOWN:
if(ucSubMenu == 3)
ucSubMenu = 1;
else
(ucSubMenu)++;
DispSubMenuNum(ucSubMenu,3, 6,64, 32);
break;
case KEY_OK:
switch(ucSubMenu)
{
case COM_PROTOCOL:
ComChangeProtocol();
break;
case COM_BAUDRATE:
ComChangeBaudRate(&ucComSetting);
break;
case COM_ADDRESS:
ComChangeAddress(&ucComSetting);
}
goto DispCom;
break;
case KEY_ESCAPE:
return TRUE;
}
}
}
return TRUE;
}
BOOL TimeMenu(void)
{
return TRUE;
}
// LAYRE1_MEASURE MeasureMenu(unsigned char)
// |
// --1.
BOOL MeasureCommonMenu(void)
{
return TRUE;
}
// |
// --2.
BOOL MeasureIdleMenu(void)
{
return TRUE;
}
// |
// --3.
BOOL MeasureDualMenu(void)
{
return TRUE;
}
BOOL FunctionZeroMenu(void)
{
return TRUE;
}
BOOL FunctionCalibrationMenu(void)
{
return TRUE;
}
// LAYER1_VEHICLE_MSG VehicleMsgMenu();
// |
// --1.
#define REG_NO_X0 (unsigned char)8
#define REG_NO_Y0 (unsigned char)36
BOOL VehicleRegNo(void)
{
unsigned char ColumnY,RowX,ucLength;
ucLength = 0;
ClearLCD(0x28,2, 10,36,200);
DispASCIIStr(VehicleMsgMenuString[VEHICLE_MSG_REG_NO-1+
sizeof(VehicleMsgMenuString)/sizeof(VehicleMsgMenuString[0])/2*g_ucLanguageIndex],
14,10,0);
for (ColumnY=0;ColumnY<6;ColumnY++)
{//ucTemp = ColumnY*5 +RowX;
for(RowX=0;RowX<12;RowX++)
DispRegNO(RowX,ColumnY,REG_NO_X0+RowX*2,REG_NO_Y0+ColumnY*20,0);
}
ColumnY=3;
RowX=6;
DispRegNO(RowX,ColumnY,REG_NO_X0+RowX*2,REG_NO_Y0+ColumnY*20,1);
while(TRUE)
{
g_ucKeyData = 0;
if(!SleepAndQueryMsg(1000))
{
switch(g_ucKeyData)
{
case KEY_ESCAPE:
return TRUE;
case KEY_LEFT:
DispRegNO(RowX,ColumnY,REG_NO_X0+RowX*2,REG_NO_Y0+ColumnY*20,0);
if(RowX==0)
RowX = 11;
else
RowX--;
DispRegNO(RowX,ColumnY,REG_NO_X0+RowX*2,REG_NO_Y0+ColumnY*20,1);
break;
case KEY_RIGHT:
DispRegNO(RowX,ColumnY,REG_NO_X0+RowX*2,REG_NO_Y0+ColumnY*20,0);
if(RowX==11)
RowX = 0;
else
RowX++;
DispRegNO(RowX,ColumnY,REG_NO_X0+RowX*2,REG_NO_Y0+ColumnY*20,1);
break;
case KEY_UP:
DispRegNO(RowX,ColumnY,REG_NO_X0+RowX*2,REG_NO_Y0+ColumnY*20,0);
if(ColumnY==0)
ColumnY = 5;
else
ColumnY--;
DispRegNO(RowX,ColumnY,REG_NO_X0+RowX*2,REG_NO_Y0+ColumnY*20,1);
break;
case KEY_DOWN:
DispRegNO(RowX,ColumnY,REG_NO_X0+RowX*2,REG_NO_Y0+ColumnY*20,0);
if(ColumnY==5)
ColumnY = 0;
else
ColumnY++;
DispRegNO(RowX,ColumnY,REG_NO_X0+RowX*2,REG_NO_Y0+ColumnY*20,1);
break;
case KEY_OK:
RegNoData[ucLength++] = RowX;
RegNoData[ucLength++] = ColumnY;
DispRegNO(RowX,ColumnY,10+ucLength,180,0);
break;
}
}
}
return TRUE;
}
// |
// --2.
BOOL VehicleRPM(void)
{
return TRUE;
}
// |
// --3.
#define FUEL_TYPE_X0 12
#define FUEL_TYPE_Y0 48
#define FUEL_TYPE_WIDTH 30
BOOL VehicleFuelType(void)
{
g_ucFuelType = 1;
ClearLCD(0x28,2, 10,36,200);
DispASCIIStr(VehicleMsgMenuString[VEHICLE_MSG_FUEL_TYPE-1+
sizeof(VehicleMsgMenuString)/sizeof(VehicleMsgMenuString[0])/2*g_ucLanguageIndex],
14,10,0);
DispSubMenuContent(FuelTypeMenuString,FUEL_TYPE_MAX_NUM,
FUEL_TYPE_X0,FUEL_TYPE_Y0, FUEL_TYPE_WIDTH);
DispSubMenuNum(g_ucFuelType,FUEL_TYPE_MAX_NUM,
FUEL_TYPE_X0,FUEL_TYPE_Y0,FUEL_TYPE_WIDTH);
DispASCIIStr(CommonTip[TIP_ASK_SAVE_ID + COMMON_TIP_NUM*g_ucLanguageIndex], 16,180, 0);
while(TRUE)
{
g_ucKeyData = 0;
if(!SleepAndQueryMsg(1000))
{
switch(g_ucKeyData)
{
case KEY_UP:
if(g_ucFuelType == 1)
g_ucFuelType = FUEL_TYPE_MAX_NUM;
else
(g_ucFuelType)--;
DispSubMenuNum(g_ucFuelType,FUEL_TYPE_MAX_NUM,
FUEL_TYPE_X0,FUEL_TYPE_Y0,FUEL_TYPE_WIDTH);
break;
case KEY_DOWN:
if(g_ucFuelType == FUEL_TYPE_MAX_NUM)
g_ucFuelType = 1;
else
(g_ucFuelType)++;
DispSubMenuNum(g_ucFuelType,FUEL_TYPE_MAX_NUM,
FUEL_TYPE_X0,FUEL_TYPE_Y0,FUEL_TYPE_WIDTH);
break;
case KEY_OK:
//WriteToIIC for save
//Write24c02(&g_ucFuelType,IIC_ADDR_FUEL_LANGUAGE,1)
DispASCIIStr(CommonTip[TIP_SAVED_ID + COMMON_TIP_NUM*g_ucLanguageIndex],
16,180, 0);
break;
case KEY_ESCAPE:
return TRUE;
}
}
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -