Ⅰ 單片機數碼管小數點閃爍
假設4個數碼管,每個亮2ms,一輪掃描共亮8ms,我們可以讓其以120次為周期(0.96s),掃描前60次小數點亮,後60次小數點不亮,這樣小數點就 以大約1HZ的速度閃爍。
例如,小數點在第二位,數碼管七段碼table[]中不含小數點
顯示部分如下
if(a<60)
{dataport=(table[a1]);
sm1=0; Delay1ms(2);sm1=1;
dataport=(table[a2])|0x80;//第二位多個小數點
sm2=0; Delay1ms(2);sm2=1;
dataport=(table[a3]);
sm3=0; Delay1ms(2);sm3=1;
dataport=(table[a4]);
sm4=0; Delay1ms(2);sm4=1;
ia++;
}
else {dataport=(table[a1]);
sm1=0; Delay1ms(2);sm1=1;
dataport=(table[a2]); //第二位無小數點
sm2=0; Delay1ms(2);sm2=1;
dataport=(table[a3]);
sm3=0; Delay1ms(2);sm3=1;
dataport=(table[a4]);
sm4=0; Delay1ms(2);sm4=1;
ia++;
}
if(a==120) a=0;//120次後重新歸零
Ⅱ 單片機進棧為什麼是小數
常用的波特率有誤差的,用小數表示更准確減少誤差。
單機片進棧顯示小數後期可四捨五入轉換成整數,浮點運算有精度問題。小數在單片機中有一個單獨的分類,我們稱之為浮點型數據。之所以說是浮點型,是因為在小數的顯示過程中,小數點會出現在不同的位置,小數表示用起來也很方便。
單片機又稱單片微控制器,它不是完成某一個邏輯功能的晶元,而是把一個計算機系統集成到一個晶元上。相當於一個微型的計算機,和計算機相比,單片機只缺少了I/O設備。概括的講:一塊晶元就成了一台計算機。它的體積小、質量輕、價格便宜、為學習、應用和開發提供了便利條件。同時,學習使用單片機是了解計算機原理與結構的最佳選擇。
Ⅲ 關於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函數
Ⅳ 關於單片機程序中小數點的的問題
這個要看單片機的平台以及關於舍入/進位的相關定義。
一般來說都是舍入為6。
Ⅳ 單片機C語言顯示小數
給你個流程思路吧。ad採集電壓信號,轉換的數據是根據參考電壓比較得到的。如果你的參考電壓是5V,用的是12位AD,現在轉換的結果為0x00ff,那麼當前的電壓就是0xo0ff*5000/4096
(mv)=311mv=0.311V,
至於怎麼顯示,那要看你的數碼管位數以及要顯示的數據范圍。
可以用定小數點顯示,也可以用動態小數點顯示。思路都是把當前小數換成需要的整數,保留固定的有效數字。然後去顯示小數點。思路就是這樣。希望能幫到你。
Ⅵ 單片機AD數據處理怎麼精確到小數點後幾位
不要用浮點運算,計算出一個系數後直接用整型運算,這樣比較省時間。在計算時先乘後除,精度不夠最好乘一個系數再除。比如把1V乘以1000變成1000mV,但是注意不要溢出,也就是運算過程中數據長度和精度權衡一下。最後只需在顯示時做一些處理就行了
比如說5V參考電壓,10位AD,讀AD轉換值為m,則所測電壓為X=5m/1024V,處理時可以這樣:X=m*(5000/1024)=m*(625/128)(mV),如果以V為單位顯示,那顯示的時候再加一個小數點就行了。如果不需要顯示,在以後的運算中根據精度需要做適當的變換就可以了
Ⅶ 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);
Ⅸ 單片機數碼管小數點閃爍
可以用定時器或者延時程序來設置。
其實數碼管的小數點就是一個LED燈。
因為數碼管是共陽極的,所以只要在數碼管H引腳(即對應小數點的那個引腳)用單片機給它一個低電平,就能讓小數點亮了。
首先讓小數點亮起來,然後可以用延時1秒的程序或者定時器定時1秒後,讓小數點滅,之後再延時1秒,或者定時1秒,讓小數點亮,這樣循環起來,就OK了