请问以下温度值处理过程该如何理解

2019-07-16 04:38发布

temp1 = Read_Temperature();//得到温度
                if((temp1 & 0x80) == 0x80) //如果温度为负值
                {       
               
                        temp2 =0x7f & ~temp1  +  (0x0f & ~c) /15;  //整数处理,需要加上小数来的借位
                        c = 0x0f & ~c + 0x01;   //小数处理
                }
                else temp2 = temp1;//如果温度为正值,不用处理
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
lovezjf234
1楼-- · 2019-07-16 04:43
就是当温度为负值的时候,18B20ram上面的数据寄存器高8位的8位置一。
lstcspring
2楼-- · 2019-07-16 06:37
0x7f & ~temp1 取出负数的值,C在哪儿定义的
1051747376
3楼-- · 2019-07-16 11:13
把C的定义说明一下
1051747376
4楼-- · 2019-07-16 14:43
 精彩回答 2  元偷偷看……
stsgch
5楼-- · 2019-07-16 20:17
uchar Read_Temperature(void)
{
        uchar i = 0,t = 0;
        Init_DS18B20();
        Write_OneChar(0xcc);         // 跳过读序号列号的操作
        Write_OneChar(0x44);         // 启动温度转换
        Init_DS18B20();
        Write_OneChar(0xcc);         //跳过读序号列号的操作
        Write_OneChar(0xbe);         //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
        a = Read_OneChar();           //读取温度值低位
        b = Read_OneChar();           //读取温度值高位
        c = 0x0f & a;                        //得到小数部分
        a = a >> 4;                                //低位右移4位
        b = b << 4;             //高位左移4位
    t = a | b;                                //得到8位温度的整数部分,最高为符号位
        return(t);
}

uchar a,b,c;

uint temp1,temp2;

请各位大侠将if语句中的两句话,具体解释一下

一周热门 更多>