液晶菜单程序的编写方法有多种,以下提供几种常见的方法:
方法一:使用函数指针
这种方法通过定义一个函数指针数组来实现多级菜单。每个菜单项对应一个函数指针,当用户选择某个菜单项时,调用相应的函数。
```c
include
// 定义菜单项对应的函数
void Top_Menu(void) {
printf("主菜单界面\n");
printf("建立时间: %s\n", __DATE__);
}
void Menu_IN(void) {
printf("进入菜单界面\n");
printf("短信 信息宝典 设置\n");
printf("彩信相册 彩信 彩信帝国\n");
printf("互联网 电话本 播放器\n");
}
// 函数指针数组
void (*KeyFuncPtr[])(void) = {Top_Menu, Menu_IN};
int main() {
while (1) {
int key = GetKeyValue(); // 获取按键值
if (key >= 0 && key < 2) { // 假设0表示上键,1表示下键
KeyFuncPtr[key]();
}
}
return 0;
}
```
方法二:使用标志位和if-else语句
这种方法通过大量的标志位和if-else语句来实现菜单的显示和跳转。
```c
include
define TOP_MENU 0
define SUB_MENU 1
int current_menu = TOP_MENU;
void Top_Menu(void) {
printf("主菜单界面\n");
printf("建立时间: %s\n", __DATE__);
}
void Menu_IN(void) {
printf("进入菜单界面\n");
printf("短信 信息宝典 设置\n");
printf("彩信相册 彩信 彩信帝国\n");
printf("互联网 电话本 播放器\n");
}
void Menu_Handler(void) {
switch (current_menu) {
case TOP_MENU:
Top_Menu();
break;
case SUB_MENU:
Menu_IN();
break;
}
}
int main() {
while (1) {
int key = GetKeyValue(); // 获取按键值
if (key == 0) { // 假设0表示上键
current_menu = (current_menu == TOP_MENU) ? SUB_MENU : TOP_MENU;
} else if (key == 1) { // 假设1表示下键
Menu_Handler();
}
}
return 0;
}
```
方法三:使用结构体和链表
这种方法通过定义一个结构体数组来建立菜单的链表,每个结构体包含菜单项和对应的函数指针。
```c
include
typedef struct menu {
char item;
void (*func)(void);
struct menu *subMenus;
struct menu *parent;
} Menu;
Menu main_menu = {
.item = "主菜单",
.func = Top_Menu,
.subMenus = NULL,
.parent = NULL
};
Menu sub_menu1 = {
.item = "子菜单1",
.func = Menu_IN,
.subMenus = NULL,
.parent = &main_menu
};
int main() {
Menu *current_menu = &main_menu;
while (1) {
int key = GetKeyValue(); // 获取按键值
if (key == 0) { // 假设0表示上键
current_menu = current_menu->parent;
} else if (key == 1) { // 假设1表示下键
current_menu = current_menu->subMenus;
if (current_menu->func != NULL) {
current_menu->func();
}
}
}
return 0;
}
```
总结
以上方法各有优缺点,选择哪种方法取决于具体的应用场景和需求。函数指针方法使得程序结构清晰,易于维护;标志位和if-else语句方法实现简单,但代码冗余较高;结构体和链表方法可以实现复杂的菜单结构,但实现起来较为复杂。