hhdsdy 发表于 2021-7-21 13:25 谢谢谢谢我知道啦 |
angmall 发表于 2021-7-21 16:13 谢谢谢谢我懂啦 |
你的放进去及取回顺序错了![]() /******************************************************************* 功能描述:读RTC函数 入口参数:无 返回值:无 ********************************************************************/ void ReadRTC(void) { P_SW2 |= 0x80; //将EAXFR位置1,以访问PWM在扩展RAM区的特殊功能寄存器 I2C_Start(); I2C_SendData(0xA2); I2C_RecvACK(); I2C_SendData(0x02); I2C_RecvACK(); I2C_Start(); I2C_SendData(0xA3); I2C_RecvACK(); tmp[6] =I2C_RecvData(); second = ((tmp[6] >> 4) & 0x07) * 10 + (tmp[6] & 0x0f);//秒 I2C_SendACK(); tmp[5] =I2C_RecvData(); minute = ((tmp[5] >> 4) & 0x07) * 10 + (tmp[5] & 0x0f); I2C_SendACK(); tmp[4] =I2C_RecvData(); hour = ((tmp[4] >> 4) & 0x03) * 10 + (tmp[4] & 0x0f); I2C_SendACK(); tmp[3] =I2C_RecvData(); week = tmp[3]; <-------- 日期值 I2C_SendACK(); tmp[2] =I2C_RecvData(); date = ((tmp[2] >> 4) & 0x03) * 10 + (tmp[2] & 0x0f); <--------星期值 I2C_SendACK(); tmp[1] =I2C_RecvData(); month = ((tmp[1] >> 4) & 0x03) * 10 + (tmp[1] & 0x0f); I2C_SendACK(); tmp[0] =I2C_RecvData(); year = ((tmp[0] >> 4) & 0x03) * 10 + (tmp[0] & 0x0f); I2C_SendNAK(); I2C_Stop(); P_SW2 &= 0x7F; //将EAXSFR位置0,恢复访问XRAM } /*************************************************************************************** 功能描述:写RTC函数 入口参数:无 返回值:无 ***************************************************************************************/ void WriteRTC(void) { tmp[0] = ((timedate[0] / 10) << 4) + (timedate[0] % 10);//年 tmp[1] = ((timedate[1] / 10) << 4) + (timedate[1] % 10);//月 tmp[2] = ((timedate[2] / 10) << 4) + (timedate[2] % 10);//日 tmp[3] = timedate[3]; //星期 tmp[4] = ((timedate[4] / 10) << 4) + (timedate[4] % 10);//小时 tmp[5] = ((timedate[5] / 10) << 4) + (timedate[5] % 10);//分钟 tmp[6] = ((timedate[6] / 10) << 4) + (timedate[6] % 10);//秒 P_SW2 |= 0x80; //将EAXFR位置1,以访问PWM在扩展RAM区的特殊功能寄存器 I2C_Start(); I2C_SendData(SLAW); //发送设备地址+写命令 I2C_RecvACK(); I2C_SendData(0x02); //发送存储地址 I2C_RecvACK(); I2C_SendData(tmp[6]); //设置秒值 I2C_RecvACK(); I2C_SendData(tmp[5]); //设置分钟值 I2C_RecvACK(); I2C_SendData(tmp[4]); //设置小时值 I2C_RecvACK(); I2C_SendData(tmp[3]); //设置星期值 <-------- 日期值 I2C_RecvACK(); I2C_SendData(tmp[2]); //设置日期值 <--------星期值 I2C_RecvACK(); I2C_SendData(tmp[1]); //设置月值 I2C_RecvACK(); I2C_SendData(tmp[0]); //设置年值 I2C_RecvACK(); I2C_Stop(); P_SW2 &= 0x7F; //将EAXSFR位置0,恢复访问XRAM } |
hhdsdy 发表于 2021-7-21 11:56 对,年月,时间都可以,就是日一直显示00 |
你的意思是日期无法正常显示? |