OLED整体刷新到结合switch刷新方式演变

OLED整体刷新到结合switch刷新方式演变

引言

OLED刷新模式, 其实很简单, 就和prinf输出一样, 只是我们这里利用OLED来输出我们所需要的东西了。

至于OLED单独整体刷新, 还是利用switch刷新, 都是形而上学, 形的东西, 至于底层, 江协科技大佬已经帮我整理好了, 我们是站在巨人的肩膀上呦。

[模块教程] 第1期 0.96寸OLED显示屏_哔哩哔哩_bilibili

OLED单独刷新

很直白, 就直接初始化一下OLED后, 直接把这段代码复制到while循环里面

image-20240820122845765

整体刷新改进

存在的问题:

单独刷新, 我们观察刷新模式, 会发现我们一直在刷新 文字和数据, OLED, 只要我们不动其数据区,我们只供电, 就可以持续的将文字留在上面.

所以, 如果我们只是显示一个页面, 那么需要刷新修改的只是数据区, 文字区域就不用刷新了,

如果我们重复刷新文字, 就相当于白白浪费CPU算力了

解决方案:

我们的做法是这样的:

只刷新一次文字区域, 然后重复刷新数据区域

OLED_ShowChinese(0, 0, "温度");
OLED_ShowChinese(0, 24, "湿度:");
OLED_ShowChinese(0, 48, "烟雾浓度:");
while(1)
{OLED_Printf(48,0,OLED_8X16,"%2d",temp);OLED_Printf(48,24,OLED_8X16,"%2d",humi);OLED_Printf(80,48,OLED_8X16,"%2.1f",ad_value);    
}   

多界面切换, 分隔刷新

多界面修改方案

当只有一个界面的时候, 我们在while循环前, 刷新一次文字, while循环里面只是修改数据就可以了.

但是有很多界面呢? 这存在一个问题, 因为我们运行都是在while循环里面运行的, 也不可能再跳转到while循环外去刷新.

多界面刷新文字区域

所以我们探讨一个问题, 我们什么时候, 才去刷新文字区域, 当然是我们要切换界面的时候, 那我们是什么时候要切换界面呢? 那当然是, 控制界面的变量, 切换的时候, 确切可以说, 我们从界面1 切换到 界面2 的时候, 我们就要刷新文字了, 当切换到界面2的时候, 我们整体刷新一次,

但是到第二次, 如果还是界面2, 我们就没必要重复刷新界面2的文字了, 而是只刷新数据.

所以我们要定义一个变量, 控制我们当前应该显示哪个界面, 再定义一个变量, 表示, 我们此时界面是否切换,

因为切换的话, 就需要整体刷新, 没切换的话, 就只刷新数据区.

image-20240820140536173

代码变量实现流程

(1)刷新流程

只有当我们要切换界面的时候, 我们才整体刷新, 否则, 整体刷新过一次后, 就只刷新数据即可. 这样可以节省CPU算力, 加快刷新速率。

image-20240820141027098

(2)界面挑选

当我们有多个界面的时候, 我们可以选择switch来选择进行多界面的刷新。

image-20240820154826038

(3)界面内部刷新

我们要把握一个点, 我们分开刷新的目的: 因为我们要重复刷新一个界面, 对于界面中不变动的文字, 就可以只刷新一次, 但是对于需要刷新变动的数据, 则需要重复刷新。

整体刷新的时机:

当刚切换到新界面的时候, 我们要整体刷新一次, 保证页面显示完整

局部刷新时机:

当已经整体刷新完, 只刷新需要更新的区域, 保证数据的实时性.

那如何区分当前是 , 刚切换完新界面, 还是已经整体刷新完呢?

那就是当界面变动的标志位触发的时候.

我们举个例子,我们可以说, 我们按下了切换界面的按键, 所以默认当前选择的界面是需要整体刷新的, 所以, 我们可以挑选一个button_down变量, 来定义, 我们是否按下了切换界面的按键, 当按下之后, 我们就要整体刷新界面( 整体刷新完后, 记得把button_down修改回来,避免重复整体刷新)

image-20240820155951091

那后面当检测到, buton_down == 0 的时候, 就说明此时没有界面切换, 那么我们就局部刷新数据

image-20240820160013762

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/405063.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python零基础学习】字典

文章目录 前言一、简单字典示例二、使用字典三、字典遍历四、嵌套总结 前言 Python 字典 是一种非常强大且灵活的数据结构,它允许你通过键(key)来存储和检索值(value)。想象一下,字典就像一个巨大的电话簿…

8月21日微语报,星期三,农历七月

8月21日微语报,星期三,农历七月十八,工作愉快,生活喜乐! 一份微语报,众览天下事! 1、今日出发!中国体育代表团将分两批出征巴黎残奥会。 2、股价再创新高!工商银行市值…

suricata编译安装和运行

目录 编译安装 运行 调试 编译安装 apt -y install autoconf automake build-essential cargo \ libjansson-dev libpcap-dev libpcre2-dev libtool \ libyaml-dev make pkg-config rustc zlib1g-dev apt-get install libpcre3-dev wget https://www.openin…

项目实战--SpringBoot整合EasyExcel实现数据导入导出

SpringBoot整合EasyExcel实现数据导入导出 一、前言二、实践2.1 实体类注解方式2.2 动态参数化导出导入 一、前言 在公司业务系统开发过程中,操作 Excel 实现数据的导入导出是个非常常见的需求。 最近公司的项目采用EasyPoi来实现的,但是在数据量大的情…

GPT-SoVITS

