一乐电子

一乐电子百科

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

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 5407|回复: 6
收起左侧

[其他综合] 请教DS1302调时间,十进制转成二进制怎么转

[复制链接]
发表于 2010-12-15 11:07 | 显示全部楼层 |阅读模式
调时间的时候,
先从ds1302里面读出分钟,
然后把分钟转换成十进制t;
t++;
再把1302取消保护;
停止时钟;
写  t  ;
启动时钟;
写保护;
这样的话,加到15的时候在按 一下就变成10了,

如果直接把读出的8位二进制自加一,也不行呀!

只有是这样
先把二进制转成10进制;
++;
再把加后的值转成二进制;
把二进制写进去。

哪位能给个十进制转二进制的例子呢?
 楼主| 发表于 2010-12-15 11:08 | 显示全部楼层
这是刚才在网上找到的,看不懂他是怎么转换的

while(ss==0) //调秒
{
key=0;
timetmp[0]=readbyte(0x81)/16*10+readbyte(0x81)%16; //从1302中取出时间
shanshuo2(13,timetmp[0]); //显示时间并闪烁
keynum=jiance(); //按键检测
zj(0); //对时间进行操作
writebyte(0x80,timetmp[0]/10*16+timetmp[0]%10); //把调整过的时间写到1302中

http://hi.baidu.com/shasha90happy/blog/item/cf67aad214289b0e3af3cfaf.html

writebyte(0x80,加过的数/10*16+加过的数%10);
这样就可以转了吗?
发表于 2010-12-15 13:30 | 显示全部楼层
没有什么进制转换,只是把个位和十位进行合并与分离
发表于 2010-12-15 21:32 | 显示全部楼层
本帖最后由 chillmax 于 2010-12-15 21:37 编辑

进制转换?取模

15%2,第一位(最低位)
15/2%2,第二位
15/2/2%2,第三位
15/2/2/2%2,第四位(最后一位)
 楼主| 发表于 2010-12-18 11:42 | 显示全部楼层
关于调时间那里,我又想了个笨办法
只要一到九就让他换成15,
反正我只需要小时和分钟,别的不管了

write_clock(0x8e,0x0);//取消写保护
write_clock(0x80,0x80);//停止时钟
d=read_clock(0x83);
(d==0x09) {d=0x0f;}//d=9  d=0f        
if(d==0x19){d=0x1f;}//d=19  d=1f        
if(d==0x29){d=0x2f;}        
if(d==0x39){d=0x3f;}        
if(d==0x49){d=0x4f;}        
                                
d++;
if(d==0x5a){d=0x00;}
write_clock(0x82,d);//         写分钟



*******************************************************
发表于 2010-12-23 22:26 | 显示全部楼层
不是二制制转十进制.是BCD码转十制进,就是这个"timetmp[0]=readbyte(0x81)/16*10+readbyte(0x81)%16;

加减1后,再把十进制转入BCD码写入DS1302
writebyte(0x80,timetmp[0]/10*16+timetmp[0]%10);

中间不用停时钟的.

本版积分规则

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

GMT+8, 2024-11-1 07:44 , Processed in 0.057913 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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