一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 8360|回复: 17
收起左侧

[其他综合] DS1302 BCD码怎么分离怎么转换不明白???

[复制链接]
发表于 2014-3-23 21:49 | 显示全部楼层 |阅读模式
各位大神,学习DS1302   知道1302寄存器写入与读取都是以BCD码格式读写,可是研究了一段时间,网上也有这样的转换代码,可还是不明白BCD是怎么转换的?DS1302是将16进制转BCD码?还是10进制转BCD码?现在就是搞不明白是如何转换的,BCD自己明白点,就是8421码;不明白怎么转换?请大神帮讲解一下,转换程序也没研究明白为什么要这样写,请大神们指点
发表于 2014-3-23 21:51 | 显示全部楼层
认真看DS1302的datasheet,并非BCD码
发表于 2014-3-23 21:59 | 显示全部楼层
是的,打印份说明书 就几页 看明白了 你想怎么转换怎么转换。
 楼主| 发表于 2014-3-23 22:07 | 显示全部楼层
16进制转BCD码,BCD码转16进制;BCD码转10进制,10进制转BCD码,写入1302的BCD码是分开写入的,1组 8位数(前4位)十位,(后4位)个位分别写入,可是我不会怎么转换与分离;手册里说的就是BCD码呀
发表于 2014-3-24 08:40 | 显示全部楼层
读取        uchar dat1,dat2,number;
       number=read_IIC(PCF8563,2);
       dat1=number&0x7f;
       dat2=dat1/16;                    
       dat1=dat1%16;                    
       dat1=dat1+dat2*10;
       miao=dat1;

       number=read_IIC(PCF8563,3);
       dat1=number&0x7f;
       dat2=dat1/16;                     
       dat1=dat1%16;                     
       dat1=dat1+dat2*10;
       fen=dat1;

       number=read_IIC(PCF8563,4);
       dat1=number&0x3f;
       dat2=dat1/16;                        
       dat1=dat1%16;                  
       dat1=dat1+dat2*10;
       shi=dat1;
发表于 2014-3-24 08:41 | 显示全部楼层
写入 (shi/10)<<4|(shi%10)) 就是转成了BCD码
发表于 2014-3-24 16:40 | 显示全部楼层
本帖最后由 fang3 于 2014-3-25 01:06 编辑

BCD码转10进制???BCD码其实就是十进制码了,还转什么呢,看来你还不明白吧!

BCD码转16进制  shi/16*10+shi%16
16进制转 BCD码  shi/10*16+shi%10  
BCD码相加是不能简单地加的,否则结果不对的,不像16进制数的加法的
如果汇编的简单用da a
add a,#1;   
da a   //BCD加法的十进制调整,结果也是正确的BCD码

发表于 2014-3-24 19:45 | 显示全部楼层
这个的技巧太多了,你可以直接加上30H就能直接在1602上显示了!
 楼主| 发表于 2014-3-28 18:24 | 显示全部楼层
这几天忙,有时间试试看,谢谢大家的耐心解答
发表于 2014-5-9 22:55 | 显示全部楼层
学习了学习了学习了

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-20 03:24 , Processed in 0.063483 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表