ds1302问题求助

[复制链接]
2527|7
 楼主| 菜鸟学模电 发表于 2010-7-31 11:45 | 显示全部楼层 |阅读模式
看别人的 程序 在读到1302数据后有一个数据处理
ReadValue = Read1302(DS1302_SECOND);
Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);

不太明白是什么意思?谁能详细解释一下?输出来的不是BCD码吗?直接用就可以了吧?

还有这样用的
v_Get1302(getTimebuf);//获取DS1302内7个时间日期数据存入getTimebuf[].
time[6]=(getTimebuf[0])/16+48;//格式化时间秒
time[7]=(getTimebuf[0])%16+48;
加48是为什么?
ningling_21 发表于 2010-7-31 12:59 | 显示全部楼层
不太明白是什么意思?谁能详细解释一下?输出来的不是BCD码吗?直接用就可以了吧?

是BCD码,不过有些地方,需要转换为十进制数字,所以就要这样运算一下
 楼主| 菜鸟学模电 发表于 2010-7-31 13:41 | 显示全部楼层
第一个BCD转十进制的方法知道了
byte bcd2_hex(byte val)
{
byte i;

i = val&0x0f; //按位与,i得到低四位数。
val >>= 4; //右移四位,将高四位移到低四位的位置,得到高四位码值。
val &= 0x0f; //防止移位时高位补进1,只保留高四位码值
val *= 10; //高位码值乘以10
i += val; //然后与第四位码值相加。
return i; //将得到的十进制数返回
}

第二个的转换方法不对吧?
new1988 发表于 2010-8-2 14:00 | 显示全部楼层
48 = 0x30 你去查一下ASCII表中每个数字对应的ASCII码就知道了是什么意思了。
zhujey 发表于 2010-8-2 15:00 | 显示全部楼层
+48是把数字变成字符。。。。
wcsvery 发表于 2010-8-3 08:20 | 显示全部楼层
你没有把整段程序写上来不好分析~~~我猜测加48是因为用了1602液晶~~~所以要加上48才可以正确显示该有的数值~!
zjswuyunbo 发表于 2010-8-3 08:28 | 显示全部楼层
10进制与bcd码转换
wcsvery 发表于 2010-8-3 08:53 | 显示全部楼层
楼上正解~!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:每天坚持学习两个小时!!!

0

主题

151

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部