这是i2c返回的结果
小时是第三个字节,0x36,转成bcd然后10进制是36,直接超出24小时了
#include <stdio.h>
unsigned char bcd_decimal(unsigned char bcd)
{
return bcd - (bcd >> 4) * 6;
}
int main(void)
{
unsigned char buf[7] = {0x18, 0x27, 0x36, 0x00, 0x08, 0x12, 0x23};
printf("date -s %04d-%02d-%02d %02d:%02d:%02d\n",
2000 + bcd_decimal(buf[6]),
bcd_decimal(buf[5]),
bcd_decimal(buf[4]),
bcd_decimal(buf[2] & 0x3f),
bcd_decimal(buf[1]),
bcd_decimal(buf[0]));
return 0;
}
输出结果是
➜ gcc hello.c && ./a.out
date -s 2023-12-08 36:27:18
参数解析:
具体规格书:规格书
请问是什么原因导致的?
自问自答吧,看的规格书不对
找到了正确的规格书
寄存器有一位是表示12小时格式还是24小时格式的,不通的时间格式读取不一样
有需要可以私信我要修改后的代码