DS18B20 51单片机仿真温度显示每隔8位整数 显示错误

2019-07-15 08:21发布

int tmpget()//获取DS18B20温度{
        int temp;        float tt;
        dsreset();//复位与应答        tmpwritebyte(0xcc);//允许不通过匹配温度计编码直接操作(总线上只有一个DS18B20)        tmpwritebyte(0xbe);//从暂存器中读取数据,第一字节为温度低8位,第二字节为温度高8位        tmp_L8=tmpreadbyte();//读取温度低8位        tmp_H8=tmpreadbyte();//读取温度高8位                temp=tmp_H8;        temp=temp<<8;        temp=temp | tmp_L8;//将高低8位都放入temp中                tt=temp*0.0625;//根据分辨率算出温度        temp=tt*100;        return temp;//将高低8位温度处理后 返回从左往右第三位位为个位        }
void display(int temperature)//LCD温度显示函数{        uchar table_temp[4];        LCD_WRITE_COM(0x80);//从初始位开始显示        if(temperature<0)        {                LCD_WRITE_DATA('-');//负温度显示负                temperature*=-1;//将负温度转为正温度便于显示        }        else                LCD_WRITE_DATA('+');//负温度显示正                table_temp[0]=temperature/10000%10;//温度百位        table_temp[1]=temperature/1000%10;//温度十位        table_temp[2]=temperature/100%10;//温度个位        table_temp[3]=temperature/10%10;//温度小数点后第一位                if(table_temp[0]==0)        {                LCD_WRITE_DATA(' ');                if(table_temp[1]==0)                        LCD_WRITE_DATA(' ');                else                        LCD_WRITE_DATA(table_temp[1]+'0');        }        else        {                LCD_WRITE_DATA(table_temp[0]+'0');                LCD_WRITE_DATA(table_temp[1]+'0');        }
        LCD_WRITE_DATA(table_temp[2]+'0');        LCD_WRITE_DATA('.');        LCD_WRITE_DATA(table_temp[3]+'0');        LCD_WRITE_DATA(0xdf);        LCD_WRITE_DATA('C');}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
awellpoint
2019-07-16 21:48
        int temp;
        char tmp_H8;//高8位温度
        char tmp_L8;//低8位温度
        temp=0x00;
        dsreset();//复位与应答
        tmpwritebyte(0xcc);//允许不通过匹配温度计编码直接操作(总线上只有一个DS18B20)
        tmpwritebyte(0xbe);//从暂存器中读取数据,第一字节为温度低8位,第二字节为温度高8位
        tmp_L8=tmpreadbyte();//读取温度低8位
        tmp_H8=tmpreadbyte();//读取温度高8位
        display_char(tmp_H8,0x80);
        display_char(tmp_L8,0x80+0x40);
        temp=tmp_H8;
        temp<<=8;
        temp|=tmp_L8;//将高低8位都放入temp中
        display_int(temp,0x80);

基本上发现问题了 我在将两个高低位放在一起后 值就变了
display_char 和display_int 出来的两个数不同

一周热门 更多>