当前位置: 首页 > news >正文

STM32实现多级菜单界面显示

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);

http://www.lryc.cn/news/373652.html

相关文章:

  • Qt事件处理和传递流程
  • 基于STM32移植U8g2图形库——OLED显示(HAL库)
  • C语言概述与历史
  • 钉钉Stream模式推送程序环境部署
  • c# 二维图形绘制实践
  • Nvidia TensorRT系列01-TensorRT的功能1
  • Vatee万腾平台:创新科技,助力企业腾飞
  • 搭建k8s集群报错unknown command “\u00a0“ for “kubeadm init“
  • 【数据结构】三路快速排序
  • 中国菜刀,蚁剑,哥斯拉,冰蝎的流量特征区别
  • 华为OD刷题C卷 - 每日刷题32(执行任务赚积分,计算三叉搜索树的高度)
  • QT系列教程(11) TextEdit实现Qt 文本高亮
  • 蓝队-溯源技巧
  • 【5】JDK、JRE和JVM的区别与联系
  • 【DevOps】Logstash详解:高效日志管理与分析工具
  • Vue3 之 Pinia 核心概念(八)
  • 【办公类-04-03】华为助手导出照片视频分类(根据图片、视频的文件名日期分类导出)
  • TVBOX 最新版下载+视频源教程
  • 2024年了,苹果可以通话录音了
  • 书生·浦语大模型实战营第二期作业五
  • 树莓派4B_OpenCv学习笔记9:图片的腐蚀与膨胀
  • Perplexity AI — 探索网络,发掘知识,沟通思想
  • RPC知识
  • 【爬虫】requests 结合 BeautifulSoup抓取网页数据
  • 安全测试框架 二
  • 安徽京准-NTP网络授时服务器助力助力甘南州公共资源交易
  • 大数据—什么是大数据?
  • 德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第十一周) - 自然语言处理扩展研究
  • 支持向量机(SVM)中核函数的本质意义
  • SpringBoot使用jasypt实现数据库信息的脱敏,以此来保护数据库的用户名username和密码password(容易上手,详细)