当前位置: 首页 > 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位小数");

相关文章:

  • inotify-cpp 使用
  • [特殊字符] OpenCV opencv_world 模块作用及编译实践完整指南
  • Node.js特训专栏-实战进阶:7.Express模板引擎选型与使用
  • uniapp打包apk后实现APP消息通知详细教程
  • 【Spring】系统化的 Spring Boot 全栈学习教程,涵盖基础配置、核心功能、进阶实战及文档自动生成
  • 在Springboot项目部署时遇到,centos服务器上,curl请求目标地址不通 ,curl -x 可以请求通的解决办法
  • Spring Bean生命周期(基于spring-beans-6.2.6分析)
  • Bootstrap 5学习教程,从入门到精通,Bootstrap 5 提示框(Tooltips) 语法知识点及案例(21)
  • uniapp:微信小程序胶囊「复制链接」灰色处理
  • EEG分类 - Theta 频带 power
  • JimuReport:一款免费的数据可视化报表工具
  • GitLab 17.8 备份秘籍:快速获取纯 Git 仓库与核心配置
  • Word2Vec 原理是什么
  • Learning PostgresSQL读书笔记: 第1章 Introduction to PostgreSQL
  • 【AI 测试】测试用例设计:人工智能语言大模型性能测试用例设计
  • 【数码管向左出现与消失滚动“456789Ab”】2022-4-25
  • 【数据结构】_二叉树OJ第二弹(返回数组的遍历专题)
  • 如何利用Charles抓包工具提升API调试与性能优化
  • 【Java面试】什么是一致性Hash算法
  • 原生微信小程序网络请求与上传接口封装实战指南
  • 中国学校网站前台模板/智慧软文发布系统
  • 洞泾做网站公司/百度一下就知道了官网楯
  • 类豆瓣的模板wordpress/拼多多标题关键词优化方法
  • 界面做的最好的网站/近三天发生的重要新闻
  • 数据库性质的网站怎么做/站长工具seo综合查询
  • 温州市网站建设公司/实训百度搜索引擎的总结