stm32写菜单界面

        相信对于电子类专业的小伙伴来说,在做课设或者毕设的时候都会需要用到写界面,在这里我把我自己写的界面代码分享给大家,希望对大家的界面设计有所帮助。

#include "stm32f10x.h"                  // Device header
#include "menu.h"
#include "OLED.h"
#include "Key.h"

//定义菜单结构体
typedef struct
{
	char title[20];
	uint8_t num_sub;
	char sub[5][20];
	const uint8_t *image[5];
}MenuItem;


//定义菜单内容
MenuItem main_menu = {
	.title = "Main Menu",
	.num_sub = 4,
	.sub = {"  time  ", " weather", "  game  ","  heart "},
	.image = {Clock, Sun, Player, Heart}
};
MenuItem time_menu = {
	.title = "Time Menu",
	.num_sub = 4,
	.sub = {}	
};
MenuItem weather_menu = {
	.title = "Weather Menu",
	.num_sub = 4,
	.sub = {}	
};
MenuItem game_menu = {
	.title = "Game Menu",
	.num_sub = 4,
	.sub = {}	
};
MenuItem heart_menu = {
	.title = "Heart Menu",
	.num_sub = 4,
	.sub = {}	
};


//定义当前菜单及子菜单选项
MenuItem *current_menu = &main_menu;
uint8_t current_selection = 0;
//获取按键
uint8_t KeyNum;

//按键1(退出)
static void quit(void)
{
	KeyNum = Get_KeyNum();
	if(KeyNum == 1)
	{
		
	}
}
	

//按键2(选择)
static void select(void)
{
	KeyNum = Get_KeyNum();
	if(KeyNum == 2)
	{
		if(++ current_selection ==4) current_selection = 0;
	}
}


//按键3(确认)
static void confirm(void)
{
	KeyNum = Get_KeyNum();
	if(KeyNum == 3)
	{
		
	}
}


//模拟按键控制
static void button_pressed(void)
{
	if(current_menu == &main_menu)
	{
		if(current_selection == 0)
		{
			current_menu = &time_menu;
		}
		else if(current_selection == 1)
		{
			current_menu = &weather_menu;
		}
		else if(current_selection == 2)
		{
			current_menu = &game_menu;
		}
		else if(current_selection == 3)
		{
			current_menu = &heart_menu;
		}
	}
}


//显示当前菜单
void display_menu(void)
{
	select();
	OLED_ShowString(35,0,current_menu->title,OLED_6X8);

	OLED_ShowImage(40,10,45,45,current_menu->image[current_selection]);
	OLED_ShowString(40,55,current_menu->sub[current_selection],OLED_6X8);			

	OLED_Update();
}

       以下是对代码的部分解说: 

  1. 菜单结构体定义:使用了结构体 MenuItem 来定义菜单,包括菜单标题、子菜单数量、子菜单名称以及与每个子菜单相关联的图标。这样的设计使得菜单的管理更加清晰和方便。

  2. 按键控制函数:实现了几个按键控制函数,包括退出、选择和确认。这些函数根据用户按键操作来切换菜单或执行相应的动作,从而增强了菜单的交互性。

  3. 菜单切换逻辑:通过 button_pressed 函数,根据用户选择的菜单项来切换到相应的子菜单,这样用户可以方便地浏览和操作不同的菜单内容。

  4. 显示当前菜单display_menu 函数用于在 OLED 上显示当前菜单的标题、选项和相关图标,为用户提供了直观的菜单界面。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
STM32 OLED菜单是一种基于STM32微控制器和OLED显示屏的菜单系统。它可以实现用户与设备之间的交互,并提供可视化的界面来进行各种设置和操作。 STM32 OLED菜单通常由主菜单和子菜单组成。主菜单是用户进入系统后的第一个界面,它列出了设备的主要功能选项。用户可以通过按下相应的按键或使用旋转编码器等方式来选择菜单项。 每个主菜单项通常对应一个子菜单,用户选择主菜单项后,系统将进入对应的子菜单界面。子菜单可以进一步展示更多功能选项和参数设置。用户可以根据需要浏览和修改这些选项和参数。 在菜单界面中,通常会有一个光标或指示器来指示当前选中的菜单项。用户可以使用方向键或旋转编码器来移动光标。通过按下确定键确认所选菜单项。 菜单界面还可以显示相关的信息和状态,例如设备的工作状态、报警信息或数据监控等。用户可以通过菜单界面来浏览这些信息,并根据需要采取相应的操作。 STM32 OLED菜单系统的设计可以灵活应用于各种设备和项目中。开发人员可以根据实际需求进行界面的设计和功能的扩展。同时,利用STM32微控制器的强大处理能力和丰富的外设资源,菜单系统可以实现复杂的功能和交互效果。 总之,STM32 OLED菜单是一种方便实用的用户界面系统,可以帮助用户更直观地操作和配置设备,提高用户体验和操作便利性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值