STM32简易多级菜单(数组查表法)

黑暗之影姬 2024-11-18T23:04:14+08:00
0 0 331

介绍

在嵌入式系统中,菜单模块是常见的交互界面之一。本篇博客介绍了一种使用STM32微控制器实现简易多级菜单的方法- 数组查表法。该方法通过使用数组和查表的方式,实现了灵活的菜单导航和操作。

实现思路

  1. 定义一个结构体存储菜单项的信息,包括菜单名称、函数指针(可选)、子菜单项等。
  2. 使用数组初始化菜单项结构体,构建一个菜单表。
  3. 通过用户按键输入切换菜单项,并根据菜单项的类型执行相应的操作,如调用函数、打开子菜单等。

代码示例

typedef struct MenuItem {
    char name[20];               // 菜单项名称
    void (*function)(void);      // 菜单项对应的函数指针
    struct MenuItem* submenu;    // 子菜单项指针
} MenuItem;

// 菜单项定义
MenuItem menu[] = {
    {"Option 1", &func1, NULL},
    {"Option 2", &func2, NULL},
    {"Option 3", NULL, submenu1},
    {"Option 4", NULL, submenu2},
};

void navigateMenu(MenuItem* menu, int size) {
    int choice = 0;
    char input;
    
    while (1) {
        // 显示菜单项
        for (int i = 0; i < size; i++) {
            printf("%d. %s\n", i+1, menu[i].name);
        }
        
        // 获取用户选择
        scanf("%d", &choice);
        
        if (choice > 0 && choice <= size) {
            // 判断菜单项类型
            if (menu[choice-1].function != NULL) {
                // 调用菜单项的函数
                menu[choice-1].function();
            } else {
                // 进入子菜单
                navigateMenu(menu[choice-1].submenu,
                             sizeof(menu[choice-1].submenu) / sizeof(menu[choice-1].submenu[0]));
            }
        } else {
            printf("Invalid input. Please try again.\n");
        }
    }
}

int main() {
    navigateMenu(menu, sizeof(menu) / sizeof(menu[0]));
    return 0;
}

总结

通过使用数组查表法实现的简易多级菜单,可以在嵌入式系统中提供方便的用户交互界面。该方法使用了结构体来存储菜单项的信息,使用数组构建菜单表,并通过递归调用实现了多级菜单的功能。开发者可以根据自己的需求进行功能扩展和优化,实现更复杂的菜单操作。

希望本篇文章对你在STM32嵌入式系统中实现简易多级菜单有所帮助!

相似文章

    评论 (0)