OLED多级菜单记录

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

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

因此本文我决定记录下我在移植oled菜单的一些过程,同时也希望能帮助看到这篇文章的兄弟更快的上手OLED菜单!

1、按键驱动

这里我之前的文章讲到过一款开源的按键工具,这里为了节省代码量,我发现了一个更方便的驱动方式,下面就来介绍下:

1、硬件连接

这里肯定是越简单越好,所以这里就直接接上即可,也不做什么滤波电路了,当然有一个滤波自然是更好的哈哈哈,原理图如下所示:
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
下面是我用手焊的简易版本测试用的
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
可以看下背面就是按照原理图来进行的,如下所示
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu

2、引脚功能配置

下面就是配置引脚模式了,因为这里引脚的另一端默认是接地的,所以我们这里接上IO口的这边就需要提前将其设置为上拉的模式,这样才不会影响我们的按键读取,使得每次都能有效检测到引脚电平的变化。
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
按键的扫面需要我们配置一个周期性的扫描函数,这里我们就有很多可以选择的方案了:

  • 使用freertos建立扫描任务
  • 裸机使用while循环来实现
  • 使用定时器来实现周期性扫描

这里考虑到本身只是个测试用的demo工程,就不搞系统了,直接裸机,为了移植上的方便性,我这里也就使用定时器来生成了,这里我们配置定时器6来实现功能,配置如下:
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu

3、程序设置

这里我们开始来配置程序,这里我对关键部门来做一下说明,说明如下:

首先是对我们按键读取做一个宏,这样方便我们进行后续的操作
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
扫描函数说明如下,主要是使用改方案可以很好的实现按键检测
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
在定时器中检查扫描函数
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
综上我们就可以实现按键的检测工作了,实测效果还是不错的,可以自行验证。源码如下:

void KeyScan(void)
{
    static int keyCount = 0;
    static int keyState = 0;
    if (KEY_UP == 0 && keyState == 0) 
    {
        keyCount++;
        if (keyCount > 2 && KEY_UP == 0 && keyState == 0) 
        {
        	KeyUp();
            keyState = 1;
        }
    }
    else if (KEY_DOWN == 0 && keyState == 0)
    {
        keyCount++;
        if (keyCount > 2 && KEY_DOWN == 0 && keyState == 0)
        {
        	KeyDown();
            keyState = 1;
        }
    }
    else if (KEY_LEFT == 0 && keyState == 0)
    {
        keyCount++;
        if (keyCount > 2 && KEY_LEFT == 0 && keyState == 0)
        {
        	KeyLeft();
            keyState = 1;
        }
    }
    else if (KEY_RIGHT == 0 && keyState == 0)
    {
        keyCount++;
        if (keyCount > 2 && KEY_RIGHT == 0 && keyState == 0)
        {
        	KeyRight();
            keyState = 1;
        }
    }
    else if (KEY_ON == 0 && keyState == 0)
    {
        keyCount++;
        if (keyCount > 2 && KEY_ON == 0 && keyState == 0)
        {
        	KeyOk();
            keyState = 1;
        }
    }
    else if (KEY_OFF == 0 && keyState == 0)
    {
        keyCount++;
        if (keyCount > 2 && KEY_OFF == 0 && keyState == 0)
        {
            keyState = 1;
        }
    }
	else if (KEY_UP == 1 && KEY_DOWN == 1 && KEY_LEFT == 1 && KEY_RIGHT == 1 && keyState == 1) 
    {
        keyCount = 0;
        keyState = 0;
    }
}

2、oled驱动

oled驱动可以见我之前的博客,这里不在进行介绍,之前有介绍过SPI还有IIC版本的,也都介绍了使用软件还有硬件的方式进行驱动,软件驱动的话就可以比较方便的进行其他型号单片机的移植了,下面是相关博客的链接,可以自行查阅:

SPI驱动:SPI写OLED(软硬件切换)

IIC驱动:stm32配置总结-iic的使用

3、菜单移植

1、菜单的思路

之前在网上也看到很多大佬讲过oled菜单,但是根绝实现起来都不太方便,最简单的肯定就是自己写好页面然后刷新,使用按键这样一个个的函数进行跳转,感觉这样就很麻烦了,不推荐使用这样的方式,如果菜单比较简单就还好,菜单一旦复杂就不行了,那也太难搞了!

所以这里我移植了另一位大佬的方案,感觉还是很不错的,感谢这位大佬,源地址如下:https://gitee.com/snqx-lqh/screen-design-using-gui/tree/master/2%E3%80%81STM32C8T6+IIC+OLED0.96GUI%E8%AE%BE%E8%AE%A1

