2017-08-12 107 views
0

我在RTC模塊的Arduino其中數據存儲在BCD。我知道如何將十進制數轉換爲BCD,但在編程編寫時遇到了一些問題。在搜索互聯網後,我得到了兩個公式,它們如下,並且工作完美,但無法理解它是如何計算的。BCD到十進制和十進制到BCD

1.一級方程式

DEC爲BCD

(value/10 * 16) + (value % 10) 

DEC - > 40其轉換爲在BCD這又等於64.

所以,如果我把公式放在公式中,我會得到相同的結果。

(40/10 * 16) + (40%10) 
= (4*16) + 0 
= 64 

BCD到DEC

(value/16 * 10) + (value % 16) 

2. Formula2

DEC爲BCD

val + 6 * (val/10) 

BCD到DEC

val - 6 * (val >> 4) 

如果有人能詳細解釋它,它會有所幫助。

感謝所有提前。

回答

1

正確的轉換功能是:

byte bcdToDec(byte val) 
{ 
    return((val/16*10) + (val%16)); 
} 

byte decToBcd(byte val) 
{ 
    return((val/10*16) + (val%10)); 
} 

爲什麼這項工作?讓我們以一個單一的數字5.在二進制,它是

0101 = 5 

現在讓我們採取同樣的數字,加四個零到右邊它轉移4位到左:

0101 0000 = 50 BCD 

那怎麼BCD作品。由於需要四位二進制數字來表示0到9的十進制數字,所以每個十進制數字由四位表示。關鍵是將四位數以二進制乘法或除以16,所以這就是公式中16值的原因。

因此,讓96:

0110 = 6 
1001 = 9 
1001 0110 = 96 BCD