OLED多级菜单基础知识

        前言:本篇励志教会小白,从基础讲起,参考文章链接放在最后。

#相关基础知识

#结构体基础定义

        结构体定义:结构体由用户自定义的复合数据类型,用于整合不同类型的元素到一个单独的数据单元中。

// 定义一个结构体类型 Student
struct Student {
    int id;
    char name[50];
    float grade;
};

       这里的复合数据类型,不仅仅只有基本数据类型,同时可以,函数指针指针变量数组,进行混着,只混合基本数据类型,较为简单。


typedef struct {
    int current;
    uint8_t next;
    float enter;
    void (*current_operation)(void);
} MENU;//定义匿名结构体

         typedef关键字:为已存在的数据类型(基本数据类型,结构体,联合体,枚举)定义一个新的名称,可以使用这个新的名称进行声明,这个关键字的作用在于,简化复杂数据类型的声明,语法如下。

typedef 已存在的数据类型 新类型名称;

        typedef定义基本数据类型,代码如下。

typedef int Integer;

Integer num = 10;

        typedef定义结构体类型,定义过后只需要使用,新的类型名称去声明结构体,不用在加struct这中关键字。

typedef struct {
    int id;
    char name[50];
    float grade;
} Stu;
Stu student1 = { 1, "Alice", 85.5 };

#数组基础定义

数组:数组中所用元素必须为同类型元素,这种元素可以是基本数据类型组合数据类型(结构体类型),在内存中连续存储,且通过下标访问。

 int numbers[5] = {1, 2, 3, 4, 5};

       这种写法是存储基本数据类型元素,同时不要忘记,数组可以用来存储,组合数据类型也就是结构体类型的元素。当大量数据需要存储使用这种写法,避免了大量声明变量,同时节省了存放变量内存空间的作用。


typedef struct {
    uint8_t current;
    uint8_t next;
    uint8_t enter;
    void (*current_operation)(void);
} MENU;//定义匿名结构体

MENU menu[10];//声明一个 MENU结构体类型的数组

     这里数组里面,存放的是结构体定义的组合数据类型。  

#函数指针基础定义

        函数指针:函数指针,指针的一种,指向的是函数地址而不是数据地址,当完成声明之后,可以通过函数指针,调用函数,固定声明格式如下所示。

返回类型 (*指针变量名)(参数类型1, 参数类型2, ...);

        函数指针指向函数地址,通过调用函数指针去调用取地址的函数。

void GPIO_Init(void){}//定义函数

int main(){

(void)(*GPIO_INIT)(void);//声明函数指针

GPIO_INIT  =GPIO_Init;//函数指针指向

GPIO_INIT();//通过函数指针调用函数

return 0;
         }                   

        到这里经介绍完了,实时的基础,接下来将其进行混合应用,如果有的小伙伴还是不清楚可以,找更加基础的教程,多练练,接下来开始进行混合应用率练习。

#0.96寸OLED实现多级菜单部分代码

typedef struct {
    uint8_t current;                // 当前状态索引号
    uint8_t next;                   // 下一个状态索引号
    uint8_t enter;                  // 确定操作索引号
    void (*current_operation)(void); // 当前状态应该执行的操作函数指针
} MENU;

MENU menu[9] = {
    {0, 1, 1, menu0},   // 首界面
    {1, 2, 4, menu1},   // 第二界面 mode1
    {2, 3, 6, menu2},   // 第二界面 mode2
    {3, 1, 0, menu3},   // BACK
    {4, 5, 4, menu4},   // mode1对应的界面
    {5, 4, 3, menu5},   // mode1 BACK
    {6, 7, 8, menu6},   // mode2对应的界面
    {7, 8, 3, menu7},   // mode2 BACK
    {8, 7, 8, temperature_result} // 执行对应的函数
};
void menu0(void) {
    OLED_ShowString(1, 1, "menu");
    OLED_ShowString(2, 1, "mode1");
    OLED_ShowString(3, 1, "mode2");
}

void menu1(void) {
    OLED_ShowString(1, 1, "mode1   <");
    OLED_ShowString(2, 1, "menu2");
    OLED_ShowString(4, 1, "Back");
}

void menu2(void) {
    OLED_ShowString(1, 1, "menu1");
    OLED_ShowString(2, 1, "menu2   <");
    OLED_ShowString(4, 1, "Back");
}

void menu3(void) {
    OLED_ShowString(1, 1, "menu1");
    OLED_ShowString(2, 1, "menu2");
    OLED_ShowString(4, 1, "Back   <");
}

void menu4(void) {
    OLED_ShowString(1, 1, "adc   <");
    OLED_ShowString(4, 1, "Back");
}

void menu5(void) {
    OLED_ShowString(1, 1, "adc");
    OLED_ShowString(4, 1, "Back   <");
}

void menu6(void) {
    OLED_ShowString(1, 1, "tep   <");
    OLED_ShowString(4, 1, "Back");
}

void menu7(void) {
    OLED_ShowString(1, 1, "tep");
    OLED_ShowString(4, 1, "Back   <");
}

void temperature_result(void) {
    // 假设这里是显示温度结果的函数
    printf("Temperature result function executed.\n");
}

有关stm32oled的按键中断多级菜单并实现对应的功能(基于HAL库)(附带源码)_stm32 多级菜单的代码-CSDN博客

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值