⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 submenu.c

📁 sed1335液晶驱动,包括菜单,已经在DSPIC30F6014A上调试通过.
💻 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 + -