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

📄 menu.c

📁 sed1335液晶驱动,包括菜单,已经在DSPIC30F6014A上调试通过.
💻 C
字号:
//menu.c
/**========================================================================**
***本c文件以"..\c1335_public\subMenu.h"为基础,显示一级、二级菜单。
***供main.c调用。
***文件层次:main.c <- menu.c --|	<- subMenu.c 
***							    |	<- c1335_driver.c
***								|	<- DeviceAction.c
***=========================================================================*/
#include	"config.h"
#include	"c1335_driver.h"
#include	"subMenu.h"
#include	"DeviceAction.h"
#include	"IIC24c02.h"

#define		MAIN_MENU_ROW_WIDTH		(unsigned char)18
extern	unsigned char KeyScan(void);
extern	unsigned char g_ucLanguageIndex;


//#define		MAIN_MENU_MAX_NUM	8
#define		MAIN_MENU_X0		10
#define		MAIN_MENU_Y0		32
#define		MAIN_MENU_WIDTH		20
BOOL	MainMenu(unsigned char *pSubMenu)
{
	ClearLCD(0x28,2,	10,36,200);
	//DispASCIIStr("MENU",14,10,0);
	//DispASCIIStr(CommonTip[TIP_MENU_ID + COMMON_TIP_MAX_NUM*g_ucLanguageIndex],14,10,0);

	DispSubMenuContent(MainMenuString,
		sizeof(MainMenuString)/sizeof(MainMenuString[0])/2,
		MAIN_MENU_X0,MAIN_MENU_Y0,MAIN_MENU_WIDTH);
	
	DispSubMenuNum(*pSubMenu,
		sizeof(MainMenuString)/sizeof(MainMenuString[0])/2,
		MAIN_MENU_X0,MAIN_MENU_Y0,MAIN_MENU_WIDTH);
	KeyNote();
	while(1)
	{
		g_ucKeyData = 0;
		if(!SleepAndQueryMsg(1000))		//KeyScan();
		{
			switch(g_ucKeyData)
			{
			case KEY_UP:
				if(*pSubMenu == 1)
					*pSubMenu = MAIN_MENU_MAX_NUM;
				else
					(*pSubMenu)--;
				DispSubMenuNum(*pSubMenu,MAIN_MENU_MAX_NUM,
					MAIN_MENU_X0,MAIN_MENU_Y0,MAIN_MENU_WIDTH);
				break;
			case KEY_DOWN:
				if(*pSubMenu == MAIN_MENU_MAX_NUM)
					*pSubMenu = 1;
				else
					(*pSubMenu)++;
				DispSubMenuNum(*pSubMenu,MAIN_MENU_MAX_NUM,
					MAIN_MENU_X0,MAIN_MENU_Y0,MAIN_MENU_WIDTH);
				break;
		   	case KEY_OK:
				return	TRUE;
		    }
	    }
	}
	return	TRUE;
}
//MAIN_MENU_MAX_NUM = sizeof(MainMenuString)/sizeof(MainMenuString[0])/2
BOOL	LeakCheckMenu(void)
{
	ClearLCD(0x28,6,	10,20,200);
	DispASCIIStr(MainMenuString[LAYER1_LEAK_CHECK-1+
		sizeof(MainMenuString)/sizeof(MainMenuString[0])/2*g_ucLanguageIndex],
					14,10,0);	//DispASCIIStr("LEAK CHECK",14,10,0);

	VerLine(0x80,	11,		72,	32);
	VerLine(0x80,	20,		80,	16);
	VerLine(0x80,	22,		72,	32);

	HorLine(0xff,	11,		72,		4);
	HorLine(0xff,	11,		104,	4);
	HorLine(0xff,	20,		80,		2);
	HorLine(0xff,	20,		96,		2);
	HorLine(0xff,	22,		72,		5);
	HorLine(0xff,	22,		104,	5);

	//DispASCIIStr("START?",16,160,0);
	DispASCIIStr(CommonTip[TIP_START_ID + COMMON_TIP_MAX_NUM*g_ucLanguageIndex],14,160,0);

	while(1)
	{
		g_ucKeyData = 0;
		if(!SleepAndQueryMsg(1000))
		{
			switch(g_ucKeyData)
			{
			case KEY_OK://Start Leak Check				
				DispASCIIStr	(CommonTip[TIP_CHECKING_ID + COMMON_TIP_MAX_NUM*g_ucLanguageIndex],
								14,160,0);
				if(LeakCheck())
					DispASCIIStr(CommonTip[TIP_PASS_ID + COMMON_TIP_MAX_NUM*g_ucLanguageIndex],
								14,160,0);
				else
				{
					DispASCIIStr(CommonTip[TIP_FAIL_ID + COMMON_TIP_MAX_NUM*g_ucLanguageIndex],
									14,160,0);
					SleepAndQueryMsg(1000);
					DispASCIIStr(CommonTip[TIP_START_ID + COMMON_TIP_MAX_NUM*g_ucLanguageIndex],
									14,160,0);
				}	
				break;
		   	case KEY_ESCAPE:
				return	TRUE;
		    }
	    }
	}
	return	TRUE;
}
//void	HangUpMenu(void);
#define		VEHICLE_MSG_X0			12
#define		VEHICLE_MSG_Y0			64
#define		VEHICLE_MSG_WIDTH		32		
BOOL	VehicleMsgMenu(void)
{
	unsigned char	ucSubMenu=1;

DispVehicleMsg:
	ClearLCD(0x28,2,	10,36,200);
	DispASCIIStr(MainMenuString[LAYER1_VEHICLE_MSG-1+
		sizeof(MainMenuString)/sizeof(MainMenuString[0])/2*g_ucLanguageIndex],
					14,10,0);	//DispASCIIStr("SETTING",14,10,0);	
	DispSubMenuContent(VehicleMsgMenuString,VEHICLE_MSG_MENU_MAX_NUM,	
						VEHICLE_MSG_X0,VEHICLE_MSG_Y0,		VEHICLE_MSG_WIDTH);
	DispSubMenuNum(ucSubMenu,				VEHICLE_MSG_MENU_MAX_NUM,	
						VEHICLE_MSG_X0,VEHICLE_MSG_Y0,		VEHICLE_MSG_WIDTH);
	while(TRUE)
	{
		g_ucKeyData = 0;
		if(!SleepAndQueryMsg(1000))
		{
			switch(g_ucKeyData)
			{
			case KEY_UP:
				if(ucSubMenu == 1)
					ucSubMenu = VEHICLE_MSG_MENU_MAX_NUM;
				else
					(ucSubMenu)--;
				DispSubMenuNum(ucSubMenu,VEHICLE_MSG_MENU_MAX_NUM,	
								VEHICLE_MSG_X0,VEHICLE_MSG_Y0,		VEHICLE_MSG_WIDTH);
				break;
			case KEY_DOWN:
				if(ucSubMenu == VEHICLE_MSG_MENU_MAX_NUM)
					ucSubMenu = 1;
				else
					(ucSubMenu)++;
				DispSubMenuNum(ucSubMenu,VEHICLE_MSG_MENU_MAX_NUM,
								VEHICLE_MSG_X0,VEHICLE_MSG_Y0,		VEHICLE_MSG_WIDTH);
				break;
	   		case KEY_OK:
				switch(ucSubMenu)
				{
				case VEHICLE_MSG_REG_NO	:
					VehicleRegNo();
					break;
				case VEHICLE_MSG_RPM:
					//;
					break;
				case VEHICLE_MSG_FUEL_TYPE:
					VehicleFuelType();
					break;
					//;
				}
				goto DispVehicleMsg;
				break;
			case KEY_ESCAPE:
				return	TRUE;
			}
		}
	}
	return TRUE;
}



/*=================================================
传人参数:ucMeasureType 作用是受上位机控制时,在其它
		  界面可以转换到对应的测量屏。
		  D7-------本参数 (1)有效  (0)无效
		  D1 D0---
				 |--00		无意义
				 |--01		普通测量
				 |--10		怠速测量
				 |--11		双怠速测量
**================================================*/	
BOOL	MeasureMenu(unsigned char ucMeasureType)
{	
	unsigned char	ucSubMenu=1;

DispMeasure:
	ClearLCD(0x28,6,	10,30,200);
	DispASCIIStr(MainMenuString[LAYER1_MEASURE-1+
		sizeof(MainMenuString)/sizeof(MainMenuString[0])/2*g_ucLanguageIndex],
					14,10,0);	//DispASCIIStr("SETTING",14,10,0);	
	DispSubMenuContent(MeasureMenuString,MEASURE_MENU_MAX_NUM,	
						10,64,		32);
	DispSubMenuNum(ucSubMenu,			 MEASURE_MENU_MAX_NUM,	
						10,64,		32);
	while(TRUE)
	{
		g_ucKeyData = 0;
		if((ucMeasureType & 0x80) || (!SleepAndQueryMsg(1000)))
		{
			if (ucMeasureType & 0x80)
			{
				g_ucKeyData = KEY_OK;
				ucSubMenu	= ucMeasureType & 0x03;
			}
			switch(g_ucKeyData)
			{
			case KEY_UP:
				if(ucSubMenu == 1)
					ucSubMenu = MEASURE_MENU_MAX_NUM;
				else
					(ucSubMenu)--;
				DispSubMenuNum(ucSubMenu,MEASURE_MENU_MAX_NUM,	
								10,64,		32);
				break;
			case KEY_DOWN:
				if(ucSubMenu == MEASURE_MENU_MAX_NUM)
					ucSubMenu = 1;
				else
					(ucSubMenu)++;
				DispSubMenuNum(ucSubMenu,MEASURE_MENU_MAX_NUM,	
								10,64,		32);
				break;
	   		case KEY_OK:
				switch(ucSubMenu)
				{
				case MEASURE_COMMON	:
					MeasureCommonMenu();
					goto DispMeasure;
				case MEASURE_IDLE:
					MeasureIdleMenu();
					goto DispMeasure;
				case MEASURE_DUAL:
					MeasureDualMenu();
					goto DispMeasure;
				}
				break;
			case KEY_ESCAPE:
				return	TRUE;
			}
		}
	}
	return	TRUE;
}

