当前位置: 首页 > news >正文

单片机——浮点数转换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.lryc.cn/news/574344.html

相关文章:

  • 【笔记】在Cygwin上使用mintty连接wsl
  • 1.2、CAN总线帧格式
  • Apache SeaTunnel Flink引擎执行流程源码分析
  • DeepSeek今天喝什么随机奶茶推荐器
  • 如何利用Charles抓包工具提升API调试与性能优化
  • 组件化设计核心:接口与实现分离(C++)
  • 拼团系统多层限流架构详解
  • 《去哪儿网Redis高并发实战:从问题定位到架构升级》
  • 边缘-云协同智能视觉系统:实时计算与云端智能的融合架构
  • C++的前世今生-C++11
  • 《哈希表》K倍区间(解题报告)
  • go channel用法
  • 【android bluetooth 框架分析 04】【bt-framework 层详解 8】【DeviceProperties介绍】
  • Netty内存池分层设计架构
  • 【大厂机试题解法笔记】高效货运
  • 互联网大数据求职面试:从Zookeeper到Flink的技术探讨
  • 跨越十年的C++演进:C++11新特性全解析
  • TCP客户端发送消息失败(NetAssist做客户端)
  • 【C++】第十二节——详解list(上)—(list的介绍和使用、模拟实现)
  • Origin绘制三Y轴柱状图、点线图、柱状点线图
  • el-cascader 设置可以手动输入也可以下拉选择
  • 原生微信小程序网络请求与上传接口封装实战指南
  • 【DeepSeek实战】2、DeepSeek特训:Function Calling与ReAct双引擎驱动大模型智能升级实战指南
  • 《高等数学》(同济大学·第7版)第六章 定积分的应用 第一节定积分的元素法
  • matlab实现大地电磁二维正演
  • 音视频全链路开发实践:基于SmartMediakit的架构设计与应用实战
  • Recent Advances in Speech Language Models: A Survey
  • 通信网络编程3.0——JAVA
  • 【信创-k8s】银河麒麟V10国防版+鲲鹏/飞腾(arm64架构)在线/离线部署k8s1.30+kubesphere
  • fiddler+安卓模拟器,解决无网络、抓不到https问题