基于stm32的u8g2菜单选择框切换的运动函数详细讲解!

作者分享了在STM32上使用OLED开发多级菜单的实践,涉及链表结构、菜单初始化和选择框的运动逻辑,有助于提升指针、结构体和链表理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:前言

        刚做完stm32的健康监测手表,想和大家分享多级菜单这部分,在此分享一篇OLED菜单选择框的运动算法。我用的是stm32f103c8t6,7针SPI的0.96寸的OLED屏。

1.准备工作

        想必大家在做到多级菜单这部时已经把SPI硬件的配置和u8g2的移植配置好了吧!如果还没有的话可以去看我的上一篇文章噢。

2.菜单结构体定义

        多级菜单使用双向链表结构

typedef struct Function_Obj{  //小菜单结构体 
	struct Function_Obj *Next;  //指向上一个菜单 
	struct Function_Obj *Last;  //指向下一个菜单
	struct Function_Obj *Head;  //指向链表头
	struct Function_Obj *Final; //指向最后一个菜单 
	//函数指针指向每一个函数具体功能
	//Fc f;   //传入地址类型
	//const uint8_t *img;   //菜单图标 
	uint16_t NowY;
	char *Fname;  //菜单名 
	uint16_t ListNum;  //列表节点个数
}Function;

 3.初始化菜单链表

        对于初始化定义,选择定义为全局变量,菜单个数自主选择。对于菜单链接这里使用链表尾插法。

Function* Function_init(char *Fname,uint16_t nowY,Function* Fc,const uint8_t *img) //菜单初始化函数 
{
	Function *fc=(Function*)malloc(sizeof(Function));  //使用malloc函数给新菜单分配空间,注意需要导入string.h 
	fc->Fname=Fname;  //初始化菜单名 
	//fc->img=img;      
	fc->NowY=nowY;
	fc->ListNum=1;  //当前列表的节点个数初始化为1
	fc->Next=NULL;
	fc->Last=NULL;
	fc->Final=NULL;
	fc->Head=Fc;
	//fc->f=NULL;
	return fc;
}
void Function_List(Function *Head,Function *FinalList) //需传入头节点,和需要尾插的节点
{
	if(Head->Next==NULL) //头节点的下一个无任何节点 
	{
		Head->Next=FinalList;
		Head->Final=FinalList;
		FinalList->Last=Head; //直接将传入的尾节点插入尾部 
		(Head->ListNum)++;  //每插入一个节点个数加1
	}
	else //有则使用双向链表尾插法 
	{
		FinalList->Last=Head->Final;
		Head->Final->Nex
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫色小薇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值