#define		SETTING_MENU_X0			10
#define		SETTING_MENU_Y0			64
#define		SETTING_MENU_WIDTH		32
BOOL	SettingMenu(void)			
{
	unsigned char	ucSubMenu=1;

DispSetting:
	ClearLCD(0x28,6,	10,30,200);
	DispASCIIStr(MainMenuString[LAYER1_SETTING-1+
		sizeof(MainMenuString)/sizeof(MainMenuString[0])/2*g_ucLanguageIndex],
					14,10,0);	//DispASCIIStr("SETTING",14,10,0);	
	DispSubMenuContent(SettingMenuString,SETTING_MENU_MAX_NUM,	
						SETTING_MENU_X0,SETTING_MENU_Y0,SETTING_MENU_WIDTH);
	DispSubMenuNum(ucSubMenu,			 SETTING_MENU_MAX_NUM,		
						SETTING_MENU_X0,SETTING_MENU_Y0,SETTING_MENU_WIDTH);
	while(TRUE)
	{
		g_ucKeyData = 0;
		if(!SleepAndQueryMsg(1000))
		{
			switch(g_ucKeyData)
			{
			case KEY_UP:
				if(ucSubMenu == 1)
					ucSubMenu = SETTING_MENU_MAX_NUM;
				else
					(ucSubMenu)--;
				DispSubMenuNum(ucSubMenu,SETTING_MENU_MAX_NUM,		
								SETTING_MENU_X0,SETTING_MENU_Y0,SETTING_MENU_WIDTH);
				break;
			case KEY_DOWN:
				if(ucSubMenu == SETTING_MENU_MAX_NUM)
					ucSubMenu = 1;
				else
					(ucSubMenu)++;
				DispSubMenuNum(ucSubMenu,SETTING_MENU_MAX_NUM,		
								SETTING_MENU_X0,SETTING_MENU_Y0,SETTING_MENU_WIDTH);
				break;
	   		case KEY_OK:
				switch(ucSubMenu)
				{
				case SETTING_COM	:
					SettingComMenu();
					goto DispSetting;
//				case SETTING_TIME	:
//					TimeMenu();
//					goto DispSetting;
				case SETTING_LANGUAGE:
					SettingLanguageMenu();
					goto DispSetting;
				}
				break;
			case KEY_ESCAPE:
				return	TRUE;
			}
		}
	}
	return	TRUE;
}

#define		FUNCTION_MENU_X0			14
#define		FUNCTION_MENU_Y0			64
#define		FUNCTION_MENU_WIDTH			32
BOOL	FunctionMenu(void)			
{
	unsigned char	ucSubMenu=1;

DispFunction:
	ClearLCD(0x28,	6,10,	30,200);
	DispASCIIStr(MainMenuString[LAYER1_FUNCTION-1+
		sizeof(MainMenuString)/sizeof(MainMenuString[0])/2*g_ucLanguageIndex],
					14,10,0);	//DispASCIIStr("SETTING",14,10,0);	
	DispSubMenuContent(FunctionMenuString,FUNCTION_MENU_MAX_NUM,		
						FUNCTION_MENU_X0,FUNCTION_MENU_Y0,		FUNCTION_MENU_WIDTH);
	DispSubMenuNum(ucSubMenu,			 FUNCTION_MENU_MAX_NUM,		
						FUNCTION_MENU_X0,FUNCTION_MENU_Y0,		FUNCTION_MENU_WIDTH);
	while(TRUE)
	{
		g_ucKeyData = 0;
		if(!SleepAndQueryMsg(1000))
		{
			switch(g_ucKeyData)
			{
			case KEY_UP:
				if(ucSubMenu == 1)
					ucSubMenu = FUNCTION_MENU_MAX_NUM;
				else
					(ucSubMenu)--;
				DispSubMenuNum(ucSubMenu,FUNCTION_MENU_MAX_NUM,		
								FUNCTION_MENU_X0,FUNCTION_MENU_Y0,		FUNCTION_MENU_WIDTH);
				break;
			case KEY_DOWN:
				if(ucSubMenu == FUNCTION_MENU_MAX_NUM)
					ucSubMenu = 1;
				else
					(ucSubMenu)++;
				DispSubMenuNum(ucSubMenu,FUNCTION_MENU_MAX_NUM,			
								FUNCTION_MENU_X0,FUNCTION_MENU_Y0,		FUNCTION_MENU_WIDTH);
				break;
	   		case KEY_OK:
				switch(ucSubMenu)
				{
				case FUNCTIONG_CALIBRATION:				
					FunctionCalibrationMenu();
					goto DispFunction;
				case FUNCTIONG_ZERO:
					FunctionZeroMenu();
					goto DispFunction;
				}
				break;
			case KEY_ESCAPE:
				return	TRUE;
			}
		}
	}
	return	TRUE;
}


