4、sd3088.c
/*
*SD3088时钟芯片 读写
*文件 sd3088.h
*作者 于
*麦知 www.mazclub.com
*版本 v1.0
*/
#include "sd3088.h"
extern I2C_HandleTypeDef hi2c1;
Time Time_sd3088 = {0x55, 0x59, 0x14, 0x01, 0x12, 0x11, 0x14}; //初始化时间结构体变量(设置时间:2014年11月12日 14:59:55 星期一)
uint8_t rtc_data[8]; //通用数据缓存器
uint8_t sram[8]; //通用数据缓存器
uint8_t pdata;
void read_rtc(void)
{
// 读取时间
pdata = 0;
if(HAL_I2C_Master_Transmit(&hi2c1, 0x64, &pdata, 1, 1) == HAL_OK)
if(HAL_I2C_Master_Receive(&hi2c1, 0x65, &rtc_data[0], 7, 1) == HAL_OK) {
Time_sd3088.second = BCD2DEC(rtc_data[0] & 0x7f);
Time_sd3088.minute = BCD2DEC(rtc_data[1] & 0x7f);
Time_sd3088.hour = BCD2DEC(rtc_data[2] & 0x1f);
Time_sd3088.week = BCD2DEC(rtc_data[3] & 0x07);
Time_sd3088.day = BCD2DEC(rtc_data[4] & 0x3f);
Time_sd3088.month = BCD2DEC(rtc_data[5] & 0x1f);
Time_sd3088.year = BCD2DEC(rtc_data[6]);
}
// 电量
pdata = 0x1b;
if(HAL_I2C_Master_Transmit(&hi2c1, 0x64, &pdata, 1, 1) == HAL_OK)
if(HAL_I2C_Master_Receive(&hi2c1, 0x65, &rtc_data[7], 1, 1) == HAL_OK) {
Time_sd3088.quantity = BCD2DEC(rtc_data[7]);
}
#ifdef DEBUG
printf("%d-%d-%d,week %d, %d:%d:%d, qualit:%d\r\n",Time_sd3088.year,Time_sd3088.month,Time_sd3088.day, \
Time_sd3088.week,Time_sd3088.hour,Time_sd3088.minute,Time_sd3088.second, Time_sd3088.quantity);
#endif
} |