1、main函数中,while循环之前
- MenuStruct menu[30]= //定义多级菜单结构体数组
- {
- {0,0,0,1,show0}, //第一个元素表示索引号,第二个元素表示该按键按下后要返回的界面,第三个元素表示该按键按下后要切换的菜单条目界面,第四个元素表示该按键按下后要进入的界面
- {1,0,2,4,show1},
- {2,0,3,5,show2},
- {3,0,1,6,show3},
-
- {4,1,4,4,show4},
- {5,2,5,5,show5},
- {6,3,6,6,show6},
- };
- uint8_t INDEX=0; //索引变量
- int (*show)()=NULL; //显示刷新函数指针
- show=menu[INDEX].point; //INDEX为0时,把函数指针show0函数赋值给show,即初始界面位show0对应的界面
2、while循环中
- key=KEY_Scan(0); //获取按键值
- switch(key) //根据按键值改变索引
- {
- case 0:
- break;
- case KEY0_PRES://按键按下,返回到上一级目录界面
- INDEX=menu[INDEX].key1;
- if(menu[INDEX].point()==1) //如过索引值对应的函数返回值为1,是需要更改显示的函数,则将其函数指针的值给show
- {
- show=menu[INDEX].point;
- }
- break;
- case KEY1_PRES://按键按下,切换本级目录的菜单条目界面
- INDEX=menu[INDEX].key2;
- if(menu[INDEX].point()==1) //如过索引值对应的函数返回值为1,是需要更改显示的函数,则将其函数指针的值给show
- {
- show=menu[INDEX].point;
- }
- break;
- case KEY2_PRES://按键按下,进入到下一级目录界面
- INDEX=menu[INDEX].key3;
- if(menu[INDEX].point()==1) //如过索引值对应的函数返回值为1,是需要更改显示的函数,则将其函数指针的值给show
- {
- show=menu[INDEX].point;
- }
- break;
-
- default :
- break;
- }
-
- show(); //执行显示刷新函数
3、MultiMenu.c中
- //一级界面
- int show0()
- {
- SetTxData1_toLCD(0x00,0x00);//发送5A A5 07 82 0084 5A01 0001(切换到0号页面即0级初始界面)
- UserUart1Send( tempbuff1,sizeof(tempbuff1));
-
- SetTxData_toLCD(0x13,0x00,LL_high,LL_low);
- UserUart1Send( tempbuff,sizeof(tempbuff));
- HAL_Delay(500);
-
- return 1;
- }
-
-
- //一级界面
- int show1()
- {
- SetTxData1_toLCD(0x00,0x01);//发送5A A5 07 82 0084 5A01 0001(切换到1号页面即一级目录1)
- UserUart1Send( tempbuff1,sizeof(tempbuff1));
-
- return 1;
- }
- int show2()
- {
-
- SetTxData1_toLCD(0x00,0x02);//发送5A A5 07 82 0084 5A01 0002(切换到2号页面即一级目录2)
- UserUart1Send( tempbuff1,sizeof(tempbuff1));
-
- return 1;
- }
- int show3()
- {
- SetTxData1_toLCD(0x00,0x03);//发送5A A5 07 82 0084 5A01 0003(切换到3号页面即一级目录3)
- UserUart1Send( tempbuff1,sizeof(tempbuff1));
- return 1;
- }
- int show4()
- {
- SetTxData1_toLCD(0x00,0x04);//发送5A A5 07 82 0084 5A01 0004(切换到4号页面即二级目录历史数据页面)
- UserUart1Send( tempbuff1,sizeof(tempbuff1));
-
- return 1;
- }
- //一级界面菜单1的二级界面
- int show5()
- {
- SetTxData1_toLCD(0x00,0x05);//发送5A A5 07 82 0084 5A01 0005(切换到5号页面即二级目录时间日期设置页面)
- UserUart1Send( tempbuff1,sizeof(tempbuff1));
- return 1;
- }
- int show6()
- {
- SetTxData1_toLCD(0x00,0x06);//发送5A A5 07 82 0084 5A01 0006(切换到6号页面即二级目录位置人员设置页面)
- UserUart1Send( tempbuff1,sizeof(tempbuff1));
- return 1;
- }
- int show7()
- {
-
- return 1;
- }
- //一级界面菜单2的二级界面
- int show8()
- {
-
- return 1;
- }
- //一级界面菜单3的二级界面
- int show9()
- {
-
- return 1;
- }
- //一级界面菜单4的二级界面
- int show10()
- {
-
- return 1;
- }
4、MultiMenu.h中
- struct menu_struct
- {
- int index; //索引值
- int key1; //按下时要切换的索引值
- int key2; //按下时要切换的索引值
- int key3; //按下时要切换的索引值
- int (* point)(); //函数指针,输入值为空,返回类型为int
- };
- typedef struct menu_struct MenuStruct;
-
- int show0(void);
- int show1(void);
- int show2(void);
- int show3(void);
- int show4(void);
- int show5(void);
- int show6(void);
- int show7(void);
- int show8(void);
- int show9(void);
- int show10(void);
- int show11(void);
- int action1(void);
- int action2(void);
- int action3(void);