文章目录 model archS1 ModelS2 model model arch S1 model: AR model–ssl tokensS2 model: VITS,ssl 已经是mel 长度线性相关,MRTE(ssl_codes_embs, text, global_mel_emb)模块,将文本加强相关,学到一个参考结果 S1 Model cla…

Linux进程间通信——SystemV消息队列与信号量

文章目录 消息队列信号量同步互斥原语、原子性信号量多线程并发访问锁 消息队列 SystemV除了共享内存之外,还有一个进程间通信的方式,是消息队列 我们说一切进程间通信的方式本质其实就是让不同进程看到同一份资源 这个消息队列的本质其实就是让两个进…

十二步:像玩游戏一样搞量化,量化交易不是“黑神话”

十二步:像玩游戏一样搞量化,量化交易不是“黑神话” 1、定义您的目标2、数据收集和清理3、构思4、模型开发5、回测6、风险管理7、交易成本分析 (TCA)8、模拟交易9、优化10、执行11、监控和维护12、记录和审查结论 《黑神话:悟空》今日上线了&…

OSPF-基础多区域实验

1.ENSP下载 阿里云盘分享 ⭐/*无需密钥 免费下载 安装不成功,可关注并私信博主*/ 2.OSPF的基础需求和规则 实验规则: 1.接口地址→XY.XY.XY.R /24 X:两者之间最小的 Y:两者之间最大的 R:谁的接口就是谁的编号 以R1和R2之间的连接为例&#xff0…

高性能 Web 服务器:让网页瞬间绽放的魔法引擎(中)

目录 一.Nginx版本和安装方式:源码编译安装 1.验证版本及编译参数 2.使用安装完成的二进制文件nginx 3.Nginx 启动文件 二.平滑升级和回滚 三.全局配置 实现 nginx 的高并发配置 四.核心配置:新建一个 PC web 站点 五.核心配置:location的详细使用…

GlobalMapper-大疆的航点kmz转航线文件展示空间轨迹

0序: 在大疆遥控器或者司空2中设置航线,都是一个个的航点,如果把航点转为航线,在三维地球中显示其空间效果。用于分析和实际物体的距离,或者展示该航线都做了哪些方面的考虑。 如何把一堆点连城一条线? 本…

Kali Linux 命令大全

一、引言 Kali Linux 作为一款专为渗透测试和安全研究设计的操作系统,拥有丰富的命令行工具,熟练掌握这些命令对于高效地进行安全测试和分析至关重要。本文将为您详细介绍 Kali Linux 中常用的命令,涵盖系统信息获取、文件操作、网络分析、用…

如何轻松有效地将 Windows 10 电脑迁移到 SSD

您想将 Windows 10 迁移到新硬盘驱动器吗?在专业第三方应用程序的帮助下,它可以简单有效地完成。这篇文章将为读者提供有关如何将 Windows 10 迁移到 SSD 的详细指南。 Windows 10 电脑系统迁移到 SSD 的四个原因 Windows 10 克隆到 SSD 意味着将设备上…

【C++】————智能指针

作者主页: 作者主页 本篇博客专栏:C 创作时间 :2024年8月20日 一,什么是智能指针 在C中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针&…

标准版v5.4安卓手机小程序扫码核销读取不到核销码的问题

修改这个文件,红色的那块代码替换成绿色的这段代码,然后重新打包上传。 文件地址:template/uni-app/pages/admin/order_cancellation/index.vue let path decodeURIComponent(res.path); self.verify_code path.split(‘code’)[1]; h5…

使用Element UI组件时,icon图标不显示

问题描述: 我在使用Element UI组件的日期选择器时,发现图标不显示(左边是原图,右边的问题图)。 经过检查我发现,我的JS,CSS文件都没有问题,只是缺少了element-icons.tff和element-icons.woff这两个文件。 …

C语言之“ 数组 ”

🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:C语言基础 目录 前言 一、数组 二、一维数组 2.1 一维数组的创建和初始化 数组创建 数组初始化 数组类型 2.2 一维数组的使用 数组下标 数组打印 数组输…

SIRA-PCR: Sim-to-Real Adaptation for 3D Point Cloud Registration 论文解读

目录 一、导言 二、 相关工作 1、三维点云配准工作 2、无监督域适应 三、SIRA-PCR 1、FlyingShape数据集 2、Sim-to-real自适应方法 3、配准 4、损失函数 一、导言 该论文来自于ICCV2023,论文提出了一种新的方法SIRA-PCR,通过利用合成数据Flying…

Java面试--框架--Spring MVC

Spring MVC 目录 Spring MVC1.spring mvc简介2.spring mvc实现原理2.1核心组件2.2工作流程 3.RESTful 风格4.Cookie,Session4.1 会话4.2 保存会话的两种技术 5.拦截器5.1过滤器、监听器、拦截器的对比5.2 过滤器的实现5.3 拦截器基本概念5.4 拦截器的实现 1.spring …

Ropdump:针对二进制可执行文件的安全检测工具

关于Ropdump Ropdump是一款针对二进制可执行文件的安全检测工具,该工具基于纯Python开发,是一个命令行工具,旨在帮助广大研究人员检测和分析二进制可执行文件中潜在的ROP小工具、缓冲区溢出漏洞和内存泄漏等安全问题。 功能介绍 1、识别二进…

使用gpreftools测试性能

参考文献: C 性能分析工具调研_性能分析工具 gperf perf vergi 比较-CSDN博客性能测试工具CPU profiler(gperftools)的使用心得-CSDN博客gperftools使用方法和常见问题_pprof no nodes to print-CSDN博客c 分析 gperftools 总结 | Weakyon Blog 文章目录 安装使用 …