TIME[2]是DS1302读取时间的小时(不全是这样,这要看你所用的DS1302驱动),TIME[2]/16就是小时的十位数,TIME[2]%16就是小时的个位数,因为在TIME[2]里存的是从时钟芯片里读来的BCD码表示的时间。 |
csmyldl 发表于 2020-5-4 10:12 非常感谢 ![]() ![]() |
HC6800-ES-V2.0 发表于 2020-5-4 09:47 非常感谢 你的感觉是对的 ![]() ![]() |
wulin 发表于 2020-5-4 09:52 非常感谢 ,但是一个字节的高位不明白,比如0x59的高八位不存在吧 ,TIME[2]是十六进制 然后除以 16为十进制,这个过程是如何除的? 那得到的结果是十进制吗? |
TIME[2]/16即把TIME[2]中的数据右移4位得到高4位,如TIME[2]=0x59,通过TIME[2]/16后得到0x05,下标从0开始按16进制计数,TIME[2]&0x0F得到TIME[2]中的低4位数据,如TIME[2]=0x59,通过TIME[2]&0x0F运算后得到0x09,数码管显示出来的结果跟预先预置的段显码有关,一般情况下对应显示0至F |
用一个字节的高8位表示10进制的十位,低8位表示10进制的个位。 比如TIME[2]是0x59,TIME[2]/16=5,TIME[2]&0X0F=9。 楼主看懂下面算式就明白TIME[2]/16是什么意思 0x09+0x01=0x10 0000 1001 + 0000 0001 = 0001 0000 |
没有看到全部程序,只能以我自己做过这类程序的感觉去猜了。 “时钟/日历包含在7个寄存器中,数据在时钟/日历寄存器中是二进制编码的十进制格式存储的,也就是常说的BCD码存储的。” 读懂这句话,就可以解决你的问题了。 TIME[2]/16是什么意思?就是取时间数据,将十位的数据变成显示码,显示出的当然是十进制的。如0x59/16=0x59/0x10=5;0x59&0x0f=9 |