不是要搞复杂,是要做 BCD 码转换。也就是说,如果将一个数的 16 进制字符串输出,就与预期的 10 十进制数据形式相同。BCD 码是“二进制编码的十进制数”的英文缩写。
例如,十进制数 10 在底层存储器中保存为 0x10,也就是 16。余类推。这样做的好处是,输出或显示的字符转换更容易。许多时钟系统都约定,时、分、秒的值采用 BCD 码。
为了实现普通数值向 BCD 码的转换,最简单的办法就是逢 10 加 6(10 进制与 16 进制的进位数值之差)。
很显然,所谓 60 秒也表示为 0x60,即 96。
下面给出新的注释和一点修改:
void SysTick_Handler(void) /* 定时处理函数 */
{
if(SysTick_CTRL & 0x10000) /* 定时时间到 */
{
if((++sec & 0xf) >= 0xa) sec += 6; /* BCD 码转换,如果个位超过 10 则加 6 进位 */
//if(sec >= 0x60) sec = 0; /* 60s时间到 */
if(sec >= 0x60) sec &= 0xf; /* 这里需要改进 */
}
}
|