RTC的历程虽然简单,但是也发现了一个小bug. 打算做一个万年历的,发现注释和写进去的数值不对。
因为时间读出来是bcd的,读出来需要转换,写了一个接口分享给大家:
/*把bcd码转换成十进制 exp: 0x56 -> 56*/
static uint8_t bcd_to_dec(uint8_t bcd_num)
{
return ((((bcd_num & 0xf0)>>4)*10) + (bcd_num&0x0f));
}
/**
*************************************************************************
** \brief : 年月日周为10进制,不需要转换
**
**
** \param 1 : stcReadTime, 保存时间结构体
**
** \retval : en_result_t
**************************************************************************/
en_result_t Rtc_ReadDateTime_dec(stc_rtc_time_t *pstcTimeDate)
{
Rtc_ReadDateTime(pstcTimeDate);
pstcTimeDate->u8Hour = bcd_to_dec(pstcTimeDate->u8Hour);
pstcTimeDate->u8Minute = bcd_to_dec(pstcTimeDate->u8Minute);
pstcTimeDate->u8Second = bcd_to_dec(pstcTimeDate->u8Second);
return Ok;
}
看了手册,说是可以自动计算每月的天数,闰年等。闰年这个接口怎么实现?这方面打算自己写几个接口。
|
1.手册有瑕疵 2.楼主很想搞大新闻 3.作为工程师,做点小实验即可知手册瑕疵 4.作为工程师,直接用库来工作不会出任何问题 5.作为一个想搞事的工程师,这样瑕疵用起来太爽了
是楼主没看懂手册和例子,用户手册说的很明确了,RTC用的是BCD码存储,比如0x19代表的就是19年,下一年就是0x20,代表20年,建议楼主再读读手册和例子。