📄 menu.c
字号:
{
//清空键盘处理
ucKeyInput = KEY_NOKey;
//翻页
if(ucSystemMenuTurnTemp2 < 6)
ucSystemMenuTurnTemp2 += 5;
else
ucSystemMenuTurnTemp2 -= 5;
break;
}
//清除键 (KEY_CLEAR) 清除所有位设置(清0),且清除继承位。
case KEY_CLEAR:
{
//清空键盘处理
ucKeyInput = KEY_NOKey;
//清除所有位设置(清0),且清除继承位。
uc8_SystemMenuTurnTemp[0] = 0;
uc8_SystemMenuTurnTemp[1] = 0;
break;
}
//功能键1 (KEY_F1) 设置继承位(取反)
case KEY_F1:
{
//清空键盘处理
ucKeyInput = KEY_NOKey;
//设置继承位(取反)
uc8_SystemMenuTurnTemp[1] = fnBitCpl(uc8_SystemMenuTurnTemp[1],7);
break;
}
//数字键 (KEY_0) 输入当前位的值 0,并且右移当前位
//(当继承位有效时,无效)
case KEY_0:
{
//清空键盘处理
ucKeyInput = KEY_NOKey;
//当继承位有效时,无效
if(fnBitTest(uc8_SystemMenuTurnTemp[1],7) == 0)
{
//输入当前位的值 0
if(ucSystemMenuTurnTemp2 < 6)
uc8_SystemMenuTurnTemp[0] = fnBitClr(uc8_SystemMenuTurnTemp[0],ucSystemMenuTurnTemp2-1);
else
uc8_SystemMenuTurnTemp[1] = fnBitClr(uc8_SystemMenuTurnTemp[1],ucSystemMenuTurnTemp2-6);
//增量选择输出位 1-10(右移/自动翻页)
if(ucSystemMenuTurnTemp2 == 10 )
ucSystemMenuTurnTemp2 = 1;
else
ucSystemMenuTurnTemp2 ++ ;
}
break;
}
//数字键 (KEY_1) 输入当前位的值 1,并且右移当前位
//(当继承位有效时,无效)
case KEY_1:
{
//清空键盘处理
ucKeyInput = KEY_NOKey;
//当继承位有效时,无效
if(fnBitTest(uc8_SystemMenuTurnTemp[1],7) == 0)
{
//输入当前位的值 0
if(ucSystemMenuTurnTemp2 < 6)
uc8_SystemMenuTurnTemp[0] = fnBitSet(uc8_SystemMenuTurnTemp[0],ucSystemMenuTurnTemp2-1);
else
uc8_SystemMenuTurnTemp[1] = fnBitSet(uc8_SystemMenuTurnTemp[1],ucSystemMenuTurnTemp2-6);
//增量选择输出位 1-10(右移/自动翻页)
if(ucSystemMenuTurnTemp2 == 10 )
ucSystemMenuTurnTemp2 = 1;
else
ucSystemMenuTurnTemp2 ++ ;
}
break;
}
}
//菜单显示--子菜单2层
pucDBuf = fnDisplayBufSet(Display_01Set);
pucDBuf[0] = 0x0f;
pucDBuf[1] = 0x0f;
pucDBuf[2] = 0x0f;
if(fnBitTest(uc8_SystemMenuTurnTemp[1],7) == 0)
{
//当继承位无效时
if(ucSystemMenuTurnTemp2 < 6)
{
for(i=0;i<5;i++)
pucDBuf[i+3] = fnBitTest(uc8_SystemMenuTurnTemp[0],i);
//设置闪烁位
fnDisplaySetDk(Display_01Set,1<<(5-ucSystemMenuTurnTemp2));
}
else
{
//加点区别
for(i=0;i<5;i++)
pucDBuf[i+3] = fnBitTest(uc8_SystemMenuTurnTemp[1],i) + 0x80;
//设置闪烁位
fnDisplaySetDk(Display_01Set,1<<(10-ucSystemMenuTurnTemp2));
}
}
else
{
//当继承位有效时
for(i=0;i<5;i++)
pucDBuf[i+3] = 0x0a; //分隔符号 -
if(ucSystemMenuTurnTemp2 < 6)
{
//设置闪烁位
fnDisplaySetDk(Display_01Set,1<<(5-ucSystemMenuTurnTemp2));
}
else
{
//设置闪烁位
fnDisplaySetDk(Display_01Set,1<<(10-ucSystemMenuTurnTemp2));
}
}
ucDisplayState = Display_01Set; //显示菜单
break;
}
}
}
/*******************************************************************
一般时间数据辅助输入函数
函数原型: uchar fnAss1_SystemMenuTurnTime(uchar i, char j,char DataI)
功能: 返回正确的日期时间的增量、减量的值。
返回: uchar i 1-百小时、2-小时十位、3-小时个位、
4-分钟十位、5-分钟个位、6-秒十位、7-秒个位
char j 1-增量+1、-1-减量-1。
********************************************************************/
uchar fnAss1_SystemMenuTurnTime(uchar i, char j,char DataI)
{
char uc_temp1;
//分钟十位、秒十位的0-5限制
if((i==4)|(i==6))
{
DataI += j*10;
if(DataI<0)
DataI += 60;
else
if(DataI>59)
DataI -= 60;
}
else
if(i==2) //2-小时十位
{
DataI += j*10;
if(DataI<0)
DataI += 100;
else
if(DataI>99)
DataI -= 100;
}
else
{
uc_temp1 = DataI%10;
uc_temp1 += j;
if(uc_temp1<0)
uc_temp1 = 9;
else
if(uc_temp1>9)
uc_temp1 = 0;
DataI = (DataI/10)*10 + uc_temp1;
}
return ((uchar)DataI );
}
/*******************************************************************
P5 一般时间设定函数
函数原型: void fnSet_SystemMenuTurnTime();
功能: P5 一般时间设定函数
返回:
********************************************************************/
void fnSet_SystemMenuTurnTime()
{
uchar *pucDBuf;
uchar ucTimeTemp2;
//根据子菜单层,处理相应键盘输入,并显示相应内容
switch(ucSystemMenuTurnTemp1)
{
//0. 初始化设定。进入子菜单的相关数据初始化
case 0:
{
//初始化设定的数据
ucSystemMenuTurnNum = Turn_00; //设置第一个时段为00
ucSystemMenuTurnTemp1 = 1; //进入第一层子菜单
break;
}
//1. 时间段选择 『ucSystemMenuTurnNum』[99]-[95]
case 1:
{
//处理键盘消息--子菜单1层
switch(ucKeyInput)
{
//上向键 KEY_UP 选择后一个时间段 增量选择
case KEY_UP:
{
//清空键盘处理
ucKeyInput = KEY_NOKey;
//选择后一个时间段 增量选择
if(ucSystemMenuTurnNum == (SIZE_OF_TURN_LIST - 1) )
ucSystemMenuTurnNum = 0;
else
ucSystemMenuTurnNum ++ ;
break;
}
//下向键 KEY_DOWN 选择前一个时间段 减量选择
case KEY_DOWN:
{
//清空键盘处理
ucKeyInput = KEY_NOKey;
//选择前一个时间段 减量选择
if(ucSystemMenuTurnNum == 0 )
ucSystemMenuTurnNum = SIZE_OF_TURN_LIST - 1;
else
ucSystemMenuTurnNum -- ;
break;
}
//确认键 KEY_OK 进入下一级目录 设置目录
case KEY_OK:
{
//清空键盘处理
ucKeyInput = KEY_NOKey;
//判断时间段的计时方向,当为正计时则不允许设置时间。不进入下一级菜单。
if (TurnList[ucSystemMenuTurnNum].ucTurnTimeSortState == 0)
{
//进入下一级子目录
ucSystemMenuTurnTemp1 = 2; //进入第二层子菜单
//读入当前时间段的设置值--4字节时间量
//读入指定地址,大小的时段控制量:
//CAT24WC64P (N<=8192)(地址:0-8191)
//CAT24WC16P (N<=2048)(地址:0-2047)
fnRead_Eeprom(TurnList[ucSystemMenuTurnNum].uiTurnTimeAddress,
4,uc8_SystemMenuTurnTemp);
//检查数据,如果有问题,则全部设为0,并储存。报警,Beep
if ( (uc8_SystemMenuTurnTemp[0] > 9) | //百小时>9
(uc8_SystemMenuTurnTemp[1] > 99) | //小时>99
(uc8_SystemMenuTurnTemp[2] > 59) | //分钟>59
(uc8_SystemMenuTurnTemp[3] > 59) ) //秒>59
{
//全部设为0
uc8_SystemMenuTurnTemp[0] = 0;
uc8_SystemMenuTurnTemp[1] = 0;
uc8_SystemMenuTurnTemp[2] = 0;
uc8_SystemMenuTurnTemp[3] = 0;
//并储存
//写入相应地址的数据--4字节的时间量
//写入指定地址,4字节大小的数据:
//CAT24WC64P (N<=8192)(地址:0-8191)
//CAT24WC16P (N<=2048)(地址:0-2047)
fnWrite_Eeprom(TurnList[ucSystemMenuTurnNum].uiTurnTimeAddress,
4,uc8_SystemMenuTurnTemp);
//报警,Beep!
}
//输出位选择1
ucSystemMenuTurnTemp2 = 1;
}
break;
}
//取消键 KEY_ESC 返回上一级目录 退出子菜单
case KEY_ESC:
{
//清空键盘处理
ucKeyInput = KEY_NOKey;
//菜单执行项退出数据清理
//标准退回菜单
ucSystemMenuState = MenuState_X1; //进入菜单状态
break;
}
}
//菜单显示--子菜单1层
pucDBuf = fnDisplayBufSet(Display_01Set);
pucDBuf[0] = 0x0f;
pucDBuf[1] = 0x0f;
pucDBuf[2] = 0x0a; //分隔符号 -
pucDBuf[3] = TurnList[ucSystemMenuTurnNum].ucTurnIndex / 10; //时段的十位
pucDBuf[4] = TurnList[ucSystemMenuTurnNum].ucTurnIndex % 10; //时段的个位
pucDBuf[5] = 0x0a; //分隔符号 -
pucDBuf[6] = 0x0f;
pucDBuf[7] = 0x0f;
fnDisplaySetDk(Display_01Set,0); //设置闪烁 0
ucDisplayState = Display_01Set; //显示菜单
break;
}
//2. 时间设置目录 『ucSystemMenuTurnTemp2』显示位选择(1-7)同数码管位
case 2:
{
//处理键盘消息--子菜单2层
switch(ucKeyInput)
{
//上向键 (KEY_UP) 增量选择数据值(自动循环)
case KEY_UP:
{
//清空键盘处理
ucKeyInput = KEY_NOKey;
//增量+1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -