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

📄 exp.c

📁 智能浇灌系统源代码
💻 C
字号:

#include <reg51.h>
#include <intrins.h>
#define uchar unsigned  char 
sbit   DQ=P1^0;			//DS18B20的数据线
bdata  uchar dat;       //用于数据收发
sbit   dat0=dat^0;		//变量dat的最低位
sbit   dat7=dat^7;		//变量dat的最高位




void  delay15(uchar n)		//15us延时函数
 { do {
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();		
		n--;
        }while(n);
  }
bit reset(void) 	//初始化DS18B20
 { bit err;
   DQ=0;			//在数据线上产生600us的低电平
   delay15(40);		
   DQ=1;			//数据线拉高
   delay15(4);	//延时60us
   err=DQ;			//读取数据线状态,err=0:复位成功
   delay15(18);	//                err=1:复位失败
   return(err);
 }

void wrbyte(uchar d)	//向DS18B20写入一个字节
 { uchar i;
   dat=d;
   for(i=8;i>0;i--)   	//循环写8位(先低位,后高位)
     { DQ=0;			    //产生15us的负脉冲
       delay15(1);
	   DQ=dat0;			//将当前数据位送数据线
	   dat=dat>>1;		//将下一位要写入的数据移到最低位
	   delay15(1);		//延时15us
       DQ=1;			    //数据线拉高,为写入下一位做准备
      }
 }

 uchar  rdbyte(void)	//从DS18B20	读取一个字节
  {  uchar i;
     dat=0;				//读出数据初值为0
     for(i=8;i>0;i--) 	//循环读8位(先低位,后高位)
     {  dat=dat>>1;   	//读出数据先右移一位
		DQ=0;           //产生1us的负脉冲
		_nop_();
        DQ=1;			//数据总线拉高
        delay15(1);     //延时15us
        dat7=DQ;		//读取数据
        delay15(4);     //延时,为读下一位做准备
      }
     return(dat);
  }    
   
void convert(void) //启动DS18B20开始温度转换
 { bit err;
   err=reset();	  //复位传感器
   wrbyte(0xcc);   //跳过多传感器识别
   wrbyte(0x44);   //启动温度转换
 }
 
int readt(void)		//读取DS18B20暂存器中的温度值
 {  uchar h,l;
    bit err;
    err=reset();	    //复位传感器
    wrbyte(0xcc); 	//跳过多传感器识别
    wrbyte(0xbe); 	//读暂存器指令
    l=rdbyte(); 	    //读温度低位
    h=rdbyte(); 	    //读温度高位
    return(h*256+l);
 }
  


⌨️ 快捷键说明

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