• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

C51和DS1302通信为什么要把时间除以16

98fbf4496bece9d7 2018-08-26 浏览量:2657
void LcdDisplay()
{
    LcdWriteCom(0x80+0X40);
    LcdWriteData('0'+TIME[2]/16);                //时
    LcdWriteData('0'+(TIME[2]&0x0f));                
    LcdWriteData('-');
    LcdWriteData('0'+TIME[1]/16);                //分
    LcdWriteData('0'+(TIME[1]&0x0f));    
    LcdWriteData('-');
    LcdWriteData('0'+TIME[0]/16);                //秒

    LcdWriteData('0'+(TIME[0]&0x0f));


为什么TIME[ ]每次都要除16在&上0f

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • /16相当于取TIM[]的高四位,&0x0F则是取低四位, '0'+则是将数据转换为对应的ASCII码

    • 发布于 2018-08-27
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:16
  • 1302读取的是bcd码 需要进行转换 这就是转换用的一步
    • 发布于2018-08-27
    • 举报
    • 评论 0
    • 1
    • 0

  • 除以16相当于移位,向右移4位
    • 发布于2018-08-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 除以16,相当于向右移四位,然后去除时间位的偏移量,最后加上‘0’的这个基准值,就是时间相应位的数值。
    • 发布于2018-08-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 不是除以16.是求高低位。
    • 发布于2018-08-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 对于一个int char或者unsigned char型变量,除以16是将整个数向左移四位,&0xf是取最低四位的数值,两个结合使用就是取这个数的第7~第3位的BCD数值。比如你int a=0xab;这么做就把当中第7位~第3位的1010取出来了,即a=0xa;

    • 发布于2018-08-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 因为BCD编码只需要4位,除16就是取高四位
    • 发布于2018-08-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个DS1302输出的是BCD码,在转换的时候只需要取高四位的
    • 发布于2018-08-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个除以16再取低四位的方式是一种bcd转byte字节码的手段,bcd码只有低四位是有效的。
    • 发布于2018-08-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个相当于直接取高四位,这个低位的数据直接丢弃
    • 发布于2018-09-17
    • 举报
    • 评论 0
    • 0
    • 0

  • BCD码是是只有低四位有效,通过这样的操作可以获取低四位的数据
    • 发布于2018-09-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 这是除运算,直接用移位的效率会更高
    • 发布于2018-09-22
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

C51和DS1302通信为什么要把时间除以16