⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tinymenu_test.c

📁 实现液晶多层菜单的程序
💻 C
字号:
#include <inttypes.h>
#include <stdlib.h>
#include <string.h>

#include "spin_delay.h"
#include "lcd_pcd8544.h"
#include "lcd_pcd8544_text.h"
#include "tinymenu.h"
#include "joystick.h"

void my_select(void *arg, char *name);

menu_t sub1_menu = {
   .top_entry = 0,
   .current_entry = 0,
   .entry =  {
      {.flags = 0,
       .select = my_select,
       .name = "s2",
       .value = 0,
      },
      {.flags = 0,
       .select = my_select,
       .name = "s3",
       .value = 0,
      },
      {.flags = 0,
       .select = my_select,
       .name = "s4",
       .value = 0,
      },
   },
   .num_entries = 3,
   .previous = NULL,
};

menu_t sub2_menu = {
   .top_entry = 0,
   .current_entry = 0,
   .entry = {
      {.flags = 0,
       .select = my_select,
       .name = "s5",
       .value = 0,
      },
      {.flags = 0,
       .select = my_select,
       .name = "s6",
       .value = 0,
      },
      {.flags = 0,
       .select = my_select,
       .name = "s7",
       .value = 0,
      }
   },
   .num_entries = 3,
   .previous = NULL,
};

menu_t main_menu = {
   .top_entry = 0,
   .current_entry = 0,
   .entry = {
      {.flags = MENU_FLAG_SUBMENU,
       .select = NULL,
       .name = "submenu 1",
       .value = &sub1_menu,
      },
      {.flags = MENU_FLAG_SUBMENU,
       .select = NULL,
       .name = "submenu 2",
       .value = &sub2_menu,
      },
      {.flags = 0,
       .select = my_select,
       .name = "something",
       .value = 0,
      }
   },
   .num_entries = 3,
   .previous = NULL,
};

menu_context_t menu_context = {
   .x_loc = 0,
   .y_loc = 0,
   .height = 2,
   .width = 10,
   .menu = NULL,
};

void my_select(void *arg, char *name)
{
   lcd_clear();
   lcd_puts("Selected: ");
   lcd_puts(name);
   
   ms_spin(750);

}

int main()
{
   uint8_t j;

   
   joystick_init();
   
   menu_enter(&menu_context, &main_menu);
   
   while (1) {
      ms_spin(50);
      j = joystick_read();
   
      switch(j) {
         case JOYSTICK_UP:
            menu_next_entry(&menu_context);
            break;
         case JOYSTICK_DOWN:
            menu_prev_entry(&menu_context);
            break;
         case JOYSTICK_LEFT:
            menu_exit(&menu_context);
            break;
         case JOYSTICK_RIGHT:
         case JOYSTICK_BUTTON:
            menu_select(&menu_context);
            break;
      }
   }
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -