stm32二级菜单

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

进入二级菜单后再次按下按键二就会返回一级菜单,如果需要三级菜单或者更多的菜单可以按照这个思路进行拓展

你可能感兴趣的:(stm32二级菜单)