![]() |
發布時間: 2020-5-4 08:19
正文摘要:幫理解一下TIME[2]是個十六進制的存儲方式,那么TIME[2]/16是什么意思?結果是多少?也是十六進制的數嗎,比如TIME[2]是0x59,那TIME[2]/16值是多少呢,另DIG_CODE[]也是存儲的十六進制數的斷碼,那它的下標也是 ... |
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 |