使用OLED屏幕实现简易多级菜单

前言

最近在学习如何实现oled多级菜单时,查看了大多数博主发的文章,大概似懂的文章内容可让我好一阵思考,于是我觉得应该有一篇更加简单易懂的文章能轻易上手;我们实现项目时一定先要准备以下知识点:1. 结构体 2.结构体数组 3.函数指针 (如果还有没有这方面的C语言知识,可以阅读相关博客学习,因为只有我们了解了这些知识后,才不会望而却步!)


一、定义一个结构体

定义一个结构体,结构体里面应当有你想要怎样操作界面的变量等,一般包括:1.当前索引号 ,2.下一个,3.确定,4.当前执行函数的函数指针 ;我这里使用两个按键,一个表切换下一个,一个表确定。

//定义一个结构体包含你想操作内容
typedef struct
{
	int current;
	int next;
	int enter;
	void (*current_operation)(void);
	
}Menu;

二、定义一个结构体数组

Menu table[13] = 
{
	//开始菜单
	{0,0,1,(*start)},
	//1级菜单
	{1,2,4,(*one_meue1)},
	{2,3,7,(*one_meue2)},	
	{3,1,0,(*back1)},	
	//2.1菜单
	{4,5,0,(*two_meue1)},
	{5,6,0,(*two_meue2)},	
	{6,4,1,(*back2)},	
	//2.2菜单
	{7,8,0,(*two_meue11)},
	{8,9,0,(*two_meue22)},	
	{9,7,1,(*back22)},	

};

   此次项目应该难点就在理解这个结构体数组以及如何填写参数的内容,首先我们先单独拿出一个数组元素拿来探讨,用一张图片对应他们的关系。

   上图很直观的表明了结构体数组里面一个元素对应的内容,接下来我们就探讨一下,结构体数组里面一个元素对应各个参数值的内容有何意义和它之间有什么联系?此时应当结合下面这段按键操作来一起解释一下。

void Menu_key_set(void)
{
	static int func_index = 0;
	void (*current_operation_index)(void);

	
	int Get_key_next = KEY0;
	int Get_key_enter = KEY1;
	
	if(Get_key_next == 0)//判断是否按下 下一个选项
	{
		func_index = table[func_index].next;
		OLED_Clear(); 
	}
	if(Get_key_enter == 0)//判断是否按下 确定选项
	{
		func_index = table[func_index].enter;
		OLED_Clear(); 
	}
	
	current_operation_index = table[func_index].current_operation;
	(*current_operation_index)();	
	
}

    其中第一0表示当前索引号,也就是可以访问table[0]里面的内容,第二0表示按下 下一个按键是跳转到当前界面下一个选项(因为我这里是开始菜单,即当前界面没有下一个选项,所以为0),第三1表示如果按下确定按钮后,当索引号就换成了1,就可以访问数组[1]的内容,第四(*start)表示执行当前索引值下的显示函数。

    理解上面的内容的话,我相信小伙伴们可以很简单知道填写下一个数组元素里面的内容,与增添更多级菜单,用一张图片简单表现它们之间的关系更加明了。


总结

   总的来说,实现这样一个简易的多级菜单,应该分有四个部分,定义操作结构体,定义菜单结构体数组,实现显示函数,按键操作显示函数。以上是我学习多级菜单的一些简单的看法,如果有什么错误,请小伙伴们及时指正!

物联沃分享整理
物联沃-IOTWORD物联网 » 使用OLED屏幕实现简易多级菜单

发表评论