找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 25500|回复: 56
打印 上一主题 下一主题
收起左侧

基于STM32之OLED菜单界面框架搭建

  [复制链接]
跳转到指定楼层
楼主
基于STM32驱动OLED屏显示三级菜单界面框架搭建
个人总结的一些经验,写的不好勿喷。
  • 硬件要求
    (1)处理器:STM32F103系列。
    (2)OLED屏,SPI或IIC接口都可以。
    (3)按键,用于控制界面的切换。
一个基本的菜单界面最少有有一个主界,所以所有先设计一个主界面。
1.什么是主界面?
/******** 这里说的主界面是本次需要设计的主界面 ********/
主界面是电路上电程序启动完成后屏幕显示的第一个界面,就是主界面。
主界面根据自己的爱好来设计,比如:

界面中的图形和文字可自己设计,这里我设计的就如上图所示。
主界面设计好后,那么根据自己的需求来添加多级界面。
我这里就设计了三级菜单界面。


好,那么对应的界面做好后,就是如何控制界面之间的切换。
  1. /*********************************************
  2. * 创建一个结构体
  3. * 存放界面标志位
  4. */
  5. typedef struct
  6. {
  7.     u8 Interface_Mark;     //界面状态
  8.     u8 Task_Mark;          //任务状态
  9.     u8 Run_Task;           //开始运行任务
  10. } Mark;
  11. Mark Mark_Sign;//状态标志位

  12. /*********************************************
  13. * 创建一个枚举
  14. * 存放界面变量
  15. */
  16. enum
  17. {
  18.     Main_Interface = 0x10, /****主界面*****/
  19.     Menu_Interface = 0x20, /****菜单界面***/
  20.     Task_Interface = 0x30, /****任务界面***/
  21. };
  22. /*******************************************/
  23. switch(Mark_Sign.Interface_Mark)
  24. {
  25.         //状态标志位 主界面
  26.         case Main_Interface:
  27.             Main_Interface_APP();//显示主界面
  28.     break;

  29.         //状态标志位 菜单界面
  30.         case Menu_Interface:
  31.             Menu_Interface_APP();//显示菜单界面
  32.     break;

  33.         //状态标志位 任务界面
  34.         case Task_Interface:
  35.                     Function_Menu_APP();//显示功能界面
  36.     break;
  37. default:
  38.     break;

复制代码

上面这段代码用来判断是三级中哪一级界面。
里面创建了一个结构体,通过改变结构体里面的一个标志位来控制三级界面之间的切换。

那么就要用到按键来改变标志位的值,这里我采用了外部中断来控制。


  1. <font color="rgb(79, 79, 79)"><font face="-apple-system, &quot;"><font style="font-size: 16px">/*************左摇杆按键*****菜单 确认按键**********************/
  2.     if(DISABLE == KEY_Rocker_Left)
  3.     {
  4.         //当按下菜单键时,判断当前界面
  5.         /************判断当前界面为主界面***********************/
  6.         if(Main_Interface == Mark_Sign.Interface_Mark)
  7.         {
  8.             /**************进入菜单界面*************/
  9.             Mark_Sign.Interface_Mark = Menu_Interface;
  10.         }
  11.         /************判断当前界面为菜单界面*******************/
  12.         else if(Menu_Interface == Mark_Sign.Interface_Mark)
  13.         {
  14.             /***************进入任务界面************/
  15.             Mark_Sign.Interface_Mark = Task_Interface;

  16.             /**************进入指定的功能任务*******/
  17.             switch(Mark_Sign.Task_Mark)
  18.             {
  19.             /**************开始运行2.4G任务*******/
  20.             case NRF24L01_Task:
  21.                 Mark_Sign.Run_Task = NRF24L01_Task;
  22.                 break;
  23.             /**************开始运行蓝牙任务*******/
  24.             case Bluetooth_Task:
  25.                 Mark_Sign.Run_Task = Bluetooth_Task;
  26.                 break;
  27.             /**************开始运行WIFI任务*******/
  28.             case WIFI_Task:
  29.                 Mark_Sign.Run_Task = WIFI_Task;
  30.                 break;
  31.             /**************开始运行USB任务*******/
  32.             case USB_Task:
  33.                 Mark_Sign.Run_Task = USB_Task;
  34.                 break;
  35.             /**************开始运行设置任务*******/
  36.             case Set_Task:
  37.                 Mark_Sign.Run_Task = Set_Task;
  38.                 break;
  39.             default:
  40.                 break;
  41.             }
  42.         }
  43.         /************判断当前界面为任务界面******************/
  44.         else if(Task_Interface == Mark_Sign.Interface_Mark)
  45.         {
  46.             /*******判断当前正在运行的任务*******/
  47.             switch(Mark_Sign.Run_Task)
  48.             {
  49.             /*当前正在运行 2.4G任务*/
  50.             case NRF24L01_Task:

  51.                 break;
  52.             /*当前正在运行 2.4G任务*/
  53.             case Bluetooth_Task:

  54.                 break;
  55.             /*当前正在运行 2.4G任务*/
  56.             case WIFI_Task:

  57.                 break;
  58.             /*当前正在运行 2.4G任务*/
  59.             case USB_Task:

  60.                 break;
  61.             /*当前正在运行 2.4G任务*/
  62.             case Set_Task:
  63.             
  64.                 break;
  65.             default:
  66.                 break;
  67.             }
  68.         }
  69.     }
  70. </font></font></font>
复制代码

上面这段代功能


  1. <font color="rgb(79, 79, 79)"><font face="-apple-system, &quot;"><font style="font-size: 16px">/*
  2. * 1,检测当前按下的按键为确认键
  3. * 2,检测当前的界面
  4. *                (1)如果是主界面,则进入菜单界面
  5. *                (2)如果是菜单界面,则进入任务界面
  6. *                (3)如果是任务界面,则开执行被选中的任务
  7. */
  8. </font></font></font>
复制代码

那么可以从主界面进入,那怎么退出呢?
同样这里采用外部中断来控制


  1. <font color="rgb(79, 79, 79)"><font face="-apple-system, &quot;"><font style="font-size: 16px">/****************右摇杆按键****返回按键*************************/
  2.     if(DISABLE == KEY_Rocker_Right)
  3.     {
  4.         //当按下返回键时,判断当前界面
  5.         /************判断当前界面为菜单界面*******************/
  6.         if(Menu_Interface == Mark_Sign.Interface_Mark)
  7.         {
  8.             /*******退出菜单界面***进入主界面**/
  9.             Mark_Sign.Interface_Mark = Main_Interface;
  10.         }
  11.         /************判断当前界面为任务界面******************/
  12.         else if(Task_Interface == Mark_Sign.Interface_Mark)
  13.         {
  14.             /***退出正在运行的任务***/
  15.             Mark_Sign.Run_Task = Stop;
  16.             /*******退出任务界面*****/
  17.             Mark_Sign.Interface_Mark = Menu_Interface;
  18.         }

  19. </font></font></font>
复制代码

上面这段代码的功能

  1. <font color="rgb(79, 79, 79)"><font face="-apple-system, &quot;"><font style="font-size: 16px">/*
  2. * 1,检测当前按下的按键为返回键
  3. * 2,检测当前的界面
  4. *             (1)如果是任务界面,则停止正在运行的任务,返回到菜单界面
  5. *             (2)如果是菜单界面,则返回到主界面
  6. */</font></font></font>
复制代码



通过确认按键控制从主界面到菜单界面到任务界面的切换。
通过返回按键控制从任务界面到菜单界面到主界面的切换。

以上就是菜单界面的内容,不管你是小白还是正在学习STM32的你,根据这套框架你一样可以写出霸气的菜单界面,如果你们还有更好的写法,欢迎一起讨论。





IMG_20181001_141038.jpg (2.12 MB, 下载次数: 186)

IMG_20181001_141038.jpg

STM32_OLED_三级菜单框架.rar

397.21 KB, 下载次数: 799, 下载积分: 黑币 -5

评分

参与人数 3黑币 +121 收起 理由
6789364 + 6 很给力!
admin + 100 共享资料的黑币奖励!
杨雪飞 + 15 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏43 分享淘帖 顶6 踩
回复

使用道具 举报

沙发
ID:406408 发表于 2018-10-11 15:58 来自手机 | 只看该作者
学习了
回复

使用道具 举报

板凳
ID:415785 发表于 2018-11-2 16:03 | 只看该作者
学习了,不错!
回复

使用道具 举报

地板
ID:129988 发表于 2018-11-12 00:28 | 只看该作者
最近正在学习OLED,感谢楼主的分享
回复

使用道具 举报

5#
ID:29256 发表于 2018-11-12 15:51 | 只看该作者
多谢分享
回复

使用道具 举报

6#
ID:220020 发表于 2018-11-23 17:08 | 只看该作者
多谢共享
回复

使用道具 举报

7#
ID:157393 发表于 2018-11-24 16:19 | 只看该作者

最近正在学习OLED
回复

使用道具 举报

8#
ID:96310 发表于 2018-12-17 16:35 | 只看该作者
感谢楼主 分享,学习一下
回复

使用道具 举报

9#
ID:128321 发表于 2018-12-17 17:44 | 只看该作者
最近正在学习OLED
回复

使用道具 举报

10#
ID:278145 发表于 2018-12-19 22:47 | 只看该作者
不错,值得学习
回复

使用道具 举报

11#
ID:137086 发表于 2019-2-12 21:18 | 只看该作者
仔细 学习 一下  最近在学习怎么 写一个 菜单 的程序
回复

使用道具 举报

12#
ID:461296 发表于 2019-2-23 13:52 | 只看该作者
学习一下
回复

使用道具 举报

13#
ID:385466 发表于 2019-4-11 16:31 | 只看该作者
666,学习一下
回复

使用道具 举报

14#
ID:385466 发表于 2019-4-12 11:57 | 只看该作者
怎么判断按下的是哪一个按键,DISABLE跳转到了stm32f10x.h了,有点看不懂,请教一下。
回复

使用道具 举报

15#
ID:516199 发表于 2019-5-23 22:23 | 只看该作者
谢谢分享,
回复

使用道具 举报

16#
ID:567848 发表于 2019-6-20 13:44 | 只看该作者
刚好需要,学习一下
回复

使用道具 举报

17#
ID:567848 发表于 2019-6-20 13:46 | 只看该作者
学习一下,刚好需要
回复

使用道具 举报

18#
ID:499409 发表于 2019-7-2 12:03 | 只看该作者
能发一下代码吗1813298696@qqcom
回复

使用道具 举报

19#
ID:55591 发表于 2019-7-12 06:37 | 只看该作者
看着非常不错
回复

使用道具 举报

20#
ID:570493 发表于 2019-7-15 16:59 | 只看该作者
怎么我用IIC模式没显示,是不是我哪没配置好?
回复

使用道具 举报

21#
ID:521623 发表于 2019-7-19 17:13 | 只看该作者
额,那个mini版烧进去程序屏就黑了,咋啥都没有,是不是烧了 啊
回复

使用道具 举报

22#
ID:432611 发表于 2019-7-19 22:04 | 只看该作者
great,学习
回复

使用道具 举报

23#
ID:64765 发表于 2019-7-24 13:30 | 只看该作者
颇有收获,谢了。
回复

使用道具 举报

24#
ID:586039 发表于 2019-7-28 11:53 | 只看该作者
请问是要外接摇杆按键吗,具体要怎么做呢
回复

使用道具 举报

25#
ID:270932 发表于 2019-7-28 15:47 | 只看该作者
正好学习OLED,谢谢楼主资料分享
回复

使用道具 举报

26#
ID:600035 发表于 2019-8-14 12:26 来自手机 | 只看该作者
学习学习
回复

使用道具 举报

27#
ID:602925 发表于 2019-8-29 12:51 | 只看该作者
学习一下
回复

使用道具 举报

28#
ID:302850 发表于 2019-8-30 06:42 来自手机 | 只看该作者
先收藏,感觉肯定会有一天能用上!
回复

使用道具 举报

29#
ID:606788 发表于 2019-9-4 18:04 | 只看该作者
谢谢分享
回复

使用道具 举报

30#
ID:547459 发表于 2019-9-4 21:12 | 只看该作者
学习了
回复

使用道具 举报

31#
ID:610440 发表于 2019-9-11 14:50 | 只看该作者
你好,我最近有一个项目,需要用到stm32 oled屏显示菜单界面的框架,但是不理解框架架构关系,方便加我Q沟通探讨下吗?
回复

使用道具 举报

32#
ID:606788 发表于 2019-9-28 20:01 | 只看该作者
最近正在学习OLED,感谢楼主的分享&#128076;
回复

使用道具 举报

33#
ID:207341 发表于 2019-10-7 15:38 | 只看该作者
我记得下载了
回复

使用道具 举报

34#
ID:58110 发表于 2019-10-8 08:42 | 只看该作者
很棒!谢谢分享!
回复

使用道具 举报

35#
ID:607710 发表于 2019-10-9 11:09 | 只看该作者
这就是算法吗?希望多一些这样的教程
回复

使用道具 举报

36#
ID:606788 发表于 2019-10-10 20:50 | 只看该作者
厉害了  学习下怎么写的
回复

使用道具 举报

37#
ID:581602 发表于 2019-12-14 22:50 | 只看该作者
学习一下,感谢楼主分享。
回复

使用道具 举报

38#
ID:269639 发表于 2019-12-15 22:01 | 只看该作者
真的非常好啊,感谢楼主
回复

使用道具 举报

39#
ID:544005 发表于 2020-1-13 10:52 | 只看该作者
学习了谢谢!!!
回复

使用道具 举报

40#
ID:408363 发表于 2020-2-6 20:44 | 只看该作者
请问2.8寸彩屏能使用吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表