微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助!请问为什么我用DS18B20显示温度的时候

求助!请问为什么我用DS18B20显示温度的时候

时间:10-02 整理:3721RD 点击:
求助!请问为什么我用DS18B20显示温度的时候,一旦温度达到32度以上,LED显示屏就显示一下子跳到了48度呢?我验证过了显示部分没错,那么应该是读取的时候有问题!下面是子程序:
void read_temperature()        //读取温度
{
        uchar temp_lsb,temp_msb,temp;
        uint tempv;
        reset18B02();                         //复位
        write18B02(0xcc);                 //忽略ROM指令
        write18B02(0x44);                 //温度转换
        while(!DQ);                                 //等待转换完成
        reset18B02();                          
        write18B02(0xcc);                 
        write18B02(0xbe);                 //读取暂存器
        temp_lsb=read18B02();         //读暂存器第一个字节
        temp_msb=read18B02();         //读暂存器第二个字节
        reset18B02();
        tempv=temp_msb;                         //复位,用来停止读取数据
        tempv=tempv<<8|temp_lsb;         //将两个字节合并成一个int型
        temp=(uchar)(tempv>>4);//去掉小数部分,化成char型数据       
    if((temp_msb&0x80)==0x80)//如果是负温度
    {
          tempflag=1; //负号显示
          tempr=~temp+1; //实际温度值为读取值的补码
          tempx=fractioncode[(~temp_lsb+1)&0x0f];//取小数部分补码,将16刻度转换为10刻度,精度为0.1度
     }
     else//如果是正温度
     {
            tempflag=0;//正温度,负号不显示
            tempr=temp;//
            tempx=fractioncode[temp_lsb&0x0f]; //取小数部分,将16刻度转换为10刻度,精度为0.1度
      }             
}
为什么不行呢?

我也来坐等答案了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top