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进制数据即可。之前的判断用十进制的处理就行。 |