打印

ds1302问题求助

[复制链接]
1509|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码就知道了是什么意思了。

使用特权

评论回复
5
zhujey| | 2010-8-2 15:00 | 只看该作者
+48是把数字变成字符。。。。

使用特权

评论回复
6
wcsvery| | 2010-8-3 08:20 | 只看该作者
你没有把整段程序写上来不好分析~~~我猜测加48是因为用了1602液晶~~~所以要加上48才可以正确显示该有的数值~!

使用特权

评论回复
7
zjswuyunbo| | 2010-8-3 08:28 | 只看该作者
10进制与bcd码转换

使用特权

评论回复
8
wcsvery| | 2010-8-3 08:53 | 只看该作者
楼上正解~!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

0

主题

151

帖子

2

粉丝