oled是嵌入式学习中必不可少的显示器,但是往往显示的内容有限,有时候又需要进行多层显示,比如24年的电赛小车题,一共四问,这时候就可以使用二级菜单,在第一级菜单中显示每一问,再分别掉进各自的二级菜单中对pid进行调节,话不读书直接上代码
int menu1(void)
{
uint8_t KeyNum=0;
int8_t oled1_display_mdoe=1;
OLED_ShowString(0,0, "display1 ",OLED_8X16);
OLED_ShowString(0,16,"display2 ",OLED_8X16);
OLED_ShowString(0,32,"display3 ",OLED_8X16);
OLED_ShowString(0,48,"display4 ",OLED_8X16);
OLED_Update();
while(1)
{
KeyNum=Key_GetNum();
if(KeyNum==1)
{
oled1_display_mdoe++;
if(oled1_display_mdoe==6){oled1_display_mdoe=1;}
}
if(KeyNum==2)
{
OLED_Clear();
OLED_Update();
return oled1_display_mdoe;
}
switch(oled1_display_mdoe)
{
case 1:
{
OLED_ShowString(0,0, "display1 ",OLED_8X16);
OLED_ShowString(0,16,"display2 ",OLED_8X16);
OLED_ShowString(0,32,"display3 ",OLED_8X16);
OLED_ShowString(0,48,"display4 ",OLED_8X16);
OLED_ReverseArea(0,0,128,16);
OLED_Update();
break;
}
case 2:
{
OLED_ShowString(0,0, "display1 ",OLED_8X16);
OLED_ShowString(0,16,"display2 ",OLED_8X16);
OLED_ShowString(0,32,"display3 ",OLED_8X16);
OLED_ShowString(0,48,"display4 ",OLED_8X16);
OLED_ReverseArea(0,16,128,16);
OLED_Update();
break;
}
case 3:
{
OLED_ShowString(0,0, "display1 ",OLED_8X16);
OLED_ShowString(0,16,"display2 ",OLED_8X16);
OLED_ShowString(0,32,"display3 ",OLED_8X16);
OLED_ShowString(0,48,"display4 ",OLED_8X16);
OLED_ReverseArea(0,32,128,16);
OLED_Update();
break;
}
case 4:
{
OLED_ShowString(0,0, "display1 ",OLED_8X16);
OLED_ShowString(0,16,"display2 ",OLED_8X16);
OLED_ShowString(0,32,"display3 ",OLED_8X16);
OLED_ShowString(0,48,"display4 ",OLED_8X16);
OLED_ReverseArea(0,48,128,16);
OLED_Update();
break;
}
case 5:
{
OLED_ShowString(0,0,"PID ",OLED_8X16);
OLED_ShowString(0,16," ",OLED_8X16);
OLED_ShowString(0,32," ",OLED_8X16);
OLED_ShowString(0,48," ",OLED_8X16);
OLED_ReverseArea(0,0,128,16);
OLED_Update();
break;
}
}
}
}
首先是一级菜单,每次按键KeyNum1按下对oled1_display_mdoe进行加一,以切换不同的oled显示,switch中根据oled1_display_mdoe值进行切换显示内容,如果KeyNum2按下按键将当前所在的是第几个页面进行返回
接着是二级菜单
oled_display_menu2 = menu1();
我们在主函数的while中不断调用menu1()进行一级菜单显示,如果检测到返回值就根据返回值跳进对应的页面
if(oled_display_menu2 == 1){menu2_display1();}
if(oled_display_menu2 == 2){menu2_display2();}
if(oled_display_menu2 == 3){menu2_display3();}
if(oled_display_menu2 == 4){menu2_display4();}
if(oled_display_menu2 == 5){menu2_display5();}
int menu2_display1(void)
{
uint8_t KeyNum=0;
OLED_ShowString(0,0, "menu2_1_1 ",OLED_8X16);
OLED_ShowString(0,16,"menu2_1_2 ",OLED_8X16);
OLED_ShowString(0,0, "menu2_1_3 ",OLED_8X16);
OLED_ShowString(0,16,"menu2_1_4 ",OLED_8X16);
OLED_ShowString(0,16,"menu2_1_5 ",OLED_8X16);
OLED_Update();
while(1)
{
KeyNum=Key_GetNum();
if(KeyNum==2)
{
OLED_Clear();
OLED_Update();
return 0;
}
}
}
int menu2_display2(void)
{
uint8_t KeyNum=0;
OLED_ShowString(0,0, "menu2_2_1 ",OLED_8X16);
OLED_ShowString(0,16,"menu2_2_2 ",OLED_8X16);
OLED_ShowString(0,0, "menu2_2_3 ",OLED_8X16);
OLED_ShowString(0,16,"menu2_2_4 ",OLED_8X16);
OLED_ShowString(0,16,"menu2_2_5 ",OLED_8X16);
OLED_Update();
while(1)
{
KeyNum=Key_GetNum();
if(KeyNum==2)
{
OLED_Clear();
OLED_Update();
return 0;
}
}
}
int menu2_display3(void)
{
uint8_t KeyNum=0;
OLED_ShowString(0,0, "menu2_3_1 ",OLED_8X16);
OLED_ShowString(0,16,"menu2_3_2 ",OLED_8X16);
OLED_ShowString(0,0, "menu2_3_3 ",OLED_8X16);
OLED_ShowString(0,16,"menu2_3_4 ",OLED_8X16);
OLED_ShowString(0,16,"menu2_3_5 ",OLED_8X16);
OLED_Update();
while(1)
{
KeyNum=Key_GetNum();
if(KeyNum==2)
{
OLED_Clear();
OLED_Update();
return 0;
}
}
}
int menu2_display4(void)
{
uint8_t KeyNum=0;
OLED_ShowString(0,0, "menu2_4_1 ",OLED_8X16);
OLED_ShowString(0,16,"menu2_4_2 ",OLED_8X16);
OLED_ShowString(0,0, "menu2_4_3 ",OLED_8X16);
OLED_ShowString(0,16,"menu2_4_4 ",OLED_8X16);
OLED_ShowString(0,16,"menu2_4_5 ",OLED_8X16);
OLED_Update();
while(1)
{
KeyNum=Key_GetNum();
if(KeyNum==2)
{
OLED_Clear();
OLED_Update();
return 0;
}
}
}
int menu2_display5(void)
{
uint8_t KeyNum=0;
OLED_ShowString(0,0, "menu2_5_1 ",OLED_8X16);
OLED_ShowString(0,16,"menu2_5_2 ",OLED_8X16);
OLED_ShowString(0,0, "menu2_5_3 ",OLED_8X16);
OLED_ShowString(0,16,"menu2_5_4 ",OLED_8X16);
OLED_ShowString(0,16,"menu2_5_5 ",OLED_8X16);
OLED_Update();
while(1)
{
KeyNum=Key_GetNum();
if(KeyNum==2)
{
OLED_Clear();
OLED_Update();
return 0;
}
}
}
进入二级菜单后再次按下按键二就会返回一级菜单,如果需要三级菜单或者更多的菜单可以按照这个思路进行拓展
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/2301_80143498/article/details/149135330
|