找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2058|回复: 7
收起左侧

单片机实时时钟显示 求帮理解啥情况

[复制链接]
ID:90619 发表于 2020-5-4 08:19 | 显示全部楼层 |阅读模式
33.png 帮理解一下TIME[2]是个十六进制的存储方式,那么TIME[2]/16是什么意思?结果是多少?也是十六进制的数吗,比如TIME[2]是0x59,那TIME[2]/16值是多少呢,另DIG_CODE[]也是存储的十六进制数的断码,那它的下标也是十六进制数吗

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

使用道具 举报

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

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

使用道具 举报

ID:213173 发表于 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
回复

使用道具 举报

ID:235200 发表于 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
回复

使用道具 举报

ID:90619 发表于 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为十进制,这个过程是如何除的? 那得到的结果是十进制吗?
回复

使用道具 举报

ID:90619 发表于 2020-5-5 14:24 | 显示全部楼层
HC6800-ES-V2.0 发表于 2020-5-4 09:47
没有看到全部程序,只能以我自己做过这类程序的感觉去猜了。
“时钟/日历包含在7个寄存器中,数据在时钟/ ...

非常感谢 你的感觉是对的  ,你说的16应该就是十进制的数,然后把它转成十六进制的数0x10,就是0x59/0x10 这个过程除如何细致的谢谢 ,与或倒是明白
回复

使用道具 举报

ID:90619 发表于 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位?这个是依据啥
回复

使用道具 举报

ID:462827 发表于 2020-5-5 21:15 | 显示全部楼层
TIME[2]是DS1302读取时间的小时(不全是这样,这要看你所用的DS1302驱动),TIME[2]/16就是小时的十位数,TIME[2]%16就是小时的个位数,因为在TIME[2]里存的是从时钟芯片里读来的BCD码表示的时间。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表