#include "main.h"
/************************************************RTC demo*****************************************************************************/
while(thread_exit_flag == false){
/*************************///demo/////////*************************************************************************/
if( demo == 0)
{
demo = 1;
M41t81_WakeUp();
M41t81_GetTime(&Calendartest);
osDelay(900);
M41t81_SetTime(&Calendardate_set);
osDelay(2000);
M41t81_GetTime(&Calendartest);
}
}
/***function:m41t81操作 **********/
/***written by ********/
/***date:2022-1-14 *************/
void M41t81_WakeUp(void)
{
uint8_t temp=0;
I2C_WriteBytes(&temp,0x0c,1,0xd0); //pointer increments to non-clock address. update.
}
void M41t81_GetTime(_calendar_obj* calendar_temp){
//(m41t81_ADDRESS,0x0,RTC_DataCount,Receive_Temp);
I2C_ReadBytes(Receive_Temp,0x0,8,0xd0);
calendar_temp->sec = BCD2HEX(Receive_Temp[1]&0x7f);
calendar_temp->min = BCD2HEX(Receive_Temp[2]&0x7f);
calendar_temp->hour = BCD2HEX(Receive_Temp[3]&0x3f);
calendar_temp->w_day = BCD2HEX(Receive_Temp[5]&0x3f);
calendar_temp->w_month = BCD2HEX(Receive_Temp[6]&0x1f);
calendar_temp->w_year = BCD2HEX(Receive_Temp[7])+2000;
}
void M41t81_SetTime(_calendar_obj* calendar_temp)
{
Write_Temp[0]=0x00;
Write_Temp[1]=(HEX2BCD(calendar_temp->sec))&0x7f;
Write_Temp[2]=(HEX2BCD(calendar_temp->min))&0x7f;
Write_Temp[3]=(HEX2BCD(calendar_temp->hour))&0x3f;
Write_Temp[4]=(HEX2BCD(calendar_temp->week))&0x07;
Write_Temp[5]=(HEX2BCD(calendar_temp->w_day))&0x3f;
Write_Temp[6]=(HEX2BCD(calendar_temp->w_month))&0x1f;
Write_Temp[7]=(HEX2BCD(calendar_temp->w_year - 2000))&0x7f;
I2C_WriteBytes(Write_Temp,0x0,8,0xd0);
}
uint8_t HEX2BCD(uint8_t hex_data)//Used to coded system time from PC data.
{
uint8_t temp;
temp=(((hex_data/10)<<4)&0xf0)+((hex_data%10)&0x0f);
return temp;
}
uint8_t BCD2HEX(uint8_t bcd_data)//Used to send data to PC.
{
uint8_t temp;
bcd_data=bcd_data&0xff;
temp=((bcd_data>>4)&0x0f)*10+(bcd_data&0x0f);
return temp;
}