目录
一、效果展示(按键控制界面切换)
二、编程模板
1.头文件
2.库文件
三、编程思路
四、使用说明
一、效果展示(按键控制界面切换)
OLED三级界面效果展示
二、编程模板
1.头文件
#ifndef __INTERFACE_H
#define __INTERFACE_H
#include "stm32f10x.h"
//任务的状态位
#define RUN 1
#define STOP 0
//任务宏
#define Task1 Temp_Task
#define Task2 Light_Task
//界面穷举
typedef enum
{
Main_Interface = 0x10, //主界面
Menu_Interface = 0x20, //菜单界面
Task_Interface = 0x30, //任务界面
}Interface;
//任务穷举
typedef enum
{
Task1 = 0x10, //任务1显示界面
Task2 = 0x20, //任务2显示界面
}Task;
typedef struct
{
uint8_t Interface; //界面选择位
uint8_t Task_Mark; //任务选择位
uint8_t Task; //任务运行启停位
}Mark;
void point(Mark *Mark_Sign);
void Mark_config(Mark *Mark_Sign);
void interface_show(Mark *Mark_Sign);
void interface_switch(Mark *Mark_Sign);
void interface_menu(Mark *Mark_Sign);
void interface_main(void);
void interface_temp(void);
void interface_light(void);
#endif /*__INTERFACE_H*/
2.库文件
#include "interface.h"
#include "key.h"
void Mark_config(Mark *Mark_Sign)
{
Mark_Sign->Interface = Main_Interface; //界面选择位
Mark_Sign->Task = Task1; //任务选择位
Mark_Sign->Task_Mark = STOP; //任务运行启停位
}
//显示界面内容
void interface_show(Mark *Mark_Sign)
{
switch(Mark_Sign->Interface )
{
case Main_Interface:
interface_main();//显示主界面
break;
case Menu_Interface:
interface_menu(Mark_Sign);//显示菜单界面
break;
case Task_Interface:
{
//显示任务界面
if(Mark_Sign->Task == Task1)
interface_temp();//显示任务1界面
else if(Mark_Sign->Task == Task2)
interface_light();//显示任务2界面
break;
}
default:
break;
}
}
//控制界面和任务
void interface_switch(Mark *Mark_Sign)
{
//界面的切换
if(KEY_2_Scan()==1)
{
OLED_Clear();
switch(Mark_Sign->Interface)
{
case Main_Interface:
Mark_Sign->Interface = Menu_Interface;
break;
case Menu_Interface:
{
Mark_Sign->Interface = Task_Interface;
break;
}
case Task_Interface: Mark_Sign ->Task_Mark = RUN; break;
default: break;
}
}
if(KEY_0_Scan()==1)
{
OLED_Clear();
switch(Mark_Sign->Interface)
{
case Menu_Interface:
{
Mark_Sign->Interface = Main_Interface;
break;
}
case Task_Interface:
{
Mark_Sign->Task_Mark = STOP;
Mark_Sign->Interface = Menu_Interface;
break;
}
default: break;
}
}
//菜单界面的任务选择
if(Mark_Sign->Interface == Menu_Interface)
{
//向上选择
if(KEY_1_Scan()==1)
{
OLED_Clear();
switch(Mark_Sign->Task)
{
case Task1: break;
case Task2: Mark_Sign->Task = Task1;break;
default: break;
}
}
//向下选择
if(KEY_3_Scan()==1)
{
OLED_Clear();
switch(Mark_Sign->Task)
{
case Task1: Mark_Sign->Task = Task2; break;
case Task2: break;
default: break;
}
}
}
}
//以下函数为OLED显示
//菜单索引
void point(Mark *Mark_Sign)
{
if(Mark_Sign->Task==Task1)
OLED_ShowString(90,16,"<-",16,1);//<-
else if(Mark_Sign->Task==Task2)
OLED_ShowString(90,32,"<-",16,1);//<-
}
//菜单界面
void interface_menu(Mark *Mark_Sign)
{
//显示内容可自行编辑
}
//主界面
void interface_main(void)
{
}
//温度界面
void interface_temp(void)
{
}
//亮度界面
void interface_light(void)
{
}
三、编程思路
1.先填充好每一个要显示的界面,确保界面显示没问题。
2.确保条件能触发,我这里选择的是4个按键控制。
3.先编写界面的横向切换,如下图所示。
4.再变写菜单里纵向的任务选择,并搭配上索引。
四、使用说明
我的模板是仿照STM32标准库写的,所以使用前要先初始化。文章来源:https://www.toymoban.com/news/detail-604107.html
使用的时候把界面内容填充一下,任务宏改一下就可以了。文章来源地址https://www.toymoban.com/news/detail-604107.html
#include "stm32f10x_conf.h"
int main(void)
{
Mark interface_mark;
KEY_Init(); //初始化按键
delay_init();//初始化延时函数
OLED_Init(); //oled屏幕初始化
OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
Mark_config(&interface_mark);//记录位结构体初始化
while(1)
{
interface_show(&interface_mark);
interface_switch(&interface_mark);
}
}
到了这里,关于STM32OLED呈现主界面菜单任务的编程思路以及模板的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!