微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 用的STC15W404AS 控制DS18B20在三位数码管显示温度,一直显示59C 求助

用的STC15W404AS 控制DS18B20在三位数码管显示温度,一直显示59C 求助

时间:10-02 整理:3721RD 点击:
我没插DS18B20 也显示59C,反正通电就是这个度数,然后插上传感器时,有的时候度数闪一下,这是什么情况?是我时序不对么?
程序如下:
void Init_Ds18b20(void)     //DS18B20?send reset and initialization command
  {
  DQ = 1;                     //DQ?,?
                _nop_();
               
  DQ = 0;                    //?
                Delayus(662); // 530us   
                //        _nop_();
  DQ = 1;
                        Delayus(91);   //73us
                 Delayus(580);//   464us
DQ = 1;
               
  }
        void DS18B20_write(uchar dat)  
{  
     uchar i;  
     for(i = 8; i > 0; i--)  
     {  
         DQ = 0;  
                _nop_();
         DQ = dat & 0x01;  
                Delayus(91);  //73us
         DQ = 1;  
         dat >>= 1;  
                       
     }  
}
uchar DS18B20_data()  
{  
    uchar i=0,dat=0;  
    for (i = 8; i > 0; i--)  
    {  
                         
      DQ = 0; // ?  
                 dat >>= 1;  
   //   dat >>= 1;  
      DQ = 1; // ?  
        _nop_();        _nop_();        _nop_();      
      if(DQ)
                        {                               
        dat |= 0x80;  
                               
                        }
               
                        Delayus(75);//60us
    }  
               
    return dat;  
}  
uint read_temperature()  
{  
    uchar a=0,b=0;  
    float tt = 0;
    Init_Ds18b20();  
    DS18B20_write(0xcc); //?  
    DS18B20_write(0x44); //?     
  //        Delayms(100);
   Init_Ds18b20();
    DS18B20_write(0xcc); //?  
    DS18B20_write(0xbe); //?  
    a = DS18B20_data(); //?8?  
    b = DS18B20_data();  //?8?  
       
    wendu=b;  
    wendu<<=8;     //8
    wendu=wendu|a;  
    tt=wendu*0.0625;  
    wendu= tt*10+0.5; //?10?  
    return wendu;  
       
       
}

求助 各位大佬 这是什么问题  

先确定显示部分是否正确,是否能显示任意三位数,如果能正确显示,再看是否格式转化的问题,就是把18b20的数据转换成数码管显示是否正确,都正确的话,再查看18b20的程序,再论坛也可以找到很多例程

如果你的程序是从其他程序移植来的要注意时序问题,因为STC15W404AS是1T单片机,速度比普通51快得多。

我是看延时来的,自己用仿真得的延时应该没问题

我是看延时来的,自己用仿真得的延时应该没问题

显示没问题 就是一直显示59不对啊,我没插传感器 也显示59,插上也是,,用串口读取这个温度函数,全是FE,这是啥情况

不插传感器,单片机引脚悬空,也会由电平状态的,所以你程序读取引脚时是会由数值的,对应的引脚由没有接上拉电阻。
显示没问题的话,也要看看数值转换部分有没有问题,18b20的数据好像要转换后才能对应到相应的温度值,可以在程序里屏蔽18b20的程序,任意给一些符合18b20数据格式的数据,看是否能正确显示温度值,如果都正确了,那就查18b20的程序就行了

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

网站地图

Top