发现极客知识库提供的arduino ds3231库函数似乎有点问题,请大侠指教。
最近迷上了单片机,我用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);
} 的确是BCD码解码重复了,导致通过gettime函数得到的小时数出现问题,我将红色部分的代码做了修改,问题解决:
tempBuffer = (Wire.read(); 不错啊,支持一下!!! 初学者学习 既然发现了这个BUG,库函数是不是要更改一下,我发现现在库函数还是错的。 是啊,DS3231口可像有问题的,在20:00以后,十位数“2”变为“0”,无法显示20:00,21:00,23:00时间! 求一个arduino DS3231的库
页:
[1]