查看: 2691|回复: 0

BCD和十进制之间的转换

[复制链接]
  • TA的每日心情

    2018-1-6 14:12
  • 签到天数: 121 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-3-5 20:37:18 | 显示全部楼层 |阅读模式
    分享到:


    相信刚用DS1302的朋友都遇到过在 DS1302里面输入时间的时候是按照BCD码来写入的 那么有么有什么好办法能快速理解BCD码和十进制的转换呢?那就让我来告诉你。
    首先 举个例子   BCD码表示的 0010 1001  表示十进制的  29
    那么我们如何来完成转换?
    1.  BCD(有一变量叫A)----->十进制(用B来表示)
         ( A >> 4 )*10+( A & 0x0F ) 就等于B了!  
    可能有人问了 为什么呢? 那么请看下面
    还是拿 0010 1001 来分析 0010 1001 >> 4就得到 0000 0010(低4为溢出)是十进制的2
    0010 1001 & 0000 1111 (0x0f是16进制  转换为二进制就是 0000 1111)
                0010 1001
              &
                0000 1111
    就得到      0000 1001  也就是9  所以现在 2*10+9 =29转换完成


    写成函数模式
    u8 BCD_to_DEC(u8 BCD)
    {
       return ((BCD>>4*10)+BCD&0X0F);
    }


    2.十进制转换为BCD,相信已经有人想出来了  因为这就是个逆过程
    29/10 = 2, 29 % 10=9;  2---> 0010   9-->1001
    显然 0010 1001 就是BCD的29(十进制)
    所以 2<<4+9就行了
    写成函数
    u8 DEC_to_BCD(u8 DEC)
    {
       return ((DEC/10)<<4|DEC%10);
    }
              完工undefined!

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 11:34 , Processed in 0.124756 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.