void PWM_Ctrl(signed char i) //脉冲宽度设置
{
}
void OpenTime_Ctrl(signed char i) //开时间设置
{
}
void CloseTime_Ctrl(signed char i) //关时间设置
{
}
void ClearData(signed char i) //清除数据
{
}
void NullMenu(signed char i) //空操作
{
;
}
struct MenuItem
{
void (*Display)(void); //显示函数
void (*Subs)(signed char i); //节点函数
struct MenuItem *ChildrenMenus; //子菜单
struct MenuItem *ParentMenus; //母菜单
};
//本文共计2级菜单
struct MenuItem SetMenu[4]; //设置键子菜单
struct MenuItem StartMenu; //开始菜单
struct MenuItem (*MenuPoint) = &StartMenu;
struct MenuItem (*last_MenuPoint) = &StartMenu;
struct MenuItem SetMenu[4] =
{ // Display Subs ChildrenMenus ParentMenus
{ Display_S0, PWM_Ctrl, &SetMenu[1], &StartMenu},
{ Display_S1, OpenTime_Ctrl, &SetMenu[2], &StartMenu},
{ Display_S2, CloseTime_Ctrl, &SetMenu[3], &StartMenu},
{ Display_S3, ClearData, &StartMenu, &StartMenu},
};
struct MenuItem StartMenu =
{
Display_Count, NullMenu, &SetMenu[0], &StartMenu
};
void Data_manage(void)
{
;
}
void Key_Handle(void)
{
unsigned char key;
signed char i = 0;
if (key_value == 0)
{
return;
}
key = key_value;
key_value = 0;
switch (key)
{
case KEY_START:
MenuPoint = (*MenuPoint).ParentMenus;
break;
case KEY_SET:
MenuPoint = (*MenuPoint).ChildrenMenus;
pause_flag = 1; //暂停计数
break;
case KEY_UP:
i = 1;
break;
case KEY_DOWN:
i = -1;
break;
default:
break;
}
Data_manage();
(*(*MenuPoint).Subs)(i);
(*(*MenuPoint).Display)();
Refresh_flash();
}
void Display(void)
{
if (time_1s_flag == 1)
{
time_1s_flag = 0;
(*(*MenuPoint).Display)();
}
}
上一篇:软件延时的误区
下一篇:MSP430看门狗定时器的寄存器定义
推荐阅读最新更新时间:2024-03-16 15:05