STM32+ESP8266水墨屏天气时钟:简易多级菜单(数组查表法)

项目背景

本次的水墨屏幕项目需要做一个多级菜单的显示,所以写出来一起学习,本篇文章不单单适合于水墨屏,像0.96OLED屏幕也适用,区别就是修改显示函数。
在这里插入图片描述

设计思路

多级菜单的实现,一般有两种实现的方法
1.通过双向链表实现
2.通过数组查表实现
两种方法的思路都是把所有的界面连接在同一个连接中,上级菜单跳转下级菜单。
数组查表比较简单,此次的项目就用数组查表的方法。

实现代码

1.确定好菜单的逻辑,也就是菜单的显示关系。
在这里插入图片描述

在开机的时候,显示开机界面,然后按下任意按键,就跳转到菜单显示,可以通过上按键,下按键和确认按键选择相对应的显示。
2.代码逻辑实现。
首先定义一个结构体,分别为上按键,下按键和确认按键,当前页面索引号,当前页面索引号执行的函数。

typedef struct
{
	uchar current;//当前页面索引号
	uchar up;     //向上翻索引号
	uchar down;   //向下翻索引号
	uchar enter;  //确认索引号
	void (*current_operation)();  //当前页面索引号执行的函数,指针函数
} key_table;

数组方法实现多级菜单的原理就是把每一个显示界面编上一个号码,称为当前页面索引号。比如开机显示界面为0,菜单显示为1。每当选择到一个号码,就去运行前页面索引号函数,也就是显示相对应的界面。例如下面的数组key_table table【】,当选择到0编码,就去运行(*fun_0)这个指针函数,把要显示的开机界面写在(*fun_0)就可以。

key_table table[30]=
{
	 //第0层
	{0,1,1,1,(*fun_0)},//开机界面
	
    //第1层
	{1,2,2, 2,(*fun_a1)},//主菜单界面
	{2,6,3, 7,(*fun_b1)},//显示WIFI下划线
	{3,2,4, 8,(*fun_c1)},//显示万年历下划线
	{4,3,5, 9,(*fun_d1)},//显示时钟下划线
	{5,4,6, 10,(*fun_e1)},//显示小说下划线
	{6,5,2, 0,(*fun_f1)},//显示返回下划线
		
    //第2层
	{7,7,7,1,(*fun_a21)},	//连接WIFI
	{8,8,8,1,(*fun_b21)},	//显示时间
	{9,9,9,1,(*fun_c21)},	//倒计时
							
};
//开机界面
void fun_0()
{
    u2_printf("hello world\r\n");
	Refresh();//刷新屏幕
    EPD_ShowString(125,55,"Hello",24,BLACK);	
	EPD_PartDisplay(Image_BW);
	delay_ms(20);
}

那么是怎么实现上级菜单跳转到下级菜单的尼,比如初始显示欢迎界面的状态下,按下不同按键后,通过数组查表,确定要跳转到的索引号,然后根据索引号,通过函数指针执行索引号对应的显示函数,即实现了一次页面切换。然后,就是在新的页面状态,收到下一个按钮指令,再切换到下一个显示状态。
我们看下key_table table[30]数组里面的元素。

	 //第0层
	{0,1,1,1,(*fun_0)},//开机界面
	 //第1层
	{1,2,2, 2,(*fun_a1)},//主菜单界面
	{2,6,3, 7,(*fun_b1)},//显示WIFI下划线
	{3,2,4, 8,(*fun_c1)},//显示万年历下划线
	{4,3,5, 9,(*fun_d1)},//显示时钟下划线
	{5,4,6, 10,(*fun_e1)},//显示小说下划线
	{6,5,2, 0,(*fun_f1)},//显示返回下划线
	//第2层
	{7,7,7,1,(*fun_a21)},	//连接WIFI
	{8,8,8,1,(*fun_b21)},	//显示时间
	{9,9,9,1,(*fun_c21)},	//倒计时

元素是一开始我们定义好的结构体,依次为当前页面索引号,上按键,下按键,确认按键,执行的函数。当我们在索引号1的主菜单界面按上按键,下按键,确认按键,都会跳转到索引号2的显示WIFI下划线界面,然后按上按键,就去跳转到索引号6的显示返回下划线界面,或者按下按键跳转到索引号3的显示WIFI下划线界面,按确认键就跳转到第2层的连接WIFI。在索引号7的连接WIFI界面中,按上按键和下按键都是跳到当前索引号7,从而显示按键按下不跳其他界面的功能,只有按确认按键才会跳到当前索引号1的主菜单界面。
通过分析,不难发现,这些数组在空间上的关系:

在这里插入图片描述

菜单界面的切换。比如初始显示欢迎界面的状态下,按下不同按键后,通过数组查表,确定要跳转到的索引号,然后根据索引号,通过函数指针执行索引号对应的显示函数,即实现了一次页面切换。
然后,就是在新的页面状态,收到下一个按钮指令,再切换到下一个显示状态。

效果可以看看视频

多级菜单演示

代码链接:https://pan.baidu.com/s/1XddINn6Qos5-4r5XtIuwXQ?pwd=z754
提取码:z754

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于STM32ESP8266的桌面型网络天气时钟系统设计如下:该系统主要由STM32单片机ESP8266无线模块、RTC实时时钟模块、LCD显示和温湿度传感器等组成。 首先,STM32作为主控单元,负责整个系统的控制和协调。它通过串口与ESP8266进行通信,将获取到的天气数据发送给ESP8266进行处理和联网。 其次,ESP8266无线模块实现了系统的网络连接功能。它能够通过WiFi无线网络连接到互联网,从而获取天气数据。ESP8266利用HTTP协议与已有的天气API进行通信,获取实时的天气数据,并将其返回给STM32。 RTC实时时钟模块用于实时记录当前时间,并在断电后能够继续保持时间的准确性。它提供了精确的时钟信号以及日期显示功能,确保系统能够准确显示当前时间和日期。 LCD显示用于显示系统中的各种信息,包括时间、日期、天气预报等。通过与STM32进行通信,LCD幕能够根据接收到的数据更新显示内容。 最后,温湿度传感器用于实时监测环境的温度和湿度。它通过与STM32的连接,将监测到的数据传输给STM32进行处理和显示,并可以根据数据判断是否需要提醒用户进行调整。 总之,基于STM32ESP8266的桌面型网络天气时钟系统能够通过连接到互联网获取实时的天气数据,并将其显示在LCD幕上。同时,它还能够显示当前时间、日期和环境温湿度等信息,为用户提供了一种实用的功能,并能够根据实时数据进行提醒和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习的王大胖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值