找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于单片机+DS1302按键控制时间加减的问题

查看数: 3126 | 评论数: 1 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-6-17 15:13

正文摘要:

char l_tmpdate[3]={0,9,12}; char l_tmpdisplay[8]; void Write_Ds1302( unsigned char address,unsigned char dat )      {      RST=0;     _nop_(); & ...

回复

ID:517466 发表于 2019-6-17 17:07
l_tmpdate[1]=((l_tmpdate[1]+1)/16)*10 + ((l_tmpdate[1]+1)%16);   //分加1
    if(l_tmpdate[1]>59)    l_tmpdate[1]=0;                   //判断
第一行把10进制的l_tmpdate[1]+1后,转成16进制格式数据,结果第二行中又和10进制数据比较,你确定要这么做?对于10进制的60,在你的第一行处理中将变成30+12,变成了十进制的42了,然后去和10进制的59比,结论肯定是错的,与你想要的到59分后再加1变成0的结果是不一致的。要么改成if(l_tmpdate[1]>41),要么第一行不要做转换处理,改成l_tmpdate[1]++;

另外:l_tmpdate[1]=((l_tmpdate[1]+1)/16)*10 + ((l_tmpdate[1]+1)%16);   //分加1
这样的处理不好,转换成机器码的时候,会多出许多代码。
//加处理
l_tmpdate[1]++;
if(l_tmpdate[1]>59)    l_tmpdate[1]=0;                   //判断

减处理:
if (l_tmpdate[1]==0)  
    l_tmpdate[1]=59;
else
    l_tmpdate[1]--;
这是不是和你想要的是一样的结果?
数据在写入DS1302的时候,再转换为16进制数据即可。之前的判断用十进制的处理就行。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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