单片机——浮点数转换4位数码管显示

在这里插入图片描述

浮点数转换4位数码管显示

static char buffer[5];
int DecimalPlace = 0;
#define HideChar 'h'
void DisplayFloatOn4LED(float value)
{long integer = roundf(value );if (integer > 9999) //4位{integer = 9999;snprintf(buffer, sizeof(buffer), "%4ld", integer);}else if (integer > 999) //4位{snprintf(buffer, sizeof(buffer), "%4ld", integer);}else if (integer > 99) //3位{int decimalPlaceTemp = DecimalPlace;if (decimalPlaceTemp > 1)decimalPlaceTemp = 1;if (decimalPlaceTemp == 1){integer = roundf(value * 10 );snprintf(buffer, sizeof(buffer), "%4ld", integer);buffer[2] |= 0x80;}else{snprintf(buffer, sizeof(buffer), "%4ld", integer);buffer[0] = HideChar;}}else if (integer > 9) //2位{int decimalPlaceTemp = DecimalPlace;if (decimalPlaceTemp > 2)decimalPlaceTemp = 2;switch (decimalPlaceTemp){case 2:{integer = roundf(value * 100 );snprintf(buffer, sizeof(buffer), "%4ld", integer);buffer[1] |= 0x80;}break;case 1:{integer = roundf(value * 10 );snprintf(buffer, sizeof(buffer), "%4ld", integer);buffer[2] |= 0x80;buffer[0] = HideChar;}break;case 0:{snprintf(buffer, sizeof(buffer), "%4ld", integer);buffer[0] = HideChar;buffer[1] = HideChar;}break;default:break;}}else if (integer > 0 ) //1位{int decimalPlaceTemp = DecimalPlace;if (decimalPlaceTemp > 3)decimalPlaceTemp = 3;switch (decimalPlaceTemp){case 3:{integer = roundf(value * 1000 );snprintf(buffer, sizeof(buffer), "%04ld", integer);buffer[0] |= 0x80;}break;case 2:{integer = roundf(value * 100 );snprintf(buffer, sizeof(buffer), "%04ld", integer);buffer[1] |= 0x80;buffer[0] = HideChar;}break;case 1:{integer = roundf(value * 10 );snprintf(buffer, sizeof(buffer), "%04ld", integer);// buffer[2] |= 0x80;buffer[1] = HideChar;buffer[0] = HideChar;}break;case 0:{snprintf(buffer, sizeof(buffer), "%04ld", integer);buffer[0] = HideChar;buffer[1] = HideChar;buffer[2] = HideChar;}break;default:break;}}else if (integer == 0 ) //1位 0.xx{if (value >= 0){int decimalPlaceTemp = DecimalPlace;if (decimalPlaceTemp > 3)decimalPlaceTemp = 3;switch (decimalPlaceTemp){case 3:{integer = roundf(value * 1000 );snprintf(buffer, sizeof(buffer), "%04ld", integer);buffer[0] |= 0x80;}break;case 2:{integer = roundf(value * 100 );snprintf(buffer, sizeof(buffer), "%04ld", integer);buffer[1] |= 0x80;buffer[0] = HideChar;}break;case 1:{integer = roundf(value * 10 );snprintf(buffer, sizeof(buffer), "%04ld", integer);buffer[2] |= 0x80;buffer[1] = HideChar;buffer[0] = HideChar;}break;case 0:{buffer[0] = HideChar;buffer[1] = HideChar;buffer[2] = HideChar;buffer[3] = '0';}break;default:break;}}else{int decimalPlaceTemp = DecimalPlace;if (decimalPlaceTemp > 2)decimalPlaceTemp = 2;switch (decimalPlaceTemp){case 2:{integer = abs(roundf(value * 100 ));snprintf(buffer, sizeof(buffer), "%04ld", integer);buffer[1] |= 0x80;buffer[0] = '-';}break;case 1:{integer = abs(roundf(value * 10 ));snprintf(buffer, sizeof(buffer), "%04ld", integer);buffer[2] |= 0x80;buffer[1] = '-';buffer[0] = HideChar;}break;case 0:{buffer[0] = HideChar;buffer[1] = HideChar;buffer[2] = HideChar;buffer[3] = '0';}break;default:break;}}}else if (integer > -10) //1位,负数{int decimalPlaceTemp = DecimalPlace;if (decimalPlaceTemp > 2)decimalPlaceTemp = 2;switch (decimalPlaceTemp){case 2:{integer = abs(roundf(value * 100 ));snprintf(buffer, sizeof(buffer), "%04ld", integer);buffer[1] |= 0x80;buffer[0] = '-';}break;case 1:{integer = abs(roundf(value * 10 ));snprintf(buffer, sizeof(buffer), "%04ld", integer);buffer[2] |= 0x80;buffer[1] = '-';buffer[0] = HideChar;}break;case 0:{snprintf(buffer, sizeof(buffer), "%04ld", abs(integer));buffer[0] = HideChar;buffer[1] = HideChar;buffer[2] = '-';}break;default:break;}}else if (integer > -100) //2位,负数{int decimalPlaceTemp = DecimalPlace;if (decimalPlaceTemp > 1)decimalPlaceTemp = 1;switch (decimalPlaceTemp){case 1:{integer = abs(roundf(value * 10 ));snprintf(buffer, sizeof(buffer), "%4ld", integer);buffer[2] |= 0x80;buffer[0] = '-';}break;case 0:{snprintf(buffer, sizeof(buffer), "%4ld", abs(integer));buffer[0] = HideChar;buffer[1] = '-';}break;default:break;}}else if (integer > -1000) //3位,负数{snprintf(buffer, sizeof(buffer), "%4ld", abs(integer));buffer[0] = '-';}else if (integer <= -1000) //4位,负数{buffer[0] = '-';buffer[1] = '9';buffer[2] = '9';buffer[3] = '9';}qDebug() << "value:" << value << "integer:" << integer << "buffer:" <<buffer << int(buffer[2]) - 0x30 << int(buffer[3]) - 0x30 ;
}

