stm32OLED多级菜单

今天实现了OLED多级菜单的显示。我用的是stm32f103ve,和四脚的OLED屏幕,用了三个按键。
话不多说,直接上代码。

点击查看代码
//先定义按键功能结构体
typedef struct 
{
	char current_menu;
	char up_menu;
	char down_menu;
	char Enter_menu;
	void (* operate)();
	
}Menu_Button;

//菜单
Menu_Button const table[9]= 
{
	{0,0,1,3,(*Menu1)},//1
	{1,0,2,5,(*Menu2)},
	{2,1,2,7,(*Menu3)},
	
	{3,0,4,8,(*Menu4)},//1.1
	{4,3,4,4,(*Menu5)},
	
	{5,1,6,5,(*Menu4)},//1.2
	{6,5,6,6,(*Menu5)},
	
	{7,2,7,7,(*Show2)},//1.3
	
	{8,3,8,8,(*Fun1)}//1.1.1
};

先解释一下意思: {0,x,y,z,(*函数名) 对于{0,0,1,3,(*Menu1)},//1,它的意思是,第一层菜单的第一条,第一个0,表示的数组的第0位,第二个0,根据结构体,表示上一级没有菜单,1,表示下一级是显示的是数组第1位的内容,也就是{1,0,2,5,(*Menu2)},,3表示进入,进入数组下标为3的内容,也就是{3,0,4,8,(*Menu4)},//1.1。 ![](https://img2022.cnblogs.com/blog/2820930/202205/2820930-20220508012025489-1938749503.png) 理解这个之后,就可以写多级菜单啦,比起用if……else,switch……case简洁方便多啦。
点击查看代码

//按键处理函数
void Key_pro()
{
	static char flag = 1;
	if(flag &&(keyup == 1 || keydown == 1 || keyenter == 1 || keyenter == 0 ))
	{
		flag = 0;
		if(keyup == 1)
		{
			func_index = table[func_index].up_menu;
			OLED_Clear();
			return;
		}
		if(keydown == 1)
		{
			func_index = table[func_index].down_menu;
			OLED_Clear();
			return;
		}
		if(keyenter == 0)
		{
			func_index = table[func_index].Enter_menu;
			OLED_Clear();
			return;
		}
	}
	else if(keyup == 0 && keydown == 0)
	{
		flag = 1;
	}


}
这里面的按键,开发板的按键是默认按下是高电平,另一个自己拓展的keyenter是接地的,所以按下是低电平。 里面的一些函数就是自己使用OLED显示的内容和自己写的功能函数啦,这里就不给出啦。 [链接:https://pan.baidu.com/s/1SmTWKV1B148Bjro8HUBqaA ]() 提取码:lxt6 如有更好的建议可以评论分享,如有不对欢迎指出。
posted @ 2022-05-08 01:44  lorem万俟  阅读(1248)  评论(5编辑  收藏  举报