❶ 關於C51單片機的小數點四捨五入處理
將你需保留的那一位的低一位加5之後舍掉即可
單片機內一般採用整數計算,如果要保留兩位小數,需將原數據擴大100倍,小數點該向左移2位
18754/100=187·54 但單片機只能算整數,因此結果只能是187
因此計算時我們我們將被除數擴大100倍 相當於小數點向右移2位,1875400/ 100=18754
然後我們將計算結果的小數點再向左移回來2 位,即變成了 187.54 這就是定點小數的演算法
如果18754/100我們只保留一位小數
我們可以這樣處理 (18754*100+500)=1875900
1875900/100=18759
小數點左移2位,結果187.59 最後一位不考慮取187.5
但如果18755/100我們只保留一位小數
(18755*100+500)=1876000
1876000/100=18760
小數點左移2位,結果187.60 最後一位不考慮取187.6
看到了吧,4捨去了 5就入上去了
所以要保留三位小數,需將原來數據擴大1000倍,再除1000
所以要保留4位小數,需將原來數據擴大10000倍,再除10000
.......
擴大100倍或1000倍操作要放在除法之前,因除法才會導致小數丟失
需4舍5 入,將要保留的那一位數的低一位加5即可
當然這是低級演算法,用C語言編程直接可以用浮點數,結果輸出 時會自動四舍5 入
你所要做的是將浮點數轉換為字元(用sprint函數)並控制輸出數據的位數,格式控制類似於printf函數
❷ 51單片機上18B20如何在12864上顯示兩個小數點
temp <<= 8; //兩個位元組組合為1個字
temp = temp | a;----在1個字之中,最低四位是小數
f_temp = temp * 0.0625; --這里是除以16,就已經把小數的信息,都弄沒了
temp = f_temp * 10 + 0.5;//乘以10表示小數點後面只取1位,加0.5是四捨五入
再乘以100,得出的也不是原來的、真正的小數。
❸ 51單片機如何把一個無限循環的小數保留到兩位例如 1000/3209
選擇菜單——選項——編輯,「自動設置小數點」。把前面的小對勾去掉即可
❹ 單片機C語言顯示小數
給你個流程思路吧。ad採集電壓信號,轉換的數據是根據參考電壓比較得到的。如果你的參考電壓是5V,用的是12位AD,現在轉換的結果為0x00ff,那麼當前的電壓就是0xo0ff*5000/4096
(mv)=311mv=0.311V,
至於怎麼顯示,那要看你的數碼管位數以及要顯示的數據范圍。
可以用定小數點顯示,也可以用動態小數點顯示。思路都是把當前小數換成需要的整數,保留固定的有效數字。然後去顯示小數點。思路就是這樣。希望能幫到你。
❺ 關於單片機程序中小數點的的問題
這個要看單片機的平台以及關於舍入/進位的相關定義。
一般來說都是舍入為6。
❻ 51單片機怎麼從鍵盤輸入小數點啊
你的問題實質上是如何輸入小數。將鍵盤上某個鍵定義為小數點,如果檢測到這個鍵被按下,那麼後面按的數字鍵都看成小數就可以了。如,定義星號是小數點,那麼按下星號後,再按下2時,就乘以0.1,再按下4時,就乘以0.01,兩個數加起來就是0.24了
❼ 單片機8位數碼管怎麼讓其中一個帶小數點12.345678
你這應該是一個循環程序,循環變數是 i ,來完成8位數碼管顯示的吧?Display_data[i+1] ,這應該是段碼表數組吧?
數碼管是共陽還是共陰的,加小數點的方法是不同的。
如下圖是共陽的
程序
m=_crol_(m,1);
P2=m;
if(i==1)
P0=Display_data[i+1]+0x80;//加小數點
else
P0=Display_data[i+1];
delayms(2);