测试代码

    for (int dp = 0; dp <= 3; dp++){DecimalPlace = dp;printf("\n=== 测试小数位数: %d ===\n", dp);// 正数测试DisplayFloatOn4LED(9999.9f);qDebug("最大值截断");DisplayFloatOn4LED(1234.5f);qDebug("4位整数");DisplayFloatOn4LED(123.45f);qDebug("3位整数");DisplayFloatOn4LED(12.345f);qDebug("2位整数");DisplayFloatOn4LED(1.2345f);qDebug("1位整数");DisplayFloatOn4LED(0.9999f);qDebug("0.9999舍入");// 负数测试DisplayFloatOn4LED(-12.34f);qDebug("2位负数");DisplayFloatOn4LED(-1.234f);qDebug("1位负数");DisplayFloatOn4LED(-0.999f);qDebug("-0.999舍入");// 边界测试DisplayFloatOn4LED(0.0f);qDebug("零值");DisplayFloatOn4LED(-999.9f);qDebug("大负数");}// 特殊测试:动态改变小数位数DecimalPlace = 1;DisplayFloatOn4LED(3.1415f);qDebug("圆周率1位小数");DecimalPlace = 2;DisplayFloatOn4LED(3.1415f);qDebug("圆周率2位小数");

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

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

相关文章

金融行业B端系统布局实战:风险管控与数据可视化的定制方案

摘要 在金融行业&#xff0c;一次小小的数据泄露可能引发千万级资金损失&#xff0c;一次错误的风险评估或许让企业陷入危机。传统 B 端系统布局在应对复杂多变的金融业务时&#xff0c;常出现风险预警滞后、数据杂乱无章的情况&#xff0c;让从业者如履薄冰。如何才能在瞬息万…

融合LSTM与自注意力机制的多步光伏功率预测新模型解析

这篇论文《Improved multistep ahead photovoltaic power prediction model based on LSTM and self-attention with weather forecast data》&#xff08;2024, Applied Energy&#xff09;聚焦在 多步光伏功率预测 中&#xff0c;如何结合 LSTM 与自注意力机制&#xff08;se…

Blazor-内置输入组件

封装的输入组件 InputCheckbox&#xff1a;表示复选框。InputDate&#xff1a;表示类型为 date 的日期选择框。InputFile&#xff1a;表示文件上传。InputNumber&#xff1a;表示数字框。InputRadio&#xff1a;表示单选按钮。InputRadioGroup&#xff1a;表示单选按钮组。Inpu…

Qt源码分析: QChildEvent

本文记录QChildEvent事件相关代码分析。 注1&#xff1a;限于笔者研究水平&#xff0c;难免有表述不当&#xff0c;欢迎批评指正。 注2&#xff1a;博文会不定期更新&#xff0c;敬请关注。 一、QChildEvent的发送 分析QObject::setParent代码&#xff0c;当修改父对象时&…

《Whisper :说明书 》

[论文] [模型卡] [Colab 示例] Whisper 是一种通用的语音识别模型。它基于各种音频的大型数据集进行训练&#xff0c;也是一种多任务模型&#xff0c;可以执行多语言语音识别、语音翻译和语言识别。 方法 Transformer 序列到序列模型针对各种语音处理任务进行训练&#xff0c;…

回溯----8.N皇后

题目链接 /** 将n个棋子放在n*n的棋盘上,不同列,不同行,不同斜线 大致执行流程: 首先选取第一行第一格放置第一个棋子,再从第二行第一个位置开始选取合法的位置(不同行不同列不同斜线)放置棋子,重复上述流程迭代行数, 直到放置n个棋子。 若放置途中出现无合法位置的情况,回溯将…

微机电子拉伸试验机

对于不同材料的试样&#xff0c;由于其化学成分及组织的不同&#xff0c;在拉伸过程中会体现 出不同的物理现象及力学性质。西安力创&#xff08;LETRY&#xff09;公司专业制造WDL/WDW系列微机控制电子万能试验机&#xff0c;主要适用于金属板材、棒材、管材、金属丝、金属箔、…

【数据结构与算法】数据结构核心概念系统梳理

第一章 绪论:基础概念体系 🚩算法:问题求解步骤的描述。 🚩非递归的算法效率更高。 1.1 逻辑结构 vs 存储结构 维度逻辑结构存储结构(物理结构)定义数据元素之间的逻辑关系数据结构在计算机中的实现方式分类线性/树形/图/集合顺序/链式/索引/散列独立性独立于存储结构…

73页PPT | 大数据平台规划与数据价值挖掘应用咨询项目解决方案

推荐摘要&#xff1a;在数字化浪潮中&#xff0c;企业数据量呈几何级增长&#xff0c;却常因缺乏科学规划的大数据平台&#xff0c;陷入数据孤岛、处理效率低下的困境&#xff0c;难以充分挖掘数据价值。特推出大数据平台规划与数据价值挖掘应用咨询项目解决方案&#xff0c;正…

gRPC 与 Protobuf 的深度集成 —— 从服务定义到多语言交互(Go + Java 示例)

在前几篇文章中&#xff0c;我们已经掌握了 Protobuf 的基础语法、高级特性和序列化反序列化操作。本篇文章将深入讲解 gRPC 与 Protobuf 的集成&#xff0c;重点介绍如何通过 .proto 文件定义服务接口&#xff0c;并在 Go 和 Java 中实现 gRPC 服务与客户端的完整交互流程。我…

可信计算的基石:TPM技术深度解析与应用实践

可信计算的基石&#xff1a;TPM技术深度解析与应用实践 引言&#xff1a;数字世界的"信任之锚" 在数据泄露事件频发的时代&#xff0c;传统软件级安全防护已力不从心。TPM&#xff08;可信平台模块&#xff09;作为硬件级安全解决方案&#xff0c;正成为现代计算设…

「ECG信号处理——(18)基于时空特征的心率变异性分析」2025年6月23日

一、HRV概述 心率变异性&#xff08;Heart rate variability ,HRV&#xff09;分析是通过测量分析连续正常R-R间期的时间变化来反映心率的变化程度的&#xff0c;根据计算RR 序列的统计指标&#xff0c;或者是画出RR间期的直方图和散点图来反映HRV的大小情况。下面我们从男性与…

【学习笔记】深入理解Java虚拟机学习笔记——第10章 前端编译与优化

第10章 前端编译与优化 10.1 概述 1>前端编译器&#xff1a;Javac命令。 【.java文件->.class文件】 2>即时编译器&#xff1a;Hotspot.C1.C2 【.class文件->机器码】 3>提前编译器&#xff1a;JDK的Jaotc等【.java->机器码】 10.2 Javac 编译器 10.2.1 …

Python 区块链与Web3开发指南

https://www.python.org/static/community_logos/python-logo-master-v3-TM.png 区块链基础概念 区块链核心特性 python 复制 下载 class Block:def __init__(self, index, timestamp, data, previous_hash):self.index indexself.timestamp timestampself.data datas…

工业智能体调参闭环:从物料感知到智慧工艺的落地路径

用户定义目标&#xff1a;智能工艺的起点不是机器&#xff0c;而是人 在智能制造系统中&#xff0c;工艺调优的第一步并非直接依赖AI或自动化设备&#xff0c;而是始于用户的明确输入。用户需要在系统中定义产品的工艺要求&#xff0c;包括目标尺寸与规格&#xff08;如长宽高…

【Linux学习笔记】进程间通信之共享内存

【Linux学习笔记】进程间通信之共享内存 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Linux学习笔记 文章目录 【Linux学习笔记】进程间通信之共享内存前言一. system V共享内存1.1 共享内存数据结构1.2 共享内存函数1.3 共享内存实现通信…

郭碧婷闯入女团赛道 与刘忻张予曦蔡诗芸组成ROLLING SISTERS

近日&#xff0c;郭碧婷与刘忻、张予曦、蔡诗芸组成的女团ROLLING SISTERS正式官宣&#xff0c;并发布《Rolling Life》《Alpha》两首单曲&#xff01; 此次几位姐姐的组合让大家眼前一亮&#xff0c;尤其是郭碧婷造型颠覆以往。银灰色挑染短发搭配棱角分明的黑色烟熏妆&#x…

2025再升级:医疗数智立体化体系V2.0架构简介

在医疗数智立体化体系第一版基础上,融入量子物理的第一性原理计算、人工智能(AI)、高性能云计算(HPC)和标准化机器人自动化整合成“医疗数智立体化体系2.0”,代表了医疗研发未来的重要发展方向。这个体系的核心在于深度融合物理世界规律、智能计算与自动化执行,为医疗AI…

Day40 训练和测试的规范写法

目录 一、彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中 单通道图片的规范写法 彩色图片的规范写法 二、展平操作&#xff1a;除第一个维度batchsize外全部展平 图像任务中的张量形状 NLP任务中的张量形状 1. Flatten操作 2. view/reshape操作 总结 三…

Linux 文件 I/O 与标准 I/O 缓冲机制详解

一、什么是标准 I/O&#xff1f;&#xff08;FILE* 接口&#xff09; 标准 I/O 是 C 标准库为我们提供的一套高级文件操作接口&#xff0c;核心基于结构体 FILE&#xff0c;常见函数如&#xff1a; fopen() / fclose() fread() / fwrite() fprintf() / fscanf() fflush() /…