//void	HelpMenu(void);
				
//void	DiagnoseMenu(void);
/*
void	MainMenu(unsigned char *pSubMenu)
{
	ClearLCD(0x28,2,	10,36,200);
	DispASCIIStr("MENU",14,10,0);

	DispASCIIStr("0.LEAK CHECK",		6,	10+MAIN_MENU_ROW_WIDTH*1,	0);
	DispASCIIStr("1.HANG-UP TEST",		6,	10+MAIN_MENU_ROW_WIDTH*2,	0);
	DispASCIIStr("2.VEHICLE MESSAGE",	6,	10+MAIN_MENU_ROW_WIDTH*3,	0);
	DispASCIIStr("3.MESSURE",			6,	10+MAIN_MENU_ROW_WIDTH*4,	0);
	DispASCIIStr("4.CALIBRATE",			6,	10+MAIN_MENU_ROW_WIDTH*5,	0);
	DispASCIIStr("5.HELP",				6,	10+MAIN_MENU_ROW_WIDTH*6,	0);
	DispASCIIStr("6.DIAGNOSE",			6,	10+MAIN_MENU_ROW_WIDTH*7,	0);
	DispASCIIStr("7.COM SETTING",		6,	10+MAIN_MENU_ROW_WIDTH*8,	0);
	DispASCIIStr("8.TIME SETTING",		6,	10+MAIN_MENU_ROW_WIDTH*9,	0);
	DispASCIIStr("9.LANGUAGE",			6,	10+MAIN_MENU_ROW_WIDTH*10,	0);
}

void	DispSubMenuNum(unsigned char Number){
	unsigned char	i,color;
	for(i=0;i<10;i++)
	{
		if(i == Number)		color = 1;
		else				color = 0;
		DispCHAR_16x8(&ASCII_16[(16+i)*16],		6,28+MAIN_MENU_ROW_WIDTH*i,color);
	}
	DispCHAR_16x8(&ASCII_16[(16+1)*16],		6,10+20*1,0);
	DispCHAR_16x8(&ASCII_16[(16+2)*16],		6,10+20*2,0);
	DispCHAR_16x8(&ASCII_16[(16+3)*16],		6,10+20*3,0);
	DispCHAR_16x8(&ASCII_16[(16+4)*16],		6,10+20*4,0);
	DispCHAR_16x8(&ASCII_16[(16+5)*16],		6,10+20*5,0);
	DispCHAR_16x8(&ASCII_16[(16+6)*16],		6,10+20*6,0);
	DispCHAR_16x8(&ASCII_16[(16+7)*16],		6,10+20*7,0);
	DispCHAR_16x8(&ASCII_16[(16+8)*16],		6,10+20*8,0);
	DispCHAR_16x8(&ASCII_16[(16+9)*16],		6,10+20*9,0);

//	DispCHAR_16x8(&ASCII_16[(16+Number)*16],6,(unsigned char)(26+MAIN_MENU_ROW_WIDTH*Number),1);
void	KeyNote()
{
	DrawRect(7*0,	216,1);	DrawRect(7*1,	216,1);	DrawRect(7*2,	216,1);
	DrawRect(7*3,	216,1);	DrawRect(7*4,	216,1);	DrawRect(7*5,	216,1);
	DispBmp16x24(&KEY_NOTE[48*0],	1+7*0,	220,0);
	DispBmp16x24(&KEY_NOTE[48*1],	1+7*1,	220,0);
	DispBmp16x24(&KEY_NOTE[48*2],	1+7*2,	220,0);	
	DispBmp16x24(&KEY_NOTE[48*3],	1+7*3,	220,0);
	DispBmp16x24(&KEY_NOTE[48*4],	1+7*4,	220,0);	
	DispBmp16x24(&KEY_NOTE[48*5],	1+7*5,	220,0);

}	
}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -