STM32实现多级菜单界面显示
1、main函数中,while循环之前
MenuStruct menu[30]= //定义多级菜单结构体数组{{0,0,0,1,show0}, //第一个元素表示索引号,第二个元素表示该按键按下后要返回的界面,第三个元素表示该按键按下后要切换的菜单条目界面,第四个元素表示该按键按下后要进入的界面{1,0,2,4,show1},{2,0,3,5,show2}, {3,0,1,6,show3},{4,1,4,4,show4},{5,2,5,5,show5},{6,3,6,6,show6},};uint8_t INDEX=0; //索引变量int (*show)()=NULL; //显示刷新函数指针show=menu[INDEX].point; //INDEX为0时,把函数指针show0函数赋值给show,即初始界面位show0对应的界面
2、while循环中
key=KEY_Scan(0); //获取按键值switch(key) //根据按键值改变索引{case 0:break;case KEY0_PRES://按键按下,返回到上一级目录界面INDEX=menu[INDEX].key1;if(menu[INDEX].point()==1) //如过索引值对应的函数返回值为1,是需要更改显示的函数,则将其函数指针的值给show{show=menu[INDEX].point;}break;case KEY1_PRES://按键按下,切换本级目录的菜单条目界面INDEX=menu[INDEX].key2;if(menu[INDEX].point()==1) //如过索引值对应的函数返回值为1,是需要更改显示的函数,则将其函数指针的值给show{show=menu[INDEX].point;}break;case KEY2_PRES://按键按下,进入到下一级目录界面INDEX=menu[INDEX].key3;if(menu[INDEX].point()==1) //如过索引值对应的函数返回值为1,是需要更改显示的函数,则将其函数指针的值给show{show=menu[INDEX].point;}break;default :break;}show(); //执行显示刷新函数
3、MultiMenu.c中
//一级界面
int show0()
{SetTxData1_toLCD(0x00,0x00);//发送5A A5 07 82 0084 5A01 0001(切换到0号页面即0级初始界面)UserUart1Send( tempbuff1,sizeof(tempbuff1));SetTxData_toLCD(0x13,0x00,LL_high,LL_low);UserUart1Send( tempbuff,sizeof(tempbuff));HAL_Delay(500);return 1;
}//一级界面
int show1()
{SetTxData1_toLCD(0x00,0x01);//发送5A A5 07 82 0084 5A01 0001(切换到1号页面即一级目录1)UserUart1Send( tempbuff1,sizeof(tempbuff1));return 1;
}
int show2()
{SetTxData1_toLCD(0x00,0x02);//发送5A A5 07 82 0084 5A01 0002(切换到2号页面即一级目录2)UserUart1Send( tempbuff1,sizeof(tempbuff1));return 1;
}
int show3()
{SetTxData1_toLCD(0x00,0x03);//发送5A A5 07 82 0084 5A01 0003(切换到3号页面即一级目录3)UserUart1Send( tempbuff1,sizeof(tempbuff1));return 1;
}
int show4()
{SetTxData1_toLCD(0x00,0x04);//发送5A A5 07 82 0084 5A01 0004(切换到4号页面即二级目录历史数据页面)UserUart1Send( tempbuff1,sizeof(tempbuff1));return 1;
}
//一级界面菜单1的二级界面
int show5()
{SetTxData1_toLCD(0x00,0x05);//发送5A A5 07 82 0084 5A01 0005(切换到5号页面即二级目录时间日期设置页面)UserUart1Send( tempbuff1,sizeof(tempbuff1));return 1;
}
int show6()
{SetTxData1_toLCD(0x00,0x06);//发送5A A5 07 82 0084 5A01 0006(切换到6号页面即二级目录位置人员设置页面)UserUart1Send( tempbuff1,sizeof(tempbuff1));return 1;
}
int show7()
{return 1;
}
//一级界面菜单2的二级界面
int show8()
{return 1;
}
//一级界面菜单3的二级界面
int show9()
{return 1;
}
//一级界面菜单4的二级界面
int show10()
{return 1;
}
4、MultiMenu.h中
struct menu_struct
{int index; //索引值int key1; //按下时要切换的索引值int key2; //按下时要切换的索引值int key3; //按下时要切换的索引值int (* point)(); //函数指针,输入值为空,返回类型为int
};
typedef struct menu_struct MenuStruct;int show0(void);
int show1(void);
int show2(void);
int show3(void);
int show4(void);
int show5(void);
int show6(void);
int show7(void);
int show8(void);
int show9(void);
int show10(void);
int show11(void);
int action1(void);
int action2(void);
int action3(void);
相关文章:
STM32实现多级菜单界面显示
1、main函数中,while循环之前 MenuStruct menu[30] //定义多级菜单结构体数组{{0,0,0,1,show0}, //第一个元素表示索引号,第二个元素表示该按键按下后要返回的界面,第三个元素表示该按键按下后要切换的菜单条目界面,第四个元素…...
Qt事件处理和传递流程
事件系统的概述 事件的类型 Qt 支持多种事件类型,每种类型代表不同的用户交互或系统事件。常见的事件类型包括: 输入事件:如鼠标事件(QMouseEvent)、键盘事件(QKeyEvent)。窗口事件ÿ…...
基于STM32移植U8g2图形库——OLED显示(HAL库)
文章目录 一、U8g2简介1、特点2、U8g2的使用步骤 二、I2C相关介绍1、I2C的基本原理2、I2C的时序协议 三、OLED屏的工作原理四、汉字点阵显示原理五、建立STM32CubeMX工程六、U8g2移植1、U8g2源码2、移植过程 七、代码编写1、参考博主实现的U82G的demo例程(1…...
C语言概述与历史
引言 C语言是一门历史悠久且影响深远的编程语言。它不仅为后继的许多编程语言奠定了基础,同时因其高效性和灵活性在系统编程和嵌入式开发领域得到了广泛应用。本篇文章将全面介绍C语言的起源与发展、设计目标与理念,以及C语言的标准演化历程,…...
钉钉Stream模式推送程序环境部署
python3.10版本需要openssl1.1.1及以上版本 参考链接:https://blog.csdn.net/weixin_42806458/article/details/110678710 wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz unzip openssl-1.1.1q.tar.gz cd openssl-1.1.1q ./config --prefix/usr/loc…...
c# 二维图形绘制实践
1.等边三角形 1.1 概述 1.2 代码 using System; using System.Drawing; using System.Windows.Forms;public partial class TriangleForm : Form {public TriangleForm(){//InitializeComponent();// 确保窗体大小足够大,以容纳三角形 this.ClientSize new Siz…...
Nvidia TensorRT系列01-TensorRT的功能1
Nvidia TensorRT系列01-TensorRT的功能1 B站:肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com) 博客:肆十二-CSDN博客 问答:(10 封私信 / 72 条消息) 肆十二 - 知乎 (zhihu.com) C和Python API TensorRT的API同时支持C和Pyth…...
Vatee万腾平台:创新科技,助力企业腾飞
在全球化竞争日益激烈的今天,企业如何借助科技力量实现转型升级,已成为摆在众多企业家面前的重大课题。Vatee万腾平台凭借其卓越的创新科技和专业的服务能力,成为众多企业实现腾飞的得力助手。 一、创新科技,引领企业前行 Vatee万…...
搭建k8s集群报错unknown command “\u00a0“ for “kubeadm init“
搭建k8s报错unknown command “\u00a0” for “kubeadm init” 网上搜了一下,是因为复制过来的命令前面包含了空格,将复制的命令放到idea可以清楚看到几个命令前面有空格,删除掉就好了,记录一下...
【数据结构】三路快速排序
1. 简介 传统快速排序用的是双路快速排序,即将大于基准值的部分放到基准值右侧,小于基准值的部分放到基准值左侧,但是这种算法面对过多的重复数据的数组,时间复杂度会增多,于是就有了三路快速排序的思想,其…...
中国菜刀,蚁剑,哥斯拉,冰蝎的流量特征区别
中国菜刀、蚁剑、哥斯拉、冰蝎这四种Webshell连接工具的流量特征各有区别,以下是它们之间的主要差异: 中国菜刀(CaiDao) 流量特征: 请求包: UA头可能伪装为百度、火狐等浏览器的User-Agent。请求体中存在…...
华为OD刷题C卷 - 每日刷题32(执行任务赚积分,计算三叉搜索树的高度)
1、(执行任务赚积分): 这段代码是解决“执行任务赚积分”的问题。它提供了一个Java类Main,其中包含main方法和getResult方法,用于计算在有限的时间内,处理任务可以获得的最多积分。 main方法首先读取任务…...
QT系列教程(11) TextEdit实现Qt 文本高亮
文本高亮 对于textedit里录入的部分单词我们可以实现高亮,实现高亮主要依赖于QSyntaxHighlighter。 我们先创建一个Qt Application类,类名MainWindow, 然后新增一个C类,类名为MySyntaxHighlighter。 #ifndef MYSYNTAXHIGHLIGHTER_H #define …...
蓝队-溯源技巧
溯源技巧 大致思想 通常情况下,接到溯源任务时,获得的信息如下 攻击时间 攻击 IP 预警平台 攻击类型 恶意文件 受攻击域名/IP其中攻击 IP、攻击类型、恶意文件、攻击详情是溯源入手的点。 通过攻击类型分析攻击详情的请求包,看有没有攻击者…...
【5】JDK、JRE和JVM的区别与联系
JDK、JRE和JVM的区别与联系 Java是一种广泛使用的编程语言,它的跨平台特性得益于Java虚拟机(JVM)。然而,在Java的世界里,JDK、JRE和JVM这三个术语常常让人感到困惑。本文将阐述它们各自的功能,以及它们是如…...
【DevOps】Logstash详解:高效日志管理与分析工具
在现代软件开发和运维过程中,日志管理与分析是至关重要的环节。日志可以帮助我们追踪系统行为、诊断问题、优化性能以及确保安全合规。Logstash,作为ELK Stack(Elasticsearch、Logstash、Kibana)的核心组件之一,是一个…...
Vue3 之 Pinia 核心概念(八)
核心概念 State:这是你的应用程序的状态,是一个响应式的对象。 Getters:类似于 Vuex 中的 getters,它们是基于 state 的计算属性。 Actions:类似于 Vuex 中的 mutations 和 actions,它们用于改变 state。但…...
【办公类-04-03】华为助手导出照片视频分类(根据图片、视频的文件名日期分类导出)
背景需求: 用华为手机助手导出的照片视频,只能将jpg照片(exifread读取图片的exif拍摄日期,Png、JPEG、mp4都无法识别到exif信息) 【办公类-04-02】华为助手导出照片(jpg)读取拍摄时间分类导出…...
TVBOX 最新版下载+视频源教程
下载链接 wx 搜索 Geek 前端 发送电视资源进行获取 操作教程...
2024年了,苹果可以通话录音了
人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 6月11日凌晨,苹果在WWDC24大会上,密集输出了酝酿多时的AI应用更新。苹果对通话、对话、图…...
SEO_新手必看的SEO优化入门教程与核心方法(361 )
<h3 id"seoseo">SEO:新手必看的SEO优化入门教程与核心方法</h3> <p>在互联网时代,拥有一个成功的网站不仅仅是有好的设计和内容,还需要通过SEO(搜索引擎优化)来提升网站的可见性和流量。对于新手来说…...
bat脚本从入门到实战:10个常用技巧提升你的Windows自动化效率
BAT脚本从入门到实战:10个常用技巧提升你的Windows自动化效率 在Windows系统中,BAT批处理脚本就像一位不知疲倦的助手,能够24小时待命执行各种重复性任务。想象一下,每天上班第一件事是打开五个开发工具、三个文档和一个数据库客户…...
LingBot-Depth部署避坑指南:常见问题与解决方案汇总
LingBot-Depth部署避坑指南:常见问题与解决方案汇总 1. 引言:为什么需要这份指南 当你第一次尝试部署LingBot-Depth时,可能会遇到各种意想不到的问题——从模型下载失败到GPU内存不足,从端口冲突到奇怪的输出结果。这些问题往往…...
美胸-年美-造相Z-Turbo真实案例:快速生成24套手游服装方案
美胸-年美-造相Z-Turbo真实案例:快速生成24套手游服装方案 1. 项目背景与挑战 在手游《幻境物语》的角色设计阶段,美术团队面临一个紧迫需求:为游戏中的"花语使者"职业设计24套不同风格的服装方案。传统手工绘制方案需要至少3周时…...
RustFS实战:5分钟在Linux服务器上搭个私有S3兼容存储(保姆级配置+避坑指南)
RustFS实战:5分钟在Linux服务器上搭个私有S3兼容存储(保姆级配置避坑指南) 最近在折腾一个需要私有文件存储的Side Project,既不想用公有云S3(太贵),又嫌MinIO配置繁琐。偶然发现RustFS这个基于…...
嵌入式GUI技术选型与实现方案对比
1. 主流小型嵌入式GUI技术解析1.1 TouchGFX技术方案TouchGFX以其华丽的界面效果和流畅的动画著称,采用C语言开发,特别适合STM32系列MCU。其核心优势在于TouchGFX Designer工具,该工具提供:可视化界面设计环境丰富的控件库…...
拒了一个只要1.8万的45岁大佬
因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享点击关注#互联网架构师公众号,领取架构师全套资料 都在这里0、2T架构师学习资料干货分上一篇:2T架构师学习资料干货分享大家好,我是互联网架构师ÿ…...
Python多进程+ZeroMQ+内存映射=真无锁?资深架构师用17个生产事故告诉你为什么92%的“去GIL”方案在高并发下静默失败
第一章:Python无锁GIL环境下的并发模型避坑指南Python 的全局解释器锁(GIL)长期被误认为是“无锁”环境,实则恰恰相反——GIL 是 CPython 解释器中一把严格的互斥锁,它确保任意时刻仅有一个线程执行 Python 字节码。所…...
跨平台软件兼容方案全解析:从痛点到完美体验的技术实践
跨平台软件兼容方案全解析:从痛点到完美体验的技术实践 【免费下载链接】deepin-wine 【deepin源移植】Debian/Ubuntu上最快的QQ/微信安装方式 项目地址: https://gitcode.com/gh_mirrors/de/deepin-wine 在数字化办公与娱乐日益融合的今天,跨平台…...
单片机开发三大软件架构对比与实践
单片机开发常用软件架构深度解析1. 项目概述在嵌入式系统开发中,软件架构设计直接影响系统的可靠性、可维护性和实时性。本文系统分析三种主流单片机软件架构方案,包括时间片轮询法、操作系统方案和前后台顺序执行法,为开发者提供架构选型参考…...
