單片機——浮點數轉換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
英文地址,請注明出處:http://en.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() /…