我需要在此函数中添加从 dec 到 hex 的转换,但失败了。
void AB1805::set_minute(const uint8_t value)
{
_minute = value % MAX_MINUTE;
write_rtc_register(MINUTE_REGISTER, _minute);
}
我试过了
void AB1805::set_minute(const uint8_t value)
{
_minute = value % MAX_MINUTE;
write_rtc_register(MINUTE_REGISTER, dec_hex(_minute,2));
}
uint8_t AB1805::dec_hex(uint8_t tens, uint8_t digits)
{
uint8_t ret;
ret = (tens<<4) + digits;
return ret;
}
答案 0 :(得分:1)
十六进制和十进制表示法只是表示相同值的两种不同方式。
set_minute(255);
与 set_minute(0xFF);
或 set_minute(0b11111111);
如果您想要以特定格式表示该数字的字符串,则只需指定一种格式。如果您只想在代码中使用该值,则不需要。
答案 1 :(得分:0)
通常,RTC 以 BCD 格式存储数据
uint8_t toBCD(uint8_t val) { // expects a value 0 .. 99
return (val%10 & 0x0F) | (val/10 << 4); // returns 0x00 .. 0x99
}
没有错误检查,就像在 Arduino 世界中一样。