BCD到十进制和十进制到BCD

时间:2017-08-12 22:33:23

标签: arduino binary decimal system bcd

我正在为 Arduino 中的 RTC模块编写,其中数据存储在BCD中。我知道如何将Decimal数转换为BCD,但在以编程方式编写时遇到一些问题。在搜索互联网后,我得到了两个公式,如下所示,工作完美,但无法理解它是如何计算的。

1。一级方程式

DEC到BCD

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

示例

DEC - > 40 BCD 中转换为 01000000 ,再次等于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 个答案:

答案 0 :(得分:1)

正确的转换功能是:

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

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

为什么这样做?让我们取一个数字5.在二进制中,它是

0101 = 5 

现在让我们取相同的数字,通过在右边添加四个零将它向左移动四个位置:

0101 0000 = 50 BCD

BCD是如何工作的。由于它需要四个二进制数字来表示0到9的十进制数字,因此每个十进制数字由四位表示。关键是在二进制乘法中移位四个位置或除以16 ,这是公式中16值的原因。

所以让我们采取96:

0110 = 6
1001 = 9
1001 0110 = 96 BCD