标题: 单片机实时时钟显示 求帮理解啥情况 [打印本页]

作者: xiaohu520    时间: 2020-5-4 08:19
标题: 单片机实时时钟显示 求帮理解啥情况
帮理解一下TIME[2]是个十六进制的存储方式,那么TIME[2]/16是什么意思?结果是多少?也是十六进制的数吗,比如TIME[2]是0x59,那TIME[2]/16值是多少呢,另DIG_CODE[]也是存储的十六进制数的断码,那它的下标也是十六进制数吗

TIME[2]是十六进制数 &0x0F倒是能理解是获得低四位的数,那么就是DIG_CODE[TIME[2]&0X0F]括号里也是个十六进制的数了,数码管显示出来的是十进制数还是十六进制数

作者: HC6800-ES-V2.0    时间: 2020-5-4 09:47
没有看到全部程序,只能以我自己做过这类程序的感觉去猜了。
“时钟/日历包含在7个寄存器中,数据在时钟/日历寄存器中是二进制编码的十进制格式存储的,也就是常说的BCD码存储的。”
读懂这句话,就可以解决你的问题了。

TIME[2]/16是什么意思?就是取时间数据,将十位的数据变成显示码,显示出的当然是十进制的。如0x59/16=0x59/0x10=5;0x59&0x0f=9

作者: wulin    时间: 2020-5-4 09:52
用一个字节的高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

作者: csmyldl    时间: 2020-5-4 10:12
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
作者: xiaohu520    时间: 2020-5-5 14:22
wulin 发表于 2020-5-4 09:52
用一个字节的高8位表示10进制的十位,低8位表示10进制的个位。
比如TIME[2]是0x59,TIME[2]/16=5,TIME[2] ...

非常感谢 ,但是一个字节的高位不明白,比如0x59的高八位不存在吧 ,TIME[2]是十六进制  然后除以 16为十进制,这个过程是如何除的? 那得到的结果是十进制吗?
作者: xiaohu520    时间: 2020-5-5 14:24
HC6800-ES-V2.0 发表于 2020-5-4 09:47
没有看到全部程序,只能以我自己做过这类程序的感觉去猜了。
“时钟/日历包含在7个寄存器中,数据在时钟/ ...

非常感谢 你的感觉是对的  ,你说的16应该就是十进制的数,然后把它转成十六进制的数0x10,就是0x59/0x10 这个过程除如何细致的谢谢 ,与或倒是明白
作者: xiaohu520    时间: 2020-5-5 14:27
csmyldl 发表于 2020-5-4 10:12
TIME[2]/16即把TIME[2]中的数据右移4位得到高4位,如TIME[2]=0x59,通过TIME[2]/16后得到0x05,下标从0开 ...

非常感谢,TIME[2]除以十进制的数16,就是右移4位?这个是依据啥
作者: hantu    时间: 2020-5-5 21:15
TIME[2]是DS1302读取时间的小时(不全是这样,这要看你所用的DS1302驱动),TIME[2]/16就是小时的十位数,TIME[2]%16就是小时的个位数,因为在TIME[2]里存的是从时钟芯片里读来的BCD码表示的时间。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1