⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.c

📁 一个用keil 51c实现的单片机系统程序
💻 C
字号:
#include  "DS18B20.h"
void delay_18b20(unsigned int count)
{
 unsigned int i;
 while(count)
   {
    i=200;
    while(i>0) i--;
    count--;

   }  
}
void Init_DS18B20(void)
{
 unsigned int  i=0;
 unsigned char x=0;
 while(1)
 {
  DQ = 1;    //DQ复位
  delay_18b20(8);  //稍做延时
  DQ = 0;    //单片机将DQ拉低
  i=100;while(i>0) i--;
  DQ = 1;    //拉高总线
  i=6;while(i>0) i--;
  x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  x=DQ;
  x=DQ;
  x=DQ;
  if(x==0)
    {
     flag=1;
     break;
    }
 else
   {
    if(i==3) break;
    delay_18b20(30);
    flag=0;
    i++;
   }
}



unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char j=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
 {
  DQ = 1;
  DQ = 0; // 给脉冲信号
  j++;
  DQ = 1; // 给脉冲信号
  dat>>=1;
  j++;
  j++;
  if(DQ)
  dat|=0x80;
  j=10;while(j>0) j--; 
 }
 return(dat);
}

//写一个字节
void WriteOneChar(unsigned char dat)
{
 unsigned char i=0;
 unsigned char j=0;
 for (i=8; i>0; i--)
 {
  DQ = 1;
  DQ = 0;
  j++;
  j++;
  //j=10;while(j>0) j--;
  DQ = dat&0x01;
  j=10;while(j>0) j--;
  dat>>=1;
  DQ=1;
  j++;
 }
}

//读取温度
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
Init_DS18B20();
delay_18b20(1);
if(flag==1)
 {

  WriteOneChar(0xCC); // 跳过读序号列号的操作
  WriteOneChar(0x44); // 启动温度转换
  delay_18b20(200);
  Init_DS18B20();
  delay_18b20(1);
  WriteOneChar(0xCC); //跳过读序号列号的操作
  WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
  a=ReadOneChar();
  b=ReadOneChar();
  t=b;
  t<<=8;
  t=t|a;
  t>>=4;
  //tt=t*0.0625;
  //t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用
  return(t);
  }
else 
  return(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -