使用ct017d平台测试ds18b20时,我自己建立一个工程,然后把实验例程的程序复制进来,为什么不行

2019-07-15 11:48发布

运行实验例程数码管显示的是19,而我建完工程,把实验历程的源码全部复制进去,运行的结果是数码管上先显示一下19然后迅速变为5,这是为什么?求大神详解。
IMG_20170303_163426.jpg
IMG_20170303_163507.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
NUIST_XKFYT
1楼-- · 2019-07-15 13:41
 精彩回答 2  元偷偷看……
jblbin2008
2楼-- · 2019-07-15 18:43
51的芯片?先贴程序出来啊,不贴程序你光问有啥用??
Qing_S
3楼-- · 2019-07-15 21:01
#include "reg52.h"

sbit DQ = P1^4;

//单总线延时函数
#ifndef STC12  
void Delay_OneWire(unsigned int t)  //STC89C52RC
{
        while(t--);
}
#else
void Delay_OneWire(unsigned int t)  //STC12C5260S2
{
        unsigned char i;
        while(t--){
                for(i=0;i<12;i++);
        }
}
#endif

//通过单总线向DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                DQ = 0;
                DQ = dat&0x01;
                Delay_OneWire(5);
                DQ = 1;
                dat >>= 1;
        }
        Delay_OneWire(5);
}

//从DS18B20读取一个字节
unsigned char Read_DS18B20(void)
{
        unsigned char i;
        unsigned char dat;
  
        for(i=0;i<8;i++)
        {
                DQ = 0;
                dat >>= 1;
                DQ = 1;
                if(DQ)
                {
                        dat |= 0x80;
                }            
                Delay_OneWire(5);
        }
        return dat;
}

//DS18B20初始化
bit init_ds18b20(void)
{
          bit initflag = 0;
         
          DQ = 1;
          Delay_OneWire(12);
          DQ = 0;
          Delay_OneWire(80); // 延时大于480us
          DQ = 1;
          Delay_OneWire(10);  // 14
          initflag = DQ;     // initflag等于1初始化失败
          Delay_OneWire(5);
  
          return initflag;
}

//DS18B20温度采集程序:整数
unsigned char rd_temperature(void)
{
    unsigned char low,high;
    unsigned char temp;
  
          init_ds18b20();
          Write_DS18B20(0xCC);
          Write_DS18B20(0x44); //启动温度转换
          Delay_OneWire(200);

          init_ds18b20();
          Write_DS18B20(0xCC);
          Write_DS18B20(0xBE); //读取寄存器

          low = Read_DS18B20(); //低字节
          high = Read_DS18B20(); //高字节
  
          temp = high<<4;
          temp |= (low>>4);
  
          return temp;
}      
Qing_S
4楼-- · 2019-07-16 02:33
#include "reg52.h"

sbit DQ = P1^4;

//单总线延时函数
#ifndef STC12  
void Delay_OneWire(unsigned int t)  //STC89C52RC
{
        while(t--);
}
#else
void Delay_OneWire(unsigned int t)  //STC12C5260S2
{
        unsigned char i;
        while(t--){
                for(i=0;i<12;i++);
        }
}
#endif

//通过单总线向DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                DQ = 0;
                DQ = dat&0x01;
                Delay_OneWire(5);
                DQ = 1;
                dat >>= 1;
        }
        Delay_OneWire(5);
}

//从DS18B20读取一个字节
unsigned char Read_DS18B20(void)
{
        unsigned char i;
        unsigned char dat;
  
        for(i=0;i<8;i++)
        {
                DQ = 0;
                dat >>= 1;
                DQ = 1;
                if(DQ)
                {
                        dat |= 0x80;
                }            
                Delay_OneWire(5);
        }
        return dat;
}

//DS18B20初始化
bit init_ds18b20(void)
{
          bit initflag = 0;
         
          DQ = 1;
          Delay_OneWire(12);
          DQ = 0;
          Delay_OneWire(80); // 延时大于480us
          DQ = 1;
          Delay_OneWire(10);  // 14
          initflag = DQ;     // initflag等于1初始化失败
          Delay_OneWire(5);
  
          return initflag;
}

//DS18B20温度采集程序:整数
unsigned char rd_temperature(void)
{
    unsigned char low,high;
    unsigned char temp;
  
          init_ds18b20();
          Write_DS18B20(0xCC);
          Write_DS18B20(0x44); //启动温度转换
          Delay_OneWire(200);

          init_ds18b20();
          Write_DS18B20(0xCC);
          Write_DS18B20(0xBE); //读取寄存器

          low = Read_DS18B20(); //低字节
          high = Read_DS18B20(); //高字节
  
          temp = high<<4;
          temp |= (low>>4);
  
          return temp;
}
Qing_S
5楼-- · 2019-07-16 05:23
jblbin2008 发表于 2017-3-3 20:20
51的芯片?先贴程序出来啊,不贴程序你光问有啥用??

#include "reg52.h"

sbit DQ = P1^4;

//单总线延时函数
#ifndef STC12  
void Delay_OneWire(unsigned int t)  //STC89C52RC
{
        while(t--);
}
#else
void Delay_OneWire(unsigned int t)  //STC12C5260S2
{
        unsigned char i;
        while(t--){
                for(i=0;i<12;i++);
        }
}
#endif

//通过单总线向DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                DQ = 0;
                DQ = dat&0x01;
                Delay_OneWire(5);
                DQ = 1;
                dat >>= 1;
        }
        Delay_OneWire(5);
}

//从DS18B20读取一个字节
unsigned char Read_DS18B20(void)
{
        unsigned char i;
        unsigned char dat;
  
        for(i=0;i<8;i++)
        {
                DQ = 0;
                dat >>= 1;
                DQ = 1;
                if(DQ)
                {
                        dat |= 0x80;
                }            
                Delay_OneWire(5);
        }
        return dat;
}

//DS18B20初始化
bit init_ds18b20(void)
{
          bit initflag = 0;
         
          DQ = 1;
          Delay_OneWire(12);
          DQ = 0;
          Delay_OneWire(80); // 延时大于480us
          DQ = 1;
          Delay_OneWire(10);  // 14
          initflag = DQ;     // initflag等于1初始化失败
          Delay_OneWire(5);
  
          return initflag;
}

//DS18B20温度采集程序:整数
unsigned char rd_temperature(void)
{
    unsigned char low,high;
    unsigned char temp;
  
          init_ds18b20();
          Write_DS18B20(0xCC);
          Write_DS18B20(0x44); //启动温度转换
          Delay_OneWire(200);

          init_ds18b20();
          Write_DS18B20(0xCC);
          Write_DS18B20(0xBE); //读取寄存器

          low = Read_DS18B20(); //低字节
          high = Read_DS18B20(); //高字节
  
          temp = high<<4;
          temp |= (low>>4);
  
          return temp;
}
Qing_S
6楼-- · 2019-07-16 06:55
 精彩回答 2  元偷偷看……

一周热门 更多>