×
嵌入式 > 技术百科 > 详情

单片机4个按键菜单

发布时间:2020-06-06 发布时间:
|
#include "main.h"

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)();
    }
}

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil5(MDK5)在调试(debug)过程中遇到的问题