📄 menu.c
字号:
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 + -