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

📄 menu.c

📁 一个流量控制仪器的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	uchar ucMenuNum;		//当前项序号

	uchar ucMenuName[2];           //显示的本菜单符号
	
	bit (*pfnCheck_Menu)();		//检查本项允许否

	void (*pfnRun_Menu)();		//执行菜单项的执行函数

    	uchar ucMenuIDSize;             //本项的FLASH存储大小    0 表示无

        uint ucMenuIDAddress;          //本项的FLASH存储地址     0 表示无

	uchar ucMenuIDRAMNum;		//本项的RAM存储序号 0-8 uc_QuickSetData

        uchar ucMenuIDDataMin;          //本项的存储数据最小值,

        uchar ucMenuIDDataMax;          //本项的存储数据最大值,

        uchar ucMenuIDData0;          //本项的存储数据默认值,

};


//快捷设置1菜单
struct QuickSetDataSetStruct code QuickSet1List[QuickSet_1] = {
	{1,	{0x01,0x0f},	&fnCheck_Menu_1,	&fnSet_QuickSetNormByte,		1,	0,	0,	1,	8,	3},	//[d01] 单元个数
	{2,	{0x02,0x0f},	&fnCheck_Menu_1,	&fnSet_QuickSetNormTime,		4,	0,	1,	24,	0,	0},	//[d02] 工作时间
	{3,	{0x03,0x0f},	&fnCheck_Menu_1,	&fnSet_QuickSetNormTime,		4,	0,	2,	0,	0,	5},	//[d03] 等待起泵时间
	{4,	{0x04,0x0f},	&fnCheck_Menu_1,	&fnSet_QuickSetNormTime,		4,	0,	3,	0,	0,	30},	//[d04] 反洗时间
	{5,	{0x04,0x0e},	&fnCheck_Menu_1,	&fnSet_QuickSetNormTime,		4,	0,	4,	0,	0,	30},	//[d04P]加大反洗时间
	{6,	{0x05,0x0f},	&fnCheck_Menu_1,	&fnSet_QuickSetNormTime,		4,	0,	5,	0,	0,	5},	//[d05] 间隔时间
	{7,	{0x09,0x0f},	&fnCheck_Menu_1,	&fnSet_QuickSetNormTime,		4,	0,	6,	0,	0,	30}	//[d09] 为95时间段
};

//快捷设置2菜单
struct QuickSetDataSetStruct code QuickSet2List[QuickSet_2] = {
	{1,	{0x01,0x0f},	&fnCheck_Menu_1,	&fnSet_QuickSetNormByte,		1,	0,	0,	1,	7,	2},	//[d01] 单元个数
	{2,	{0x02,0x0f},	&fnCheck_Menu_1,	&fnSet_QuickSetNormTime,		4,	0,	1,	24,	0,	0},	//[d02] 工作时间
	{3,	{0x03,0x0f},	&fnCheck_Menu_1,	&fnSet_QuickSetNormTime,		4,	0,	2,	0,	0,	30},	//[d03] 等待起泵时间
	{4,	{0x04,0x0f},	&fnCheck_Menu_1,	&fnSet_QuickSetNormTime,		4,	0,	3,	0,	5,	0},	//[d04] 反洗时间
	{5,	{0x04,0x0e},	&fnCheck_Menu_1,	&fnSet_QuickSetNormTime,		4,	0,	4,	0,	5,	0},	//[d04P]加大反洗时间
	{6,	{0x05,0x0f},	&fnCheck_Menu_1,	&fnSet_QuickSetNormTime,		4,	0,	5,	0,	0,	30},	//[d05] 间隔时间
	{7,	{0x06,0x0f},	&fnCheck_Menu_1,	&fnSet_QuickSetNormTime,		4,	0,	6,	0,	5,	0},	//[d06] 正洗时间
	{8,	{0x06,0x0e},	&fnCheck_Menu_1,	&fnSet_QuickSetNormTime,		4,	0,	7,	0,	5,	0},	//[d06P]加大正洗时间
	{9,	{0x09,0x0f},	&fnCheck_Menu_1,	&fnSet_QuickSetNormTime,		4,	0,	8,	0,	0,	30}	//[d09] 为95时间段
};

//快捷设置列表
struct QuickSetDataSetStruct code *QuickSetList[2] ={&QuickSet1List,&QuickSet2List};

//快捷设置菜单长度
code uchar ucQuickSetDataListN[2]={QuickSet_1,QuickSet_2};


xdata	uchar ucQuickSetState;		//快速设置菜单状态
xdata	uchar ucQuickSetUnit;		//单元个数
xdata	uchar uc_QuickSetData[9][4];	//输入数据

