标题: 关于单片机+DS1302按键控制时间加减的问题 [打印本页]

作者: 佩西范    时间: 2019-6-17 15:13
标题: 关于单片机+DS1302按键控制时间加减的问题
char l_tmpdate[3]={0,9,12};
char l_tmpdisplay[8];
void Write_Ds1302( unsigned char address,unsigned char dat )     
{
     RST=0;
    _nop_();
     SCK=0;
    _nop_();
     RST=1;   
       _nop_();                    //启动
     Write_Ds1302_Byte(address);    //发送地址
     Write_Ds1302_Byte(dat);        //发送数据
     RST=0;                      //恢复
}

void amin()
{
    l_tmpdate[1]=((l_tmpdate[1]+1)/16)*10 + ((l_tmpdate[1]+1)%16);   //分加1
    if(l_tmpdate[1]>59)    l_tmpdate[1]=0;                   //判断
    l_tmpdate[1]=l_tmpdate[1]%10+l_tmpdate[1]/10*16;   //转十六进制
    Write_Ds1302(0x8E,0X00);          //开写保护
    Write_Ds1302(0x82,l_tmpdate[1]);  //写分寄存器
    Write_Ds1302(0x8E,0x80);           //关写保护
}
void bmin()
{
    l_tmpdate[1]=((l_tmpdate[1]-1)/16)*10 + ((l_tmpdate[1]-1)%16);   //分减1
    if(l_tmpdate[1]<0)    l_tmpdate[1]=59;                   //判断
    l_tmpdate[1]=l_tmpdate[1]%10+l_tmpdate[1]/10*16;   //转十六进制
    Write_Ds1302(0x8E,0X00);          //开写保护
    Write_Ds1302(0x82,l_tmpdate[1]);  //写分寄存器
    Write_Ds1302(0x8E,0x80);           //关写保护
}

上面是我的相关代码,按键控制,加时间正常显示,减少时,时间从我8减少到0正常,随后变跳到5,在0-5范围内循环



WM~95WUKQC$JR(Y7I`4)JX8.png (146.23 KB, 下载次数: 44)

WM~95WUKQC$JR(Y7I`4)JX8.png

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





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1