STM32_OLED多级菜单

这篇具有很好参考价值的文章主要介绍了STM32_OLED多级菜单。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32_OLED多级菜单

STM32_OLED多级菜单

程序实现

多级菜单显示实则是多个界面的跳转,这个版本更加适合初学者。我使用了两个按键,一个用来选择下一项,另一个用来确定选项。所以我们暂时叫他next键和enter键。先定义一个结构体,结构体里面有四个变量,分别代表当前索引号,next键,enter键和当前执行函数。
结构体如下:

typedef struct
{
    u8 current;//当前状态索引号
    u8 next; //向下一个
    u8 enter; //确定
    void (*current_operation)(void); //当前状态应该执行的操作
} Menu_table;

这里是核心思想,就是按键按下决定当前的索引号,继续定义一个数组:

Menu_table  table[17]=
{
    {0,0,1,(*show0)},//一级界面
	
    {1,2, 5,(*show1)},//二级界面    第一行
    {2,3, 9,(*show2)},//二级界面    第二行
    {3,4,13,(*show3)},//二级界面   第三行
    {4,1, 0,(*show4)},//三级界面    Back
	
    {5, 6, 4, (*show5)},  //三级菜单 Back
    {6, 7, 5, (*show6)}, //三级菜单 
    {7, 8, 5, (*show7)}, //三级菜单 
    {8, 5, 5, (*show8)}, //三级菜单 

    {9 , 10, 4, (*show9)},    //三级菜单  Back
    {10, 11, 9, (*show10)}, //三级菜单
    {11, 12, 9, (*show11)}, //三级菜单 
    {12, 9 , 9, (*show12)},  //三级菜单 

    {13, 14, 4, (*show13)},  //三级菜单  Back
    {14, 15, 13, (*show14)}, //三级菜单
    {15, 16, 13, (*show15)}, //三级菜单 
    {16, 13, 13, (*show16)}, 
};

这里解释一下这个数组中 {0,0,1,(show0)},一级界面 ,由于我们在前面先定义了Menu_table结构体,结构体成员变量分别为当前索引号,next,enter和void (current_operation)(void),第一的0代表当前的索引号,第二个0代表next这个按键按下返回的索引号,第三个1代表enter按键按下返回的索引号。第三个(*show0)代表索引号为0要执行的函数。一一对应。再结合按键按下的画面就比较有逻辑了。

STM32_OLED多级菜单
在三级菜单最后,我采用了直接跳转回上一级,避免溢出现象。

本质上所有的页面均为一幅图像,例如下

void show0(void)//第一页
{
    OLED_ShowString(25,0,"Menu Test",16);
	OLED_ShowString(5,2,"Test 1",16);
	OLED_ShowString(5,4,"Test 2",16);
	OLED_ShowString(5,6,"Test 3",16);
}

void show1(void)//第二页
{
	OLED_ShowString(5,0,"Test 1   <",16);
	OLED_ShowString(5,2,"Test 2",16);
	OLED_ShowString(5,4,"Test 3",16);
	OLED_ShowString(5,6,"Back ",16);
}

再就是按键方面文章来源地址https://www.toymoban.com/news/detail-507640.html

void  Menu_key_set(void)
{
  key1 = KEY1_Get();
  key2 = KEY2_Get();
  if(key1 == 1)
  {   
    func_index=table[func_index].next;//按键next按下后的索引号
    OLED_Clear();
  }
  if(key2 == 1)
  {
    func_index=table[func_index].enter;
    OLED_Clear();
  }

  current_operation_index=table[func_index].current_operation;//执行当前索引号所对应的功能函数。
  (*current_operation_index)();//执行当前操作函数
}

uint8_t KEY1_Get(void)
{
	if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0)
	{
		Delay_ms(20);
		while (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0);
		Delay_ms(20);
		Key1=1;
	}
	else
		Key1=0;

	return Key1;
}

到了这里,关于STM32_OLED多级菜单的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32——OLED菜单

    简介:首先在我的51 I2C里面有OLED详细讲解,本期代码从51OLED基础上移植过来的,可以先看完那篇文章,在看这个,然后按键我是用的定时器扫描不会堵塞程序,可以翻开我的文章有单独的定时器按键扫描,DHT11文章也有,我的菜单从一级界面点进去二级界面,二级界面开启的内

    2024年02月19日
    浏览(40)
  • STM32简易多级菜单(数组查表法)

    单片机开发中,有时会用到屏幕来显示内容,当需要逐级显示内容时,就需要使用多级菜单的形式了。 多级菜单的实现,大体分为两种设计思路: 通过双向链表实现 通过数组查表实现 总体思路都是把菜单的各个界面联系起来,可以从上级菜单跳到下级菜单,也可从下级菜单

    2024年02月02日
    浏览(62)
  • OLED多级菜单记录

    作为一个成熟的项目,就必然不会只有一个方面的特点了,这里一般我们可能需要系统来进行调度,然后给一些可视化的UI,当然我前面有讲到HMI串口屏的使用,串口屏确实是非常不错的UI工具,但是一些比较小的项目就用不太到了,因此这里如果是一些低成本的DIY的项目,一

    2024年02月02日
    浏览(40)
  • STM32+ESP8266水墨屏天气时钟:简易多级菜单(数组查表法)

    本次的水墨屏幕项目需要做一个多级菜单的显示,所以写出来一起学习,本篇文章不单单适合于水墨屏,像0.96OLED屏幕也适用,区别就是修改显示函数。 多级菜单的实现,一般有两种实现的方法 1.通过双向链表实现 2.通过数组查表实现 两种方法的思路都是把所有的界面连接在

    2024年04月10日
    浏览(45)
  • STM32设计实现智能温度计(OLED屏幕的使用,多级屏幕转换,扫描键盘法的搭建、DS180B20温度传感器的使用、实现上位机的可视化)

    智能温度计的设计 设计内容 1)一路温度检测,量程为-40℃~+125℃,误差≤±0.5℃; 2)温度3位数码显示(XX.X℃); 3) 开机自检; 4)配简单键盘,如温度上、下限临界报警值设置; 5)配置通信接口,上位机显示温度曲线。 单片机(32、51)、温度传感器()、键盘、LCD、 我

    2024年02月10日
    浏览(41)
  • STM32OLED呈现主界面菜单任务的编程思路以及模板

    目录 一、效果展示(按键控制界面切换) 二、编程模板 1.头文件 2.库文件 三、编程思路 四、使用说明 OLED三级界面效果展示 1.先填充好每一个要显示的界面,确保界面显示没问题。 2.确保条件能触发,我这里选择的是4个按键控制。 3.先编写界面的横向切换,如下图所示。

    2024年02月16日
    浏览(36)
  • 【STM32】基于STM32F103C8T6的水质检测系统设计(声光报警、多级菜单)

    1.检测参数:水温、TDS、浊度、PH 2.超出阈值声光报警 3.LCD显示目标参数的测量结果 4.测量模式:单参数测量、所有参数表同时测量 切换方式:按键切换 单总线技术 单总线技术采用单根信号线实现时钟、数据的传输,且数据的传输是双向的,能够控制一个或多个从机设备。主

    2024年02月01日
    浏览(43)
  • 标准库 STM32+EC11编码器+I2C ssd1306多级菜单例程

    📌原创项目来源于: https://github.com/AdamLoong/Embedded_Menu_Simple 📍相关功能演示观看: https://space.bilibili.com/74495335 单片机多级菜单v1.2 👉本次采用的是原作者(Adam)《单片机多级菜单框架v1.8》基础上修改适配包含中键按键的EC11编码器。 📍原作者网盘项目共享资料: ✨原作者

    2024年02月19日
    浏览(47)
  • stm32-OLED屏+RTC实现简易实时时钟(下篇)

    一、RTC简介 实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可 提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒 后,R

    2024年01月18日
    浏览(46)
  • stm32-OLED屏+RTC实现简易实时时钟(上篇)

    oled屏选择ssd1306,使用RTC实现简易实时时钟 1、MCU接口选择 SSD1306单片机接口由8个数据引脚和5个控制引脚组成。通过BS[2:0]引脚上的硬件选择可以设置不同的MCU模式    通过控制BS[2:0]引脚可以设置MCU与OLED屏的通信方式。因为我使用的是正点原子的开发板,所以我用了适配的接

    2024年01月17日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包