完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
switch(count) { case 1: temp=ds1302_read_byte(0x80); //读取秒数 temp=temp+1; //秒数加1 up_flag=1; //数据调整后更新标志 if((temp&0x7f)>0x59) //超过59秒,清零 temp=0; break; case 5: temp=ds1302_read_byte(0x86); //读取日数 temp=temp+1; //日数加1 up_flag=1; if(temp>0x31) temp=1; break; case 6: temp=ds1302_read_byte(0x88); //读取月数 temp=temp+1; //月数加1 up_flag=1; if(temp>0x12) temp=1; break; case 7: temp=ds1302_read_byte(0x8c); //读取年数 temp=temp+1; //年数加1 up_flag=1; if(temp>0x85) temp=0; break; default:break; 请问 if(temp>0x85) if(temp>0x12) if(temp>0x31) if((temp&0x7f)>0x59) 该怎么理解呢? temp=temp-1; //年数减1 if(temp==-1) temp=0x85 甚至还有这个????59这个整数怎么变成进制0x59来比较的??不是应该temp大于十进制的59的吗 |
|
相关推荐
7个回答
|
|
DS1302的时钟数据没有其他标志位的情况下是BCD编码,BCD编码就是4位二进制数代表一个十进制数,数字范围是0-9,所以一个字节8位就有2个BCD码,就是两位十进制数,比如0X59代表59秒,这个要拆开看,5在前,是高4位,就代表十进制的50,9在后,是低四位,就代表十进制的9,加起来就是十进制的59了
最佳答案
|
|
|
|
DS1302读出来的是BCD码,至于BCD码是什么楼主自己在百度上面搜索一下。
|
|
|
|
码制不一样
|
|
|
|
年份的0x85没看懂,0x59就是59秒,0x31就是一个月最多有31天,0x12也是12个小时
|
|
|
|
0x59 16进制不是其他数吗,我知道这是59秒,可是到底是怎么搞成等于10进制的59秒的?按照道理来说16进制的59和10进制的59不是两个完全不同的数吗,怎么居然可以作为10进制的59来比较了?不应该是大于59然后什么什么的 |
|
|
|
异世界的投影 发表于 2018-4-13 15:34 这只是一种编码方式,做一个简单的转换就行了;用来做比较的时候没有10进制的数,用0x59表示十进制的59,比较的时候也是和0x59做比较的,0x0A是十进制的10,直观上不好看,把他转换成0x10表示,直观上看起来就容易了,但是0x10在做比较的时候,0x10就是十进制的16 评分 |
|
|
|
看看,来这里学习的!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
464 浏览 0 评论
478 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
439 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
994 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1056 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11787 浏览 31 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 14:54 , Processed in 0.901105 second(s), Total 92, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号