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

📄 ds18b20.c

📁 数字温度传感器ds18b20的精简c语言程序
💻 C
字号:
#include <AT89X52.H>
#include <INTRINS.h>


sbit DQ =P1^4;

//延时函数

void delay(unsigned int i)
{
	for(i;i>0;i--);
}

//初始化函数
bit Init_DS18B20(void)
{
	DQ = 0;    //单片机将DQ拉低
	delay(255); //精确延时 大于 480us
	DQ = 1;    //拉高总线
	delay(60);
	return(DQ);      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
	delay(200);
}
//读一个字节
unsigned char readdatafromds18b20(void)
{
  	unsigned char i;
 	 unsigned char j;
 	 unsigned char temp;

 	 temp=0;
 	 for(i=0;i<8;i++)
   	 {
     	 temp=_cror_(temp,1);
   	  	 DQ=0;
     	 _nop_();
     	 _nop_();
     	 DQ=1;
     	 for(j=10;j>0;j--);
      	 if(DQ==1)
           {
         	 temp=temp | 0x80;
           }
         else
          {
            temp=temp | 0x00;
          }
      for(j=200;j>0;j--);
    }
  return(temp);
}
void writecommandtods18b20(unsigned char command)
{
  	unsigned char i;
  	unsigned char j;
  
  	for(i=0;i<8;i++)
    	{
      		if((command & 0x01)==0)
        	{
        	  	DQ=0;
          		for(j=35;j>0;j--);
         	    DQ=1;
       		 }
        	else
          	 {
            	DQ=0;
            	for(j=2;j>0;j--);
            	DQ=1;
            	for(j=33;j>0;j--);
          	 }
         command=_cror_(command,1);      
        }
}
//读取温度
unsigned int ReadTemperaturefromds18b20(void)
{
	unsigned char a=0;
	unsigned char b=0;
	unsigned int t=0;
	float tt=0;
	Init_DS18B20();
	writecommandtods18b20(0xCC); // 跳过读序号列号的操作
	writecommandtods18b20(0x44); // 启动温度转换
	Init_DS18B20();
	writecommandtods18b20(0xCC); //跳过读序号列号的操作
	writecommandtods18b20(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
	a=readdatafromds18b20();
	b=readdatafromds18b20();
	t=b;
	t<<=8;
	t=t|a;
	tt=t*0.0625;
	//t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用
	return(tt);
}

⌨️ 快捷键说明

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