完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
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; } 上面这段代码用来判断是三级中哪一级界面。 里面创建了一个结构体,通过改变结构体里面的一个标志位来控制三级界面之间的切换。 那么就要用到按键来改变标志位的值,这里我采用了外部中断来控制。 /*************左摇杆按键*****菜单 确认按键**********************/ 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; } } } 上面这段代功能 /* * 1,检测当前按下的按键为确认键 * 2,检测当前的界面 * (1)如果是主界面,则进入菜单界面 * (2)如果是菜单界面,则进入任务界面 * (3)如果是任务界面,则开执行被选中的任务 */ 那么可以从主界面进入,那怎么退出呢? 同样这里采用外部中断来控制 /****************右摇杆按键****返回按键*************************/ 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; } } 上面这段代码的功能 /* * 1,检测当前按下的按键为返回键 * 2,检测当前的界面 * (1)如果是任务界面,则停止正在运行的任务,返回到菜单界面 * (2)如果是菜单界面,则返回到主界面 */ 通过确认按键控制从主界面到菜单界面到任务界面的切换。 通过返回按键控制从任务界面到菜单界面到主界面的切换。 以上就是菜单界面的内容,不管你是小白还是正在学习STM32的你,根据这套框架你一样可以写出霸气的菜单界面,如果你们还有更好的写法,欢迎一起讨论。 |
|
|
|
确实是高质量的总结,有屏需求可以call我(可以提供技术支持,微信同)
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1786 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1622 浏览 1 评论
1089 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
730 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1680 浏览 2 评论
1942浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
739浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
576浏览 3评论
599浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
561浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 19:56 , Processed in 0.790098 second(s), Total 80, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号