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

📄 ds18b20.h

📁 DS18B20温度传感器
💻 H
字号:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uint temp;            //定义16位整型的温度数据
float f_temp;		  //定义浮点型的温度数据
sbit DQ=P1^0;         /* DS18B20单数据总线  */
void delay_ms(uint ms)
 {
  uchar x,y;
  for(x=ms;x>0;x--)
    for(y=110;y>0;y--);
 }
/*  DS18B20复位,初始化函数     */
void temp_init(void)
{
 uint i;
 DQ=1;                       //先拉高数据线
 _nop_();
 DQ=0;				 //拉低数据线
 i=103;
 while(i>0)i--;		 //延时,范围为480~~960us
 DQ=1;				 //释放数据总线
 i=4;
 while(i>0)i--;		 //延时等待,完成复位
}

/*  读取DS18B20 一位数据函数	*/
bit temp_read_bit(void)	 //按时序图
{
 uint i;
 bit dat;
 DQ=0; i++;			    //起延时作用
 DQ=1; i++;i++;		    //起延时作用
 dat=DQ;
 i=8; while(i>0)i--;
 return(dat);
}
/**   读取1Byte数据函数    **/
uchar temp_read_byte(void)
{
 uchar i,j,dat;
 dat=0;
 for(i=1;i<=8;i++)
    {
	 j=temp_read_bit();
	 dat=(j<<7)|(dat>>1);  //读出的数据最低位在前,这样刚好一个字节在dat
	} 
 return(dat);
}
/*  向DS18B20写一个字节数据的子函数  */
void temp_write_byte(uchar dat)
{
 uint i;
 uchar j; 
 bit testb;   //定义位
 for(j=0;j<8;j++)
    {
	 testb=dat&0x01;
	 dat=dat>>1;
	 if(testb==1)   //写1
	   {
	   	DQ=0;
		i++;i++;
		DQ=1;
		i=8;while(i>0)i--;
	   }
	 else
	   {
	       DQ=0;    //写0
		i=8;while(i>0)i--;
		DQ=1;
		i++;i++;
	   }
	}
}

/*  DS18B20开始获取温度并转换   */
void tempchange(void)
{
 temp_init();             //DS18B20复位,初始化函数
 delay_ms(1);
 temp_write_byte(0xcc);	  //跳过ROM指令
 temp_write_byte(0x44);	  //写温度转换指令
}

/**  读取寄存器中储存的温度数据   **/
uint get_temp()
{ 
 uchar a,b;
 temp_init();              //DS18B20复位,初始化函数
 delay_ms(1);			  
 temp_write_byte(0xcc);	   //跳过ROM指令
 temp_write_byte(0xbe);	   //发送读暂存器(内部RAM中9字节的温度数据)
 a=temp_read_byte();       //读取低八位
 b=temp_read_byte();       //读取高八位
 temp=b;
 temp<<=8;                 //把数据移到高八位
 temp=temp|a;              //把数据组合成16位
 f_temp=temp*0.0625;       //12位的数据,分辨率为0.0625℃
 temp=f_temp*100+5;           //*10表示取以位小数。+0.5是四舍五入
 f_temp=f_temp+0.05;
 return temp;
}













⌨️ 快捷键说明

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