介绍
在嵌入式系统中,菜单模块是常见的交互界面之一。本篇博客介绍了一种使用STM32微控制器实现简易多级菜单的方法- 数组查表法。该方法通过使用数组和查表的方式,实现了灵活的菜单导航和操作。
实现思路
- 定义一个结构体存储菜单项的信息,包括菜单名称、函数指针(可选)、子菜单项等。
- 使用数组初始化菜单项结构体,构建一个菜单表。
- 通过用户按键输入切换菜单项,并根据菜单项的类型执行相应的操作,如调用函数、打开子菜单等。
代码示例
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)