You've already forked M5Unit-RTC
mirror of
https://github.com/m5stack/M5Unit-RTC.git
synced 2026-05-20 10:33:20 -07:00
96 lines
2.3 KiB
C++
96 lines
2.3 KiB
C++
/*!
|
|
* @brief A programmable real-time clock module From M5Stack
|
|
* @copyright Copyright (c) 2022 by M5Stack[https://m5stack.com]
|
|
*
|
|
* @Links [Unit RTC](https://docs.m5stack.com/en/unit/rtc)
|
|
* @version V0.0.2
|
|
* @date 2022-07-29
|
|
*/
|
|
#if defined(M5_UNIT_UNIFIED_RTC_HPP)
|
|
#error "DO NOT USE it at the same time as M5UnitUnified libraries"
|
|
#endif
|
|
|
|
#ifndef _Unit_RTC_H__
|
|
#define _Unit_RTC_H__
|
|
|
|
#include <Wire.h>
|
|
#include "Arduino.h"
|
|
|
|
#define DEVICE_ADDR 0x51
|
|
|
|
struct rtc_time_type {
|
|
uint8_t Hours;
|
|
uint8_t Minutes;
|
|
uint8_t Seconds;
|
|
rtc_time_type(uint8_t hours = 0, uint8_t minutes = 0, uint8_t seconds = 0)
|
|
: Hours{hours}, Minutes{minutes}, Seconds{seconds}
|
|
{
|
|
}
|
|
};
|
|
|
|
struct rtc_date_type {
|
|
uint16_t Year;
|
|
uint8_t Month;
|
|
uint8_t Date;
|
|
uint8_t WeekDay;
|
|
rtc_date_type(uint16_t year = 2000, uint8_t month = 0, uint8_t date = 0, uint8_t weekDay = 0)
|
|
: Year{year}, Month{month}, Date{date}, WeekDay{weekDay}
|
|
{
|
|
}
|
|
};
|
|
|
|
class Unit_RTC {
|
|
private:
|
|
void Bcd2asc(void);
|
|
void DataMask();
|
|
void Str2Time(void);
|
|
void writeReg(uint8_t reg, uint8_t data);
|
|
uint8_t ReadReg(uint8_t reg);
|
|
uint8_t Bcd2ToByte(uint8_t Value);
|
|
uint8_t ByteToBcd2(uint8_t Value);
|
|
|
|
private:
|
|
/*定义数组用来存储读取的时间数据 */
|
|
uint8_t _trdata[7];
|
|
/*定义数组用来存储转换的 asc 码时间数据*/
|
|
// uint8_t asc[14];
|
|
uint8_t _addr;
|
|
TwoWire *_wire;
|
|
|
|
public:
|
|
Unit_RTC();
|
|
Unit_RTC(uint8_t addr);
|
|
void begin();
|
|
void begin(TwoWire *wire);
|
|
void begin(TwoWire *wire, uint8_t scl, uint8_t sda, uint32_t i2c_freq);
|
|
void getBm8563Time(void);
|
|
|
|
int setTime(rtc_time_type *RTC_TimeStruct);
|
|
int setDate(rtc_date_type *RTC_DateStruct);
|
|
|
|
void getTime(rtc_time_type *RTC_TimeStruct);
|
|
void getDate(rtc_date_type *RTC_DateStruct);
|
|
|
|
int setAlarmIRQ(int afterSeconds);
|
|
int setAlarmIRQ(const rtc_time_type &RTC_TimeStruct);
|
|
int setAlarmIRQ(const rtc_date_type &RTC_DateStruct, const rtc_time_type &RTC_TimeStruct);
|
|
|
|
void clearIRQ();
|
|
void disableIRQ();
|
|
|
|
public:
|
|
uint8_t Second;
|
|
uint8_t Minute;
|
|
uint8_t Hour;
|
|
uint8_t Week;
|
|
uint8_t Day;
|
|
uint8_t Month;
|
|
uint8_t Year;
|
|
uint8_t DateString[9];
|
|
uint8_t TimeString[9];
|
|
|
|
uint8_t asc[14];
|
|
};
|
|
|
|
#endif
|