首先我们看下菜单结构体,每个菜单结构体包含了菜单页的一些参数,说明如下:

  • 菜单个数
  • 滚动条长度(就是比如如果选用16的字体的话,一页最多显示四行,这样长度0,因为不需要滚动,如果需要显示大于4行,比如5行,这样菜单就需要滚动一下才能看到下面的一行,这样滚动条长度就是1了。
  • 菜单的名称等
  • 菜单的功能函数
  • 父级菜单
  • 子菜单

其实这里比较重要的就还是父级菜单和子菜单,使用他们我们就可以进行菜单之间的跳转了!
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu

2、菜单程序设计

上面介绍了菜单的思路,下面就可以看看菜单是怎么生成的了,不过在这之前可以看下作者设计的封面,封面显示如下所示:
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
可以看下程序上的设置:
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
这里时间上是使用了一个定时器来执行的,然后通过参数结构体进行更新,其中年月日的更新也在定时器中来执行,下面就可以看下菜单的定义了。主要是看子菜单和父级菜单的定义。
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
下面看给菜单添加的内容描述,这里如果我们后续要使用中文的话后面的显示函数也需要做相应的修改,所以这里为了整个过程显得不繁琐,就还是英文字符吧
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
下面是我之前说的滑动窗口的定义了
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
下面是箭头的刷新函数指示
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
效果如下:
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
下面是对于内部的定义的一些变量的刷新
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
子菜单的内部变量刷新效果如下所示:
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
之后就是把刚才定义的内容加入进去了
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
最后就是按键控制函数了,主要是一些逻辑上的选择,这里注意就是每次对索引值进行一次操作之后要刷新屏幕
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
在主函数中加入初始化还有刷新函数
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu
最终效果如下所示:
oled 菜单,单片机学习记录,嵌入式硬件,stm32,arm,单片机,mcu文章来源地址https://www.toymoban.com/news/detail-782317.html

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

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

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

相关文章

  • 简易oled多级菜单实现

      最近在学习如何实现oled多级菜单时,查看了大多数博主发的文章,大概似懂的文章内容可让我好一阵思考,于是我觉得应该有一篇更加简单易懂的文章能轻易上手;我们实现项目时一定先要准备以下知识点:1. 结构体 2.结构体数组 3.函数指针 (如果还有没有这方面的C语言

    2024年02月05日
    浏览(66)
  • STM32单片机(四)第二节:OLED显示屏

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月16日
    浏览(49)
  • STC单片机DS1307+ssd1306 oled时钟显示

    📌相关篇《STC单片机DS1302+ssd1306 oled时钟显示》 📍《STC单片机对DS1307读写操作》 ✨效果演示: 🌿实验对象:STC12C5A60S2 🌿屏幕型号:I2C ssd1306 0.96“ oled 🌿晶振频率:11.059MHz 🌿串口波特率:9600 📜串口打印读取信息: 🛠引脚说明 ✨由于屏幕接口ssd1306 0.96“ oled和DS1307的接

    2023年04月09日
    浏览(52)
  • STM32单片机初学5-IIC通信驱动OLED屏幕

    在我上篇文章(STM32-软件模拟IIC通信)讲解了软件模拟IIC通信。这篇文章详将细讲解利用软件模拟IIC来控制0.96寸的OLED屏幕(如下图),使其显示字符串。本文将不再对IIC通信原理做详细讲解,所以对IIC通信原理不熟悉的话可以参考我上篇文章(点击上面的链接直接跳转)。

    2023年04月10日
    浏览(55)
  • STM32_OLED多级菜单

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

    2024年02月11日
    浏览(49)
  • STM32+OLED屏多级菜单显示(三)

            前面两章实现了OLED屏幕显示的基本功能,这一章就做一个多级菜单显示功能         单片机选择STM32F103C8T6最小系统板,OLED屏选择0.96寸OLED显示器,除了单片机和OLED屏之外,还需要三个按键(下一位键、确认键和返回键),当然一个按键也可以(单击、双击和长击

    2024年02月03日
    浏览(39)
  • 单片机设计:基于stm32蓝牙音响(mp3模块+喇叭+点阵屏+OLED+蓝牙+手机app)

    单片机设计:基于stm32蓝牙音响(mp3模块+喇叭+点阵屏+OLED+蓝牙+手机app) 一、主要功能: 1.手机app播放内存卡的音乐、同时点阵屏随音乐进行跳动 2.0LED、手机app显示当前音量以及当前状态 3.手机app远程调节音量阈值,可以切换上一首、下一首,音乐播放结束后自动下一首      当

    2024年02月10日
    浏览(72)
  • 基于STM32的OLED多级菜单GUI实现(简化版智能手表)

             前言: 本文的 OLED多级菜单UI 为一个 综合性 的STM32 小项目 ,使用 多传感器 与 OLED显示屏 实现 智能终端 的效果。项目中的多级菜单UI使用了较为常见的 结构体索引法 去实现功能与功能之间的来回切换,搭配 DHT11,RTC,LED,KEY 等器件实现高度智能化一体化操作

    2024年02月03日
    浏览(43)
  • 单片机设计_室内环境智能监测系统(STM32 OLED ESP8266 DHT11 MQ-2 加湿器)

    想要更多项目私wo!!! 室内环境智能监测系统 主要功能:         1.检测空气温湿度         2.检测光照强度         3.检测烟雾浓度         4.数据显示在手机端和设备OLED屏幕上         5.当空气温度高于设定的阈值时,风扇开启         6.当空气湿度低于

    2024年02月09日
    浏览(68)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包