• STM32实现多级菜单界面显示


    1、main函数中,while循环之前

    1. MenuStruct menu[30]= //定义多级菜单结构体数组
    2. {
    3. {0,0,0,1,show0}, //第一个元素表示索引号,第二个元素表示该按键按下后要返回的界面,第三个元素表示该按键按下后要切换的菜单条目界面,第四个元素表示该按键按下后要进入的界面
    4. {1,0,2,4,show1},
    5. {2,0,3,5,show2},
    6. {3,0,1,6,show3},
    7. {4,1,4,4,show4},
    8. {5,2,5,5,show5},
    9. {6,3,6,6,show6},
    10. };
    11. uint8_t INDEX=0; //索引变量
    12. int (*show)()=NULL; //显示刷新函数指针
    13. show=menu[INDEX].point; //INDEX0时,把函数指针show0函数赋值给show,即初始界面位show0对应的界面

    2、while循环中

    1. key=KEY_Scan(0); //获取按键值
    2. switch(key) //根据按键值改变索引
    3. {
    4. case 0:
    5. break;
    6. case KEY0_PRES://按键按下,返回到上一级目录界面
    7. INDEX=menu[INDEX].key1;
    8. if(menu[INDEX].point()==1) //如过索引值对应的函数返回值为1,是需要更改显示的函数,则将其函数指针的值给show
    9. {
    10. show=menu[INDEX].point;
    11. }
    12. break;
    13. case KEY1_PRES://按键按下,切换本级目录的菜单条目界面
    14. INDEX=menu[INDEX].key2;
    15. if(menu[INDEX].point()==1) //如过索引值对应的函数返回值为1,是需要更改显示的函数,则将其函数指针的值给show
    16. {
    17. show=menu[INDEX].point;
    18. }
    19. break;
    20. case KEY2_PRES://按键按下,进入到下一级目录界面
    21. INDEX=menu[INDEX].key3;
    22. if(menu[INDEX].point()==1) //如过索引值对应的函数返回值为1,是需要更改显示的函数,则将其函数指针的值给show
    23. {
    24. show=menu[INDEX].point;
    25. }
    26. break;
    27. default :
    28. break;
    29. }
    30. show(); //执行显示刷新函数

    3、MultiMenu.c中

    1. //一级界面
    2. int show0()
    3. {
    4. SetTxData1_toLCD(0x00,0x00);//发送5A A5 07 82 0084 5A01 0001(切换到0号页面即0级初始界面)
    5. UserUart1Send( tempbuff1,sizeof(tempbuff1));
    6. SetTxData_toLCD(0x13,0x00,LL_high,LL_low);
    7. UserUart1Send( tempbuff,sizeof(tempbuff));
    8. HAL_Delay(500);
    9. return 1;
    10. }
    11. //一级界面
    12. int show1()
    13. {
    14. SetTxData1_toLCD(0x00,0x01);//发送5A A5 07 82 0084 5A01 0001(切换到1号页面即一级目录1
    15. UserUart1Send( tempbuff1,sizeof(tempbuff1));
    16. return 1;
    17. }
    18. int show2()
    19. {
    20. SetTxData1_toLCD(0x00,0x02);//发送5A A5 07 82 0084 5A01 0002(切换到2号页面即一级目录2
    21. UserUart1Send( tempbuff1,sizeof(tempbuff1));
    22. return 1;
    23. }
    24. int show3()
    25. {
    26. SetTxData1_toLCD(0x00,0x03);//发送5A A5 07 82 0084 5A01 0003(切换到3号页面即一级目录3
    27. UserUart1Send( tempbuff1,sizeof(tempbuff1));
    28. return 1;
    29. }
    30. int show4()
    31. {
    32. SetTxData1_toLCD(0x00,0x04);//发送5A A5 07 82 0084 5A01 0004(切换到4号页面即二级目录历史数据页面)
    33. UserUart1Send( tempbuff1,sizeof(tempbuff1));
    34. return 1;
    35. }
    36. //一级界面菜单1的二级界面
    37. int show5()
    38. {
    39. SetTxData1_toLCD(0x00,0x05);//发送5A A5 07 82 0084 5A01 0005(切换到5号页面即二级目录时间日期设置页面)
    40. UserUart1Send( tempbuff1,sizeof(tempbuff1));
    41. return 1;
    42. }
    43. int show6()
    44. {
    45. SetTxData1_toLCD(0x00,0x06);//发送5A A5 07 82 0084 5A01 0006(切换到6号页面即二级目录位置人员设置页面)
    46. UserUart1Send( tempbuff1,sizeof(tempbuff1));
    47. return 1;
    48. }
    49. int show7()
    50. {
    51. return 1;
    52. }
    53. //一级界面菜单2的二级界面
    54. int show8()
    55. {
    56. return 1;
    57. }
    58. //一级界面菜单3的二级界面
    59. int show9()
    60. {
    61. return 1;
    62. }
    63. //一级界面菜单4的二级界面
    64. int show10()
    65. {
    66. return 1;
    67. }

    4、MultiMenu.h中

    1. struct menu_struct
    2. {
    3. int index; //索引值
    4. int key1; //按下时要切换的索引值
    5. int key2; //按下时要切换的索引值
    6. int key3; //按下时要切换的索引值
    7. int (* point)(); //函数指针,输入值为空,返回类型为int
    8. };
    9. typedef struct menu_struct MenuStruct;
    10. int show0(void);
    11. int show1(void);
    12. int show2(void);
    13. int show3(void);
    14. int show4(void);
    15. int show5(void);
    16. int show6(void);
    17. int show7(void);
    18. int show8(void);
    19. int show9(void);
    20. int show10(void);
    21. int show11(void);
    22. int action1(void);
    23. int action2(void);
    24. int action3(void);

  • 相关阅读:
    5G-A,未来已来
    WorkTool企微机器人接入微信智能问答
    Python---数据容器分类及通用操作
    firefly-rk3399开发板100天之第1天 编译android代码,给开发板下载固件
    Collagen胶原蛋白修饰亚油酸linoleic acid/甲磺酸酯Mesylate/磷酸三苯酯TPP
    三行代码实现图像画质修复,图片清晰度修复,清晰度提升python
    Collections.addAll()和list.addAll()不同之处说明
    C语言中可变参数函数的实现——printf
    ImportError: cannot import name ‘Config‘ from ‘mmcv‘ 问题解决
    面试:类相关---Java、Android有哪些类加载器
  • 原文地址:https://blog.csdn.net/jacklood/article/details/139699423