2401_87732231 2025-02-14 11:30 采纳率: 42.9%
浏览 19

为什么不能从二级菜单返回到一级菜单?stm32,0.96OLED显示屏

img


为什么不能从二级菜单返回到一级菜单?是哪里出了问题吗?stm32,0.96OLED显示屏

img

img

img

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2025-02-14 11:30
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解答

    你遇到的问题是,stm32平台上使用0.96OLED显示屏实现菜单系统,但是从二级菜单返回到一级菜单时出现问题。

    可能的原因是,你的菜单系统实现中没有正确地处理返回事件。stm32平台上,通常使用按键来实现菜单的切换和返回。为了正确地返回到一级菜单,你需要在二级菜单中处理返回事件,并将当前菜单状态保存下来,以便在返回时恢复。

    以下是一个简单的示例代码,演示如何在stm32平台上实现菜单系统的返回事件处理:

    #include <stm32f1xx_hal.h>
    #include <stdbool.h>
    
    // 定义菜单结构体
    typedef struct {
        uint8_t level; // 菜单级别
        uint8_t id; // 菜单ID
        char* name; // 菜单名称
    } menu_t;
    
    // 定义当前菜单状态
    menu_t current_menu;
    
    // 定义菜单函数
    void menu_init() {
        // 初始化菜单
        current_menu.level = 0;
        current_menu.id = 0;
        current_menu.name = "主菜单";
    }
    
    void menu_handle_key_press(uint8_t key) {
        // 处理按键事件
        switch (key) {
            case KEY_UP:
                // 上键事件处理
                if (current_menu.level > 0) {
                    // 返回上一级菜单
                    current_menu.level--;
                    current_menu.id = 0;
                    current_menu.name = "上一级菜单";
                }
                break;
            case KEY_DOWN:
                // 下键事件处理
                if (current_menu.level < 2) {
                    // 进入下一级菜单
                    current_menu.level++;
                    current_menu.id = 1;
                    current_menu.name = "下一级菜单";
                }
                break;
            default:
                break;
        }
    }
    
    int main() {
        // 初始化菜单
        menu_init();
    
        // 主循环
        while (1) {
            // 显示当前菜单
            HAL_LCD_DisplayString(current_menu.name);
    
            // 处理按键事件
            menu_handle_key_press(HAL_KEY_GetKey());
        }
        return 0;
    }
    

    在上面的代码中,我们定义了一个菜单结构体menu_t,用于存储当前菜单的级别、ID和名称。然后,我们定义了一个menu_init函数用于初始化菜单,一个menu_handle_key_press函数用于处理按键事件。

    menu_handle_key_press函数中,我们使用switch语句来处理不同的按键事件。对于上键事件,我们检查当前菜单的级别,如果级别大于0,我们就返回上一级菜单。对于下键事件,我们检查当前菜单的级别,如果级别小于2,我们就进入下一级菜单。

    在主循环中,我们使用HAL_LCD_DisplayString函数来显示当前菜单的名称,并使用HAL_KEY_GetKey函数来获取当前按键事件。

    希望这个示例代码能够帮助你解决问题。如果你需要更多帮助,请提供更多的代码和详细信息。

    评论

报告相同问题?

问题事件

  • 修改了问题 2月14日
  • 创建了问题 2月14日