BCD码转化为字符,你可以仔细看看该字符(1302里用得到的只有数字0~9吧),你看看他们有什么规律,
十进制 二进制 bcd ascii码 十六进制
0 0000 0000 048 0x30
1 0001 0001 049 0x31
…… …… …… …… ……
9 1001 1001 057 0x39
你可以发现,0~9没变化,只是加上0x30.当超过9时,比如10的BCD码是0001 0000,十六进制却是0x0a,所以你可以用if语句判断是否大于9.
if(x>9)
{
x=x&0x0f+0x0a;
}
先屏蔽高4位,在加10;这样x值每次超过9,就被转化a 加上 原来低四位。
如下所示:
十进制 BCD 十六进制
10…………1000 0000…………0000 1010 (10变为a)
11 …………0001 0001…………0000 1011 (11变为0x0b)
12 …………0001 0010 …………0000 1100 (12变成0x0c)
我也正在学
我建议你还是好好DS1302实时时钟芯片的工作的时序图弄清楚,另外给你接收一本书 郭天祥的51单片机,里面讲的挺好。