|
|
最近迷上了单片机,我用ds3231作了一个时钟,用gettime函数提取时间,但偶然发现时间到了16点以后就变成10点,用gethour却没有问题,把自己的程序看了很多遍都没有发现问题,不得不怀疑库函数是不是有问题,由于是菜鸟一个,壮着胆子打开ds3231.cpp看了一下相关函数,果然发现库函数gettime多转了一次码,红色部分:
void DS3231::getTime(byte& year, byte& month, byte& date, byte& DoW, byte& hour, byte& minute, byte& second) {
byte tempBuffer;
bool PM;
bool h12;
Wire.beginTransmission(CLOCK_ADDRESS);
Wire.write(uint8_t(0x00));
Wire.endTransmission();
Wire.requestFrom(CLOCK_ADDRESS, 7);
second = bcdToDec(Wire.read());
minute = bcdToDec(Wire.read());
tempBuffer = bcdToDec(Wire.read());
h12 = tempBuffer & 0b01000000;
if (h12) {
PM = tempBuffer & 0b00100000;
hour = bcdToDec(tempBuffer & 0b00011111);
} else {
hour = bcdToDec(tempBuffer & 0b00111111);
} |
|