📄 rtc.c
字号:
#include "LZK.H"
/****************************************************************************
** 函数名称: BCDConvert()
** 功能描述: BCD转十进制程序
** 入口参数: ucBCD为待转换的BCD码
** 出口参数: 转化后的十进制数.
** 全局变量: 无.
** 调用模块: 无.
** 说明:
****************************************************************************/
uint8 BCDConvert(uint8 ucBCD)//ucBCD为待转换的BCD码;
{
unsigned char TempH, TempL;
TempH = (ucBCD&0xF0)>>4; //TempH保存十进制数的高位
TempL = ucBCD&0x0f; //TempL保存十进制数的低位
return TempH*10+TempL; //返回相应的十进制数
}
/****************************************************************************
** 函数名称: DecimalToBCD()
** 功能描述: 十进制转BCD程序
** 入口参数: ucDecimal为待转换的十进制码
** 出口参数: 转化后的BCD.
** 全局变量: 无.
** 调用模块: 无.
** 说明:
****************************************************************************/
uint8 DecimalToBCD(uint8 ucDecimal)
{
uint8 a,b,c;
a=ucDecimal/10;
b=ucDecimal%10;
c=a*16+b;
return (c);
}
/**************************************************************************
** 函数名称: RTC8563_Read()
** 功能描述: 读取时间
** 入口参数: 无
** 出口参数: 无.
** 全局变量: 无.
** 调用模块: 无.
** 说明:
****************************************************************************/
void RTC8563_Read(void)
{
SFRPAGE = 0x00;
STA = 1;
while(SMB0STA != 0x08);
SMB0DAT = 0xa2;
STA = 0;
SI = 0;
while(SMB0STA != 0x18);
SMB0DAT = 0x02;
SI = 0;
while(SMB0STA != 0x28); //重启
STA = 1;
SI = 0;
while(SMB0STA!=0x10);
SMB0DAT=0xa3;
STA = 0;
SI = 0;
while(SMB0STA != 0x40);
AA = 1;
SI = 0;
//////////////////////////////
while(SMB0STA != 0x50);//秒
RTCData[0] = SMB0DAT;
SI = 0;
SI = 0;//特殊之处
while(SMB0STA != 0x50);//分
RTCData[1] = SMB0DAT;
SI = 0;
SI = 0;//特殊之处
while(SMB0STA != 0x50);//时
RTCData[2] = SMB0DAT;
SI = 0;
SI = 0;//特殊之处
while(SMB0STA != 0x50);//日
RTCData[3] = SMB0DAT;
SI = 0;
SI = 0;//特殊之处
while(SMB0STA != 0x50);//星期
RTCData[4] = SMB0DAT;
SI = 0;
SI = 0;//特殊之处
while(SMB0STA != 0x50);//月
RTCData[5] = SMB0DAT;
AA = 0;
SI = 0;
while(SMB0STA != 0x58);//年
RTCData[6] = SMB0DAT;
STO = 1;
SI = 0;
RTCData[0] = BCDConvert(RTCData[0] & 0x7f); //秒
RTCData[1] = BCDConvert(RTCData[1] & 0x7f); //分
RTCData[2] = BCDConvert(RTCData[2] & 0x3f); //小时
RTCData[3] = BCDConvert(RTCData[3] & 0x3f); //日
RTCData[4] = BCDConvert(RTCData[4] & 0x07); //星期
RTCData[5] = BCDConvert(RTCData[5] & 0x1f); //月/世纪
RTCData[6] = BCDConvert(RTCData[6]); //年
}
/****************************************************************************
** 函数名称: RTC8563_Write()
** 功能描述: 读取时间
** 入口参数: 无
** 出口参数: 无.
** 全局变量: 无.
** 调用模块: 无.
** 说明:
****************************************************************************/
void RTC8563_Write()
{
uint8 i;
for(i=0; i<7; i++) //RTCWriteData[0~6]: 秒、分、时、日、月、星期、月、年
{
RTCData[i]=DecimalToBCD(RTCData[i]);
SFRPAGE = 0x00;
STA = 1;
STA = 1;
STA = 1;
while(SMB0STA != 0x08);
SMB0DAT = 0xa2;
STA = 0;
SI = 0;
while(SMB0STA != 0x18);
SMB0DAT = i + 2;
SI = 0;
while(SMB0STA != 0x28);
SMB0DAT = RTCData[i];
SI = 0;
SI = 0;//特殊之处
while(SMB0STA != 0x28);
STO = 1;
SI = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -