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');}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。