使用单片机在图形点阵LCD上绘制波形图
使用单片机在图形点阵LCD上绘制波形图
需求:
假如有一组浮点数据,是通过AD转换得到的,保存在数组MyArray[]中,采集点数为len,采集周期为T,现在想用单片机在LCD上绘制出这组数据对应的波形图,该如何实现呢?
在图形点阵LCD上制波形图,主要是为了提高采集数据的可视化效果,其次是为了提升产品的竞争力。我的理解就是为了好看。
一、绘图原理
1、定义波形图的显示区域
在绘图之前,我们需要先规划好显示区域。在12864的点阵屏中,X轴坐标为0~127,Y轴坐标为0~63,因此,我们定义波形图的显示参数如下:
#define Picture_Xmin 10 //波形图在LCD中的最小x坐标
#define Picture_Ymin 25 //波形图在LCD中的最小y坐标
#define Picture_Xpp 108 //波形图在LCD中的最大长度
#define Picture_Ypp 35 //波形图在LCD中的最大高度
#define Picture_Xmax (Picture_Xmin+Picture_Xpp) //波形图在LCD中的最大x坐标
#define Picture_Ymax (Picture_Ymin+Picture_Ypp) //波形图在LCD中的最大y坐标
注意:Picture_Xmax<128, Picture_Ymax<64
2、求数组MyArray[]中的最大值,最小值和峰峰值
采集数据的最大峰峰值数据,在绘图时,落在波形图的最大高度处,纵坐标反而是最小的。因此,我们采用最大值和采集点数据减法计算,得到其纵坐标。这样,就可以绘制曲线图了。
float MaxValue; //用来保存MyArray[]中的最大值
float MinValue; //用来保存MyArray[]中的最小值
float APPValue; //用来保存MyArray[]中的最大峰峰值
//函数功能:计算“最大值,最小值和峰峰值”
void Calculate_MaxValue_MinValue_ And_APPValue (float *s,u16 len)
{
u16 i;
float f;
MaxValue = s[0]; //默认最大值为第1点
MinValue = s[0]; //默认最小值为第1点
for(i=0;i<len;i++)
{
f=s[i];
if( MaxValue < f ) MaxValue= f;//保存最大值
if( MinValue > f ) MinValue= f;//保存最小值
}
APPValue = MaxValue - MinValue;//求最大峰峰值
}
3、画图
void DrawPicture (float *s,u16 len)
{
u16 i;
s16 x0;
s16 y0;
s16 x1;
s16 y1;
float f;
for(i=1;i<len;i++)//绘制曲线图
{
f=i-1; f=f*Picture_Xpp; f=f/len; x0=f;
f=MaxValue-s[i-1]; f=f*Picture_Ypp; f=f/APPValue; y0=f;
f=i; f=f*Picture_Xpp; f=f/len; x1=f;
f=MaxValue-s[i]; f=f*Picture_Ypp; f=f/APPValue; y1=f;
x0=x0+Picture_Xmin;
x1=x1+Picture_Xmin;
y0=y0+Picture_Ymin;
y1=y1+Picture_Ymin;
if(x1<Picture_Xmin) x1=Picture_Xmin;
if(x1>Picture_Xmax) x1=Picture_Xmax;
if(y1<Picture_Ymin) y1=Picture_Ymin;
if(y1>Picture_Ymax) y1=Picture_Ymax;
LCD12864_Draw_Line(x0,y0,x1,y1);//连接两点
delay_ms(10);
IWDG_ReloadCounter(); //喂狗
}
}
4、测试数据
float zgg[500]={\
0.015,0.017,0.015,0.013,0.015,0.017,0.012,0.010,0.016,0.005,\
0.010,0.008,0.011,0.007,0.010,0.010,0.012,0.009,0.014,0.010,\
0.010,0.011,0.004,0.018,0.010,0.011,0.012,0.017,0.007,0.011,\
0.011,0.011,0.019,0.013,0.015,0.010,0.006,0.015,0.012,0.008,\
0.009,0.014,0.008,0.011,0.011,0.012,0.012,0.011,0.009,0.009,\
0.008,0.011,0.009,0.016,0.013,0.009,0.017,0.011,0.009,0.016,\
0.016,0.018,0.350,1.455,1.846,1.301,0.915,3.114,2.057,2.492,\
2.492,1.810,2.786,2.759,4.029,3.502,4.158,5.301,4.977,4.885,\
5.187,5.089,7.498,6.864,5.561,5.556,5.785,5.099,5.084,6.788,\
6.813,5.818,7.310,6.542,6.588,7.890,8.497,9.550,7.780,8.992,\
7.991,6.775,7.861,6.070,7.436,7.526,7.428,7.831,8.010,9.033,\
7.712,8.285,10.741,7.642,8.600,8.875,7.750,8.004,8.427,8.585,\
7.681,8.896,9.189,9.090,10.693,10.375,9.289,12.039,10.143,9.360,\
9.090,9.897,9.763,8.382,10.486,10.310,8.447,8.390,10.005,8.476,\
7.379,7.649,6.994,5.216,7.270,6.369,5.622,6.346,5.542,6.544,\
6.661,6.028,6.296,6.355,5.758,4.138,4.123,4.447,2.778,3.776,\
4.231,2.986,3.303,2.086,3.364,3.159,2.510,2.722,2.905,3.149,\
2.334,2.342,4.827,2.402,2.498,3.293,2.702,2.400,0.975,2.333,\
2.484,2.320,1.738,1.826,2.401,1.606,1.907,4.055,2.452,2.557,\
3.185,4.060,3.783,2.288,3.517,3.073,3.835,3.548,3.397,3.621,\
3.277,4.059,6.163,4.788,5.490,5.926,4.776,5.832,5.375,5.931,\
5.641,6.116,6.494,5.810,6.589,6.170,5.996,7.143,6.010,7.020,\
6.084,7.609,7.766,6.424,8.962,7.657,7.651,8.441,8.822,8.056,\
8.056,9.544,10.316,8.953,11.235,9.466,9.439,11.076,9.861,10.979,\
11.175,11.397,11.229,11.782,12.640,11.227,11.199,15.345,12.014,13.559,\
12.358,13.194,13.410,13.420,15.032,14.768,15.588,16.330,15.671,16.423,\
16.384,15.650,17.480,19.635,17.554,17.906,18.879,20.133,18.643,19.774,\
19.774,20.218,20.108,21.673,20.306,19.601,17.923,18.702,19.537,17.518,\
17.518,17.309,15.661,17.110,16.761,16.466,18.900,18.883,19.926,19.239,\
19.339,18.480,20.742,17.802,18.132,18.887,17.559,15.768,16.246,17.168,\
16.190,15.683,15.908,16.724,15.345,15.535,17.338,16.310,15.740,19.018,\
19.018,15.470,16.562,16.356,15.073,16.106,15.629,13.992,14.893,13.934,\
13.934,13.543,13.498,15.776,13.819,13.940,13.533,14.011,14.911,12.808,\
14.547,13.968,13.734,12.015,12.165,12.483,10.434,9.705,11.537,9.156,\
10.918,10.678,9.082,9.774,9.481,10.021,8.808,8.753,9.036,9.195,\
7.963,6.926,7.067,8.801,5.732,6.574,6.389,5.748,5.210,4.475,\
3.889,4.680,3.835,3.285,3.593,3.524,1.565,1.988,4.024,0.016,\
0.015,2.159,0.017,0.016,0.123,0.020,0.014,0.016,0.013,0.015,\
0.015,0.013,0.012,0.013,0.006,0.008,0.010,0.011,0.015,0.009,\
0.012,0.009,0.010,0.009,0.012,0.014,0.010,0.013,0.010,0.011,\
0.012,0.008,0.015,0.012,0.009,0.013,0.018,0.007,0.008,0.012,\
0.009,0.005,0.016,0.014,0.015,0.011,0.009,0.016,0.013,0.011,\
0.006,0.011,0.016,0.003,0.008,0.009,0.016,0.001,0.012,0.014,\
0.007,0.018,0.010,0.013,0.005,0.017,0.016,0.014,0.012,0.906,\
1.162,1.221,2.657,1.665,1.798,1.308,1.938,1.553,2.034,2.732,\
3.292,2.987,3.215,5.045,4.450,4.327,5.036,5.694,6.738,5.664,\
5.955,5.343,5.202,5.067,5.883,5.216,5.913,5.819,6.587,6.393,\
6.486,7.045,8.264,7.951,7.846,7.259,7.427,6.607,7.599,6.556,\
6.556,7.572,7.113,5.954,7.276,9.913,7.580,8.802,11.101,8.764,\
8.764,8.794,7.993,7.160,8.247,8.147,7.197,7.849,9.611,8.391\
};
void Test_DrawPicture(void)
{
Calculate_MaxValue_MinValue_ And_APPValue(zgg,500);
DrawPicture(zgg,500);
}
5、测试结果:
若修改Picture_Ymin和Picture_Ypp,则可以放大曲线图。
对于128*64图形点阵LCD,需要注意:Picture_Xmax<128, Picture_Ymax<64

相关文章:
使用单片机在图形点阵LCD上绘制波形图
使用单片机在图形点阵LCD上绘制波形图 需求: 假如有一组浮点数据,是通过AD转换得到的,保存在数组MyArray[]中,采集点数为len,采集周期为T,现在想用单片机在LCD上绘制出这组数据对应的波形图,该…...
生信人写程序1. Perl语言模板及配置
生物信息领域常用语言 个人认为:是否能熟悉使用Shell(项目流程搭建)R(数据统计与可视化)Perl/Python/Java…(胶水语言,数据格式转换,软件间衔接)三门语言是一位合格生物信息工程师的标准。 生物信息常用语言非常广泛,我常用的有…...
【Android】Kotlin学习之数据容器 -- 集合
一. 定义 List : 是一个有序列表, 可通过下标访问元素. 元素可以在list中出现多次, 元素可重复 Set : 是元素唯一的集合, 一般来说Set中元素的顺序并不重要, 无序集合. Map : 是一组键值对, 键是唯一的, 每个键刚好映射到一个值, 值可以重复 二. 集合创建 三. 示例 mutabl…...
超详细 springboot 整合 Mock 进行单元测试!本文带你搞清楚!
文章目录 一、什么是Mock1、Mock定义2、为什么使用3、常用的Mock技术4、Mokito中文文档5、集成测试和单元测试区别 二、API1、Mockito的API2、ArgumentMatchers参数匹配3、OngoingStubbing返回操作 三、Mockito的使用1、添加Maven依赖2、InjectMocks、Mock使用3、SpringbootTes…...
国产操作系统下Chrome的命令行使用 _ 统信 _ 麒麟
原文链接:国产操作系统下Chrome的命令行使用 | 统信 | 麒麟 Hello,大家好啊!今天我们来聊聊如何在国产操作系统上使用命令行操作Google Chrome。无论是进行自动化测试、网页截图还是网页数据抓取,使用命令行操作Google Chrome都能…...
linux性能监控之slabtop
slabtop命令是以实时的方式显示内核slab缓冲区的细节信息,是linux自带的命令 [rootk8s-master ~]# slabtop --helpUsage:slabtop [options]Options:-d, --delay <secs> delay updates-o, --once only display once, then exit-s, --sort <char&…...
Allure 在 Python 中的安装与使用
Allure 是一个灵活轻量级的测试报告工具,它能够生成详细且富有洞察力的测试报告。在 Python 中,Allure 通常与 Pytest 结合使用,以提供更加丰富的测试结果展示。下面我将介绍关于如何在 Python 中使用 Allure 的详细操作。 一、环境准备 在…...
python实现动态时钟功能
欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 一.前言 时钟,也被称为钟表,是一种用于测量、记录时间的仪器。时钟通常由时针、分针、秒针等计时仪器组成,是现代社会不可或缺的一种计时工具。它的发明和使用极大地改变了人类的生活方式和时间观念。 时钟的类型有很多,…...
QueryPerformanceCounter实现高精度uS(微妙)延时
参考连接 C# 利用Kernel32的QueryPerformanceCounter封装的 高精度定时器Timer_kernel32.dll queryperformancecounter-CSDN博客https://blog.csdn.net/wuyuander/article/details/111831973 特此记录 anlog 2024年5月11日...
Logstash详解
Logstash详解:构建强大日志收集与处理管道的利器 一、引言 在大数据和云计算的时代,日志数据作为企业运营和故障排查的重要依据,其收集、处理和分析能力显得尤为重要。Logstash,作为一款强大的日志收集、处理和转发工具…...
QT设计模式:适配器模式
基本概念 适配器模式(Adapter Pattern)是一种结构型设计模式,允许将一个类的接口转换成客户端所期望的另一个接口,可以让原本由于接口不兼容而不能一起工作的类能够一起工作。 适配器模式需要实现的部分为: Target类…...
开发规范相关
1.对IDEA集成的代码检查 或 AliBaBa的代码检查 定义的规则进行取消或新增 代码自动扫描检查对于代码规范来说至关重要,但有时,我们希望忽略掉某些不必要的检查,比如忽略掉这个检查 可以如下操作 此时即可不再提示告警...
C++ 容器(五)——Set操作
一、Set容器定义 set 是一个有序关联容器,其中的元素按照升序排列,且不允许重复元素。 set 中的元素是唯一的,即任意两个元素不能相等。 1、set 可以用来对元素进行排序,因为它会自动对元素进行有序排列。 2、set 可以用来去重,当我们需要对一个容器中的元素进行去重操…...
【数字IC设计】芯片设计中的RDC
RDC问题定义 在芯片设计中,RDC是reset domain crossing 的缩写,类似于CDC(clock domain crossing),由于现在SOC芯片是有很多ECUs组成,为了使整个系统能够快速从复位中恢复, 用户希望SOC里面每个ECU模块都可以有自己独立的异步复位信号,这样可以在出问题的时候只复位有错…...
spark history server异常
现象:spark 日志文件突然新增了很多.hprof文件, 查找日志spark配置参数spark_log_dir进入日志目录: 查看historyServer日志: Spark Command: /usr/lib/jvm/java-1.8.0/bin/java -cp /opt/apps/JINDOSDK/jindosdk-current/lib/*:/…...
一个优秀 Maven 项目,各 Model 间最佳继承设计方案
1.单一职责原则 (Single Responsibility Principle): 每个模块应该专注于执行一个清晰且明确定义的功能,遵循单一职责原则,以降低模块的复杂性。 2.高内聚性 (High Cohesion): 模块内的组件和类应该紧密相关,共同实现模块的目标。高内聚性…...
MATLAB概述
文章目录 目录结构搜索路径高频命令clearclf/closeclc/homewho/whosformatsave/loadcd/pwdhelp/docsprintf/fprintf/disp tips MATLAB [1] 是美国 MathWorks公司出品的商业 数学软件,用于算法开发、数据可视化、数据分析以及 数值计算的高级技术计算语言和交互式…...
Redis5.0的Stream数据结构
Redis 5.0中引入的Stream数据结构是一种新的、持久化的、可查询的、可扩展的消息队列服务。它可以被视为一个日志或消息队列,由一个有序的、不断增长的日志序列来存储事件流数据。以下是关于Redis 5.0 Stream数据结构的详细解释: 一、Stream数据结构概述…...
避坑指南!RK3588香橙派yolov5生成RKNN模型!
地址1,转换模型 地址2,转换模型 地址3,解决ppa 下载k2 本文目录 一、将.pt模型转为onnx模型文件。(Windows)二、将.onnx模型转为.rknn模型文件。(Linux)三、将.rknn模型部署到开发板RK3588中…...
算法学习笔记(Nim游戏)
N i m Nim Nim游戏 n n n堆物品,每堆有 a i a_i ai个,每个玩家轮流取走任意一堆的任意个物品,但不能不取,取走最后一个物品的人获胜。 N i m Nim Nim游戏是一种经典的公平组合游戏。现在对它进行分析。 首先定义两个博弈中的状…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