//0计时的数据
xdata uchar uc4_QuickSetData0[4] = {0,0,0,0};











/*******************************************************************
		设置菜单初始化  函数
函数原型: void fnInit_Menu();
功能: 	说明:设置菜单初始化
涉及变量:
********************************************************************/
void fnInit_Menu()
{
        pSystemMenu = &Menu_Main0;      //当前菜单地址指针 主菜单
        ucSystemMenuID = 0;             //当前菜单项 第一项
        ucSystemMenuID_up = 0;             //前一级菜单项 第一项
        

        ucSystemMenuState = MenuState_X1;       //菜单状态  菜单选择
}

/*******************************************************************
		设置菜单写入显示缓冲区  函数
函数原型: void fnMenuToDBuf();
功能: 	说明:把设置菜单写入到显示缓冲区-设置显示。Display_01Set专用
涉及变量:
********************************************************************/
void fnMenuToDBuf()
{
        uchar *pucDBuf;

        pucDBuf = fnDisplayBufSet(Display_01Set);
        
        if(pSystemMenu->ucMenuRank == 1)	//一级菜单
        {

        	pucDBuf[0] = pSystemMenu->ucMenuName[0];        
        	pucDBuf[1] = pSystemMenu->ucMenuName[1];      
        
        	pucDBuf[2] = (ucSystemMenuID+1)/10;
        	pucDBuf[3] = (ucSystemMenuID+1)%10; 
        	                     
        	pucDBuf[4] = 0x0f;		
        	
        	pucDBuf[5] = 0x0f;
        	pucDBuf[6] = 0x0f;
        	pucDBuf[7] = 0x0f;
        }
        
	if(pSystemMenu->ucMenuRank == 2)	//二级菜单
        {
        	pucDBuf[0] = pSystemMenu->ucMenuName[0];        
        	pucDBuf[1] = pSystemMenu->ucMenuName[1];      
        
        	pucDBuf[2] = (ucSystemMenuID_up+1)/10;
        	pucDBuf[3] = (ucSystemMenuID_up+1)%10; 
        	
        	pucDBuf[4] = 0x0a;		//分隔符号 -
                pucDBuf[5] = 0x0a;		//分隔符号 -

        	pucDBuf[6] = (ucSystemMenuID+1)/10;;
        	pucDBuf[7] = (ucSystemMenuID+1)%10;
        }

        fnDisplaySetDk(Display_01Set,0);       //设置闪烁 0
}


/*******************************************************************
		参数设置、系统显示  主处理函数
函数原型: void fn_Menu()
功能: 	参数设置、系统显示  主处理函数
********************************************************************/
void fn_Menu()
{
	//判断当前菜单是否为主菜单
	if(pSystemMenu->pParrentMenu == NULL)
	//主菜单处理
	{      

		//处理键盘消息
		switch(ucKeyInput)
		{

			//正常显示  按下UP.键 DOWN.键
                        case    KEY_UP:
			case	KEY_DOWN:
			{

				//清空键盘处理
				ucKeyInput = KEY_NOKey;
				
				//确认菜单项允许
				if((*(pSystemMenu->pMenuOneList[0].pfnCheck_Menu))())
				{
				
					//进入正常显示菜单
					pSystemMenu = pSystemMenu->pMenuOneList[0].pChildMenu;
				
					ucSystemMenuID_up = ucSystemMenuID;	//保存前一级菜单位置			
				
					ucSystemMenuID = 0;		//选择第一个选项

                                	ucDisplayState = Display_01Set; //显示设置菜单
                                	
                                }
				
				break;	
			}

			//高级设定  按下SYS.键
			case	KEY_SYS:
			{

				//清空键盘处理
				ucKeyInput = KEY_NOKey;
				
				//确认菜单项允许
				if((*(pSystemMenu->pMenuOneList[1].pfnCheck_Menu))())
				{
				
					//进入高级设定菜单
					pSystemMenu = pSystemMenu->pMenuOneList[1].pChildMenu;
				
					ucSystemMenuID_up = ucSystemMenuID;	//保存前一级菜单位置			
				
					ucSystemMenuID = 0;		//选择第一个选项

                                	ucDisplayState = Display_01Set; //显示设置菜单
                                	
                                }
				
				break;	
			}
			
			//普通设定  按下SET.键
			case	KEY_SET:
			{
				//清空键盘处理
				ucKeyInput = KEY_NOKey;
				
				//确认菜单项允许
				if((*(pSystemMenu->pMenuOneList[2].pfnCheck_Menu))())
				{
				
					//进入普通设定菜单
					pSystemMenu = pSystemMenu->pMenuOneList[2].pChildMenu;
				
					ucSystemMenuID_up = ucSystemMenuID;	//保存前一级菜单位置
				
					ucSystemMenuID = 0;		//选择第一个选项
				
                                	ucDisplayState = Display_01Set; //显示设置菜单
                                	
                                }
                                				
				break;	
			}
				
			//察看记录  按下REC.键
			case	KEY_REC:
			{
				//清空键盘处理
				ucKeyInput = KEY_NOKey;
				
				//确认菜单项允许
				if((*(pSystemMenu->pMenuOneList[3].pfnCheck_Menu))())
				{				
					
					//进入普通设定菜单
					pSystemMenu = pSystemMenu->pMenuOneList[3].pChildMenu;
				
					ucSystemMenuID_up = ucSystemMenuID;	//保存前一级菜单位置
								
					ucSystemMenuID = 0;		//选择第一个选项
				
                                	ucDisplayState = Display_01Set; //显示设置菜单
                                }
                                				
				break;	
			}
			
			//察看报警  按下ALARM.键
			case	KEY_ALARM:
			{
				//清空键盘处理
				ucKeyInput = KEY_NOKey;
				
				//确认菜单项允许
				if((*(pSystemMenu->pMenuOneList[4].pfnCheck_Menu))())
				{
				
					//进入普通设定菜单
					pSystemMenu = pSystemMenu->pMenuOneList[4].pChildMenu;
				
					ucSystemMenuID_up = ucSystemMenuID;	//保存前一级菜单位置
				
					ucSystemMenuID = 0;		//选择第一个选项
				
                                	ucDisplayState = Display_01Set; //显示设置菜单
                                	
                                }
                                				
				break;	
			}

			//报警取消  按下KEY_F1.键
			case	KEY_F1:
			{
				//清空键盘处理
				ucKeyInput = KEY_NOKey;
				
				//报警取消
				fnAlarm(0);
				fnBeep(0);           
                                				
				break;	
			}
                
                        default:
                        {
                                //主菜单显示
		                ucDisplayState = Display_02Turn;
			
                                break;
			}						
		}
		


	}
	else
	//非主菜单处理
	{

		//判断当前菜单状态
		switch(ucSystemMenuState)
		{
			case    MenuState_X1:           //菜单状态
			{
				//处理键盘消息

				switch(ucKeyInput)
				{
					//退出,返回上一级
					case    KEY_ESC:
					{
						//清空键盘处理
						ucKeyInput = KEY_NOKey;

						//当上级非空时,退回上一级
						if(pSystemMenu->pParrentMenu != NULL)
						{
							pSystemMenu = pSystemMenu->pParrentMenu;
							
							//需要	ucSystemMenuID_up 吗? 最上一级的退出怎么办

							ucSystemMenuID = 0;		//选择第一个选项
						}

						break;
					}

					//确认,进入下一级;或者激活执行项
					case    KEY_OK:
					{
						//清空键盘处理
						ucKeyInput = KEY_NOKey;

						//确认菜单项允许
						if((*(pSystemMenu->pMenuOneList[ucSystemMenuID].pfnCheck_Menu))())
						{
							//确认菜单项是否为子菜单
							if(pSystemMenu->pMenuOneList[ucSystemMenuID].pChildMenu != NULL)
							{

								//进入下一级菜单
                                                                pSystemMenu = pSystemMenu->pMenuOneList[ucSystemMenuID].pChildMenu;
                                                                
                 						ucSystemMenuID_up = ucSystemMenuID;	//保存前一级菜单位置

								ucSystemMenuID = 0;			//选择第一个选项
							}
							else
							{
								//菜单执行项
								ucSystemMenuState = MenuState_X2;	//进入执行状态

                                                                //子菜单变量初始化
                                                                ucSystemMenuTurnTemp1 = 0;

							}
						}
						break;
					}

					//后一项菜单项
					case	KEY_UP:
					{
						//清空键盘处理
						ucKeyInput = KEY_NOKey;

						//当不为最后一个菜单项时下移,否则循环
						if(ucSystemMenuID < (pSystemMenu->ucMenuOneMax - 1) )
							ucSystemMenuID++;
						else
							ucSystemMenuID = 0;	
						
						break;
					}

					//前一项菜单项
					case	KEY_DOWN:
					{
						//清空键盘处理
						ucKeyInput = KEY_NOKey;

						//当不为第一个菜单项时上移,否则循环
						if(ucSystemMenuID > 0)
							ucSystemMenuID--;
						else
							ucSystemMenuID = pSystemMenu->ucMenuOneMax - 1;
						
						break;

⌨️ 快捷键说明

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