找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

PCF8563时钟模块显示时间在oled上显示有问题

查看数: 2738 | 评论数: 6 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-7-21 09:03

正文摘要:

我写了这个代码,但是不知道为什么日期无法正常显示,其他全是正常的代码如下 #define MAIN_Fosc   11059200L  //定义主时钟 #include "STC8.H" #include "OLED.h" #include ...

回复

ID:906945 发表于 2021-7-30 19:31
hhdsdy 发表于 2021-7-21 13:25
年月等写入和读出都正常,问题只能是出在日地址错误或者数据被篡改了,8563我还没用过,看了一下程序,地 ...

谢谢谢谢我知道啦
ID:906945 发表于 2021-7-30 19:31
angmall 发表于 2021-7-21 16:13
你的放进去及取回顺序错了

谢谢谢谢我懂啦
ID:155507 发表于 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               
}



ID:88256 发表于 2021-7-21 13:25
笨学单片机 发表于 2021-7-21 11:59
对,年月,时间都可以,就是日一直显示00

年月等写入和读出都正常,问题只能是出在日地址错误或者数据被篡改了,8563我还没用过,看了一下程序,地址是自增量的,处于中间的日不应该会出错,查看程序涉及日处理的地方,都没见出错的地方,最后回归到地址上,年月日星期时分秒,按惯性思维看似没错,打开 8563的手册,才发现经验害死人,你自己估计都没认真看手册吧?

1.png (8.43 KB, 下载次数: 47)

1.png

评分

参与人数 1黑币 +30 收起 理由
admin + 30 回帖助人的奖励!

查看全部评分

ID:906945 发表于 2021-7-21 11:59
hhdsdy 发表于 2021-7-21 11:56
你的意思是日期无法正常显示?

对,年月,时间都可以,就是日一直显示00
ID:88256 发表于 2021-7-21 11:56
你的意思是日期无法正常显示?

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

Powered by 单片机教程网

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