
原文:https://blog.csdn.net/qq_38178899/
1、硬件要求
(1)处理器:STM32F103系列。
(2)OLED屏,SPI或IIC接口都可以。
(3)按键,用于控制界面的切换。
一个基本的菜单界面最少有有一个主界,所以所有先设计一个主界面。
2、什么是主界面?
这里说的主界面是本次需要设计的主界面。主界面是电路上电程序启动完成后屏幕显示的第一个界面,就是主界面。
主界面根据自己的爱好来设计,比如:
界面中的图形和文字可自己设计,这里我设计的就如上图所示。
主界面设计好后,那么根据自己的需求来添加多级界面。
我这里就设计了三级菜单界面。
好,那么对应的界面做好后,就是如何控制界面之间的切换。
/*********************************************
*创建一个结构体
*存放界面标志位
*/
typedefstruct
{
u8Interface_Mark;//界面状态
u8Task_Mark;//任务状态
u8Run_Task;//开始运行任务
}Mark;
MarkMark_Sign;//状态标志位
/*********************************************
*创建一个枚举
*存放界面变量
*/
enum
{
Main_Interface=0x10,/****主界面*****/
Menu_Interface=0x20,/****菜单界面***/
Task_Interface=0x30,/****任务界面***/
};
/*******************************************/
switch(Mark_Sign.Interface_Mark)
{
//状态标志位主界面
caseMain_Interface:
Main_Interface_APP();//显示主界面
break;
//状态标志位菜单界面
caseMenu_Interface:
Menu_Interface_APP();//显示菜单界面
break;
//状态标志位任务界面
caseTask_Interface:
Function_Menu_APP();//显示功能界面
break;
default:
break;
}
上面这段代码用来判断是三级中哪一级界面。
里面创建了一个结构体,通过改变结构体里面的一个标志位来控制三级界面之间的切换。
那么就要用到按键来改变标志位的值,这里我采用了外部中断来控制。
/*************左摇杆按键*****菜单确认按键**********************/
if(DISABLE==KEY_Rocker_Left)
{
//当按下菜单键时,判断当前界面
/************判断当前界面为主界面***********************/
if(Main_Interface==Mark_Sign.Interface_Mark)
{
/**************进入菜单界面*************/
Mark_Sign.Interface_Mark=Menu_Interface;
}
/************判断当前界面为菜单界面*******************/
elseif(Menu_Interface==Mark_Sign.Interface_Mark)
{
/***************进入任务界面************/
Mark_Sign.Interface_Mark=Task_Interface;
/**************进入指定的功能任务*******/
switch(Mark_Sign.Task_Mark)
{
/**************开始运行2.4G任务*******/
caseNRF24L01_Task:
Mark_Sign.Run_Task=NRF24L01_Task;
break;
/**************开始运行蓝牙任务*******/
caseBluetooth_Task:
Mark_Sign.Run_Task=Bluetooth_Task;
break;
/**************开始运行WIFI任务*******/
caseWIFI_Task:
Mark_Sign.Run_Task=WIFI_Task;
break;
/**************开始运行USB任务*******/
caseUSB_Task:
Mark_Sign.Run_Task=USB_Task;
break;
/**************开始运行设置任务*******/
caseSet_Task:
Mark_Sign.Run_Task=Set_Task;
break;
default:
break;
}
}
/************判断当前界面为任务界面******************/
elseif(Task_Interface==Mark_Sign.Interface_Mark)
{
/*******判断当前正在运行的任务*******/
switch(Mark_Sign.Run_Task)
{
/*当前正在运行2.4G任务*/
caseNRF24L01_Task:
break;
/*当前正在运行2.4G任务*/
caseBluetooth_Task:
break;
/*当前正在运行2.4G任务*/
caseWIFI_Task:
break;
/*当前正在运行2.4G任务*/
caseUSB_Task:
break;
/*当前正在运行2.4G任务*/
caseSet_Task:
break;
default:
break;
}
}
}
上面这段代码的功能:
(1)检测当前按下的按键为确认键 (2)检测当前的界面 (3)如果是主界面,则进入菜单界面 (4)如果是菜单界面,则进入任务界面 (5)如果是任务界面,则开执行被选中的任务
那么可以从主界面进入,那怎么退出呢?
同样这里采用外部中断来控制
/****************右摇杆按键****返回按键*************************/
if(DISABLE==KEY_Rocker_Right)
{
//当按下返回键时,判断当前界面
/************判断当前界面为菜单界面*******************/
if(Menu_Interface==Mark_Sign.Interface_Mark)
{
/*******退出菜单界面***进入主界面**/
Mark_Sign.Interface_Mark=Main_Interface;
}
/************判断当前界面为任务界面******************/
elseif(Task_Interface==Mark_Sign.Interface_Mark)
{
/***退出正在运行的任务***/
Mark_Sign.Run_Task=Stop;
/*******退出任务界面*****/
Mark_Sign.Interface_Mark=Menu_Interface;
}
}
上面这段代码的功能:
(1)检测当前按下的按键为返回键 (2)检测当前的界面 (3)如果是任务界面,则停止正在运行的任务,返回到菜单界面 (4)如果是菜单界面,则返回到主界面
通过确认按键控制从主界面到菜单界面到任务界面的切换。
通过返回按键控制从任务界面到菜单界面到主界面的切换。
以上就是菜单界面的内容,不管你是小白还是正在学习STM32的你,根据这套框架你一样可以写出霸气的菜单界面,如果你们还有更好的写法,欢迎一起讨论。
本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。
在公众号聊天界面回复1024,可获取嵌入式资源;回复m,可查看文章汇总
暂无评论哦,快来评论一下吧!

