Arduino BCD到十进制和十进制到BCD
我正在为Arduino中的RTC模块编写库,其中数据存储在BCD中。我知道十进制数是如何转换成BCD的,但在以编程方式编写时遇到了一些问题。在网上搜索后,我得到了两个公式,它们如下所示,运行良好,但无法理解它是如何计算的 1。公式1 12月至BCDArduino BCD到十进制和十进制到BCD,arduino,binary,decimal,system,bcd,Arduino,Binary,Decimal,System,Bcd,我正在为Arduino中的RTC模块编写库,其中数据存储在BCD中。我知道十进制数是如何转换成BCD的,但在以编程方式编写时遇到了一些问题。在网上搜索后,我得到了两个公式,它们如下所示,运行良好,但无法理解它是如何计算的 1。公式1 12月至BCD (value / 10 * 16) + (value % 10) val + 6 * (val / 10) 示例 DEC->40在BCD中转换为01000000,再次等于64 所以,如果我把它放进公式中,我会得到同样的结果 (40/10 * 16
(value / 10 * 16) + (value % 10)
val + 6 * (val / 10)
示例
DEC->40在BCD中转换为01000000,再次等于64
所以,如果我把它放进公式中,我会得到同样的结果
(40/10 * 16) + (40%10)
= (4*16) + 0
= 64
BCD至12月
(value / 16 * 10) + (value % 16)
val - 6 * (val >> 4)
2。公式2
12月至BCD
(value / 10 * 16) + (value % 10)
val + 6 * (val / 10)
BCD至12月
(value / 16 * 10) + (value % 16)
val - 6 * (val >> 4)
如果有人能详细解释一下,那会很有帮助的
多亏了所有预先准备的功能。正确的转换功能包括:
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