标题: 基于STM32之OLED菜单界面框架搭建 [打印本页]
作者: xiaolibo 时间: 2018-10-3 21:41
标题: 基于STM32之OLED菜单界面框架搭建
基于STM32驱动OLED屏显示三级菜单界面框架搭建
个人总结的一些经验,写的不好勿喷。
- 硬件要求
(1)处理器:STM32F103系列。
(2)OLED屏,SPI或IIC接口都可以。
(3)按键,用于控制界面的切换。
一个基本的菜单界面最少有有一个主界,所以所有先设计一个主界面。
1.什么是主界面?
/******** 这里说的主界面是本次需要设计的主界面 ********/
主界面是电路上电程序启动完成后屏幕显示的第一个界面,就是主界面。
主界面根据自己的爱好来设计,比如:
界面中的图形和文字可自己设计,这里我设计的就如上图所示。
主界面设计好后,那么根据自己的需求来添加多级界面。
我这里就设计了三级菜单界面。
好,那么对应的界面做好后,就是如何控制界面之间的切换。- /*********************************************
- * 创建一个结构体
- * 存放界面标志位
- */
- typedef struct
- {
- u8 Interface_Mark; //界面状态
- u8 Task_Mark; //任务状态
- u8 Run_Task; //开始运行任务
- } Mark;
- Mark Mark_Sign;//状态标志位
- /*********************************************
- * 创建一个枚举
- * 存放界面变量
- */
- enum
- {
- Main_Interface = 0x10, /****主界面*****/
- Menu_Interface = 0x20, /****菜单界面***/
- Task_Interface = 0x30, /****任务界面***/
- };
- /*******************************************/
- switch(Mark_Sign.Interface_Mark)
- {
- //状态标志位 主界面
- case Main_Interface:
- Main_Interface_APP();//显示主界面
- break;
- //状态标志位 菜单界面
- case Menu_Interface:
- Menu_Interface_APP();//显示菜单界面
- break;
- //状态标志位 任务界面
- case Task_Interface:
- Function_Menu_APP();//显示功能界面
- break;
- default:
- break;
-
复制代码
上面这段代码用来判断是三级中哪一级界面。
里面创建了一个结构体,通过改变结构体里面的一个标志位来控制三级界面之间的切换。
那么就要用到按键来改变标志位的值,这里我采用了外部中断来控制。
- <font color="rgb(79, 79, 79)"><font face="-apple-system, ""><font style="font-size: 16px">/*************左摇杆按键*****菜单 确认按键**********************/
- if(DISABLE == KEY_Rocker_Left)
- {
- //当按下菜单键时,判断当前界面
- /************判断当前界面为主界面***********************/
- if(Main_Interface == Mark_Sign.Interface_Mark)
- {
- /**************进入菜单界面*************/
- Mark_Sign.Interface_Mark = Menu_Interface;
- }
- /************判断当前界面为菜单界面*******************/
- else if(Menu_Interface == Mark_Sign.Interface_Mark)
- {
- /***************进入任务界面************/
- Mark_Sign.Interface_Mark = Task_Interface;
- /**************进入指定的功能任务*******/
- switch(Mark_Sign.Task_Mark)
- {
- /**************开始运行2.4G任务*******/
- case NRF24L01_Task:
- Mark_Sign.Run_Task = NRF24L01_Task;
- break;
- /**************开始运行蓝牙任务*******/
- case Bluetooth_Task:
- Mark_Sign.Run_Task = Bluetooth_Task;
- break;
- /**************开始运行WIFI任务*******/
- case WIFI_Task:
- Mark_Sign.Run_Task = WIFI_Task;
- break;
- /**************开始运行USB任务*******/
- case USB_Task:
- Mark_Sign.Run_Task = USB_Task;
- break;
- /**************开始运行设置任务*******/
- case Set_Task:
- Mark_Sign.Run_Task = Set_Task;
- break;
- default:
- break;
- }
- }
- /************判断当前界面为任务界面******************/
- else if(Task_Interface == Mark_Sign.Interface_Mark)
- {
- /*******判断当前正在运行的任务*******/
- switch(Mark_Sign.Run_Task)
- {
- /*当前正在运行 2.4G任务*/
- case NRF24L01_Task:
- break;
- /*当前正在运行 2.4G任务*/
- case Bluetooth_Task:
- break;
- /*当前正在运行 2.4G任务*/
- case WIFI_Task:
- break;
- /*当前正在运行 2.4G任务*/
- case USB_Task:
- break;
- /*当前正在运行 2.4G任务*/
- case Set_Task:
-
- break;
- default:
- break;
- }
- }
- }
- </font></font></font>
复制代码
上面这段代功能
- <font color="rgb(79, 79, 79)"><font face="-apple-system, ""><font style="font-size: 16px">/*
- * 1,检测当前按下的按键为确认键
- * 2,检测当前的界面
- * (1)如果是主界面,则进入菜单界面
- * (2)如果是菜单界面,则进入任务界面
- * (3)如果是任务界面,则开执行被选中的任务
- */
- </font></font></font>
复制代码
那么可以从主界面进入,那怎么退出呢?
同样这里采用外部中断来控制
- <font color="rgb(79, 79, 79)"><font face="-apple-system, ""><font style="font-size: 16px">/****************右摇杆按键****返回按键*************************/
- if(DISABLE == KEY_Rocker_Right)
- {
- //当按下返回键时,判断当前界面
- /************判断当前界面为菜单界面*******************/
- if(Menu_Interface == Mark_Sign.Interface_Mark)
- {
- /*******退出菜单界面***进入主界面**/
- Mark_Sign.Interface_Mark = Main_Interface;
- }
- /************判断当前界面为任务界面******************/
- else if(Task_Interface == Mark_Sign.Interface_Mark)
- {
- /***退出正在运行的任务***/
- Mark_Sign.Run_Task = Stop;
- /*******退出任务界面*****/
- Mark_Sign.Interface_Mark = Menu_Interface;
- }
- </font></font></font>
复制代码
上面这段代码的功能
- <font color="rgb(79, 79, 79)"><font face="-apple-system, ""><font style="font-size: 16px">/*
- * 1,检测当前按下的按键为返回键
- * 2,检测当前的界面
- * (1)如果是任务界面,则停止正在运行的任务,返回到菜单界面
- * (2)如果是菜单界面,则返回到主界面
- */</font></font></font>
复制代码
好
通过确认按键控制从主界面到菜单界面到任务界面的切换。
通过返回按键控制从任务界面到菜单界面到主界面的切换。
以上就是菜单界面的内容,不管你是小白还是正在学习STM32的你,根据这套框架你一样可以写出霸气的菜单界面,如果你们还有更好的写法,欢迎一起讨论。
-
IMG_20181001_141038.jpg
(2.12 MB, 下载次数: 186)
-
-
STM32_OLED_三级菜单框架.rar
397.21 KB, 下载次数: 799, 下载积分: 黑币 -5
作者: ebingyu 时间: 2018-10-11 15:58
学习了
作者: cxy760307 时间: 2018-11-2 16:03
学习了,不错!
作者: 雨落冰心 时间: 2018-11-12 00:28
最近正在学习OLED,感谢楼主的分享
作者: j182010 时间: 2018-11-12 15:51
多谢分享
作者: 阳ing 时间: 2018-11-23 17:08
多谢共享






作者: gl542400 时间: 2018-11-24 16:19
最近正在学习OLED
作者: quanhengwen 时间: 2018-12-17 16:35
感谢楼主 分享,学习一下
作者: yjwpm 时间: 2018-12-17 17:44
最近正在学习OLED
作者: tonyhy1975 时间: 2018-12-19 22:47
不错,值得学习
作者: 2262744322 时间: 2019-2-12 21:18
仔细 学习 一下 最近在学习怎么 写一个 菜单 的程序
作者: qq286907986 时间: 2019-2-23 13:52
学习一下
作者: 1843 时间: 2019-4-11 16:31
666,学习一下
作者: 1843 时间: 2019-4-12 11:57
怎么判断按下的是哪一个按键,DISABLE跳转到了stm32f10x.h了,有点看不懂,请教一下。
作者: bohe 时间: 2019-5-23 22:23
谢谢分享,
作者: 111aou 时间: 2019-6-20 13:44
刚好需要,学习一下
作者: 111aou 时间: 2019-6-20 13:46
学习一下,刚好需要
作者: 1813298696 时间: 2019-7-2 12:03
能发一下代码吗1813298696@qqcom
作者: 右走 时间: 2019-7-12 06:37
看着非常不错
作者: 1245303587 时间: 2019-7-15 16:59
怎么我用IIC模式没显示,是不是我哪没配置好?
作者: 木易呐 时间: 2019-7-19 17:13
额,那个mini版烧进去程序屏就黑了,咋啥都没有,是不是烧了 啊
作者: lyw98 时间: 2019-7-19 22:04
great,学习
作者: lyl_420819 时间: 2019-7-24 13:30
颇有收获,谢了。
作者: 有梦即远方 时间: 2019-7-28 11:53
请问是要外接摇杆按键吗,具体要怎么做呢
作者: ww1647346515 时间: 2019-7-28 15:47
正好学习OLED,谢谢楼主资料分享
作者: w296532983 时间: 2019-8-14 12:26
学习学习
作者: sunjixiangok 时间: 2019-8-29 12:51
学习一下
作者: prettytank 时间: 2019-8-30 06:42
先收藏,感觉肯定会有一天能用上!
作者: yupengwei 时间: 2019-9-4 18:04
谢谢分享
作者: mayorma 时间: 2019-9-4 21:12
学习了
作者: yupengcheng 时间: 2019-9-11 14:50
你好,我最近有一个项目,需要用到stm32 oled屏显示菜单界面的框架,但是不理解框架架构关系,方便加我Q沟通探讨下吗?
作者: yupengwei 时间: 2019-9-28 20:01
最近正在学习OLED,感谢楼主的分享👌
作者: renjianbo 时间: 2019-10-7 15:38
我记得下载了
作者: lyMarvin 时间: 2019-10-8 08:42
很棒!谢谢分享!
作者: 完完全全 时间: 2019-10-9 11:09
这就是算法吗?希望多一些这样的教程
作者: yupengwei 时间: 2019-10-10 20:50
厉害了 学习下怎么写的
作者: w1685188403 时间: 2019-12-14 22:50
学习一下,感谢楼主分享。
作者: wyy19970316 时间: 2019-12-15 22:01
真的非常好啊,感谢楼主
作者: ben0148 时间: 2020-1-13 10:52
学习了谢谢!!!
作者: phy123 时间: 2020-2-6 20:44
请问2.8寸彩屏能使用吗
作者: guangshi_wq 时间: 2020-2-8 22:36
这个三级菜单写的好,说明很详细.值得学习
作者: 1342732985 时间: 2020-3-13 12:13
有代码吗?
作者: 1342732985 时间: 2020-3-13 12:14
能给我发下代码吗?1342732985@qq.com
作者: kanwoe 时间: 2020-3-13 13:08
这个资料相当给力,多谢分享!
作者: 小刀hait 时间: 2020-3-14 11:07
学习了,我也试试
作者: quicklee 时间: 2020-3-15 14:44
日常学习
作者: waerdeng 时间: 2020-3-15 21:37
学习12864,感谢楼主的分享,希望能学会
作者: xda 时间: 2020-3-23 23:39
在读完代码以后专程回来回复!不错的资源,有很多值得学习的地方!!!
作者: billaj 时间: 2020-3-24 10:40
虽然我暂不需要,但看了下回复,好多人说解说的很好,所以先留个言作个MARK,日后有需要再来学习学习,感谢楼主分享
作者: quicklee 时间: 2020-3-25 15:48
楼主的范例不错。学习了
作者: 1342732985 时间: 2020-4-1 11:34
下载之后怎么编译?
作者: zhangkaiy1220 时间: 2020-4-14 09:14
不错的贴子
作者: xda 时间: 2020-4-19 11:37
问个问题,代码里面的#define Page(ARE) (ARE/2+1)这个是干啥的呢,跳转过去找不到相关的
作者: 云梦空间 时间: 2020-5-12 19:40
感谢楼主的分享,很实用
作者: andyliu82 时间: 2021-1-18 17:57
看上去挺好的,完整工程,程序段全!
作者: @陌途 时间: 2021-4-6 11:06
资料不错,DIY小玩意正好用得上
作者: zyluglugl 时间: 2023-3-24 13:21
多谢分享,下载下来学习一下。
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |