t18b20.c

来自「18B20 测温度的C程序代码,经过测试保证可用,注意调整延时时间」· C语言 代码 · 共 102 行

C
102
字号
/*
#include "C8051F330.h"
#include "absacc.h"
#include "string.h"
#include "stdlib.h"
*/


xdata unsigned int sdata;//测温度的整数部分
xdata unsigned char xiaoshu1;//小数第一位
xdata unsigned char xiaoshu2;//小数第二位
xdata unsigned char xiaoshu;// 二位小数



void delay2(unsigned int i)    //时间片延时
{ while(i--);
}



void init_DS18b20(void)             //初始化
{ unsigned char x=0;
  DQ=1;      //DQ复位
  delay2(80); 
  DQ=0;       //单片机将DQ拉低
  delay2(80);  //精确延时大于480um
  DQ=1;       //拉高总线
  delay2(14);
  x=DQ;       //延时后 如果x=0则初始化成功 x=1则初始化失败
  delay2(20);
}


unsigned char readonechar(void)    // 读一个字节
{ unsigned char i=0;
  unsigned char dat=0;
  for(i=8;i>0;i--)
  { DQ=0;          //给脉冲信号
    dat>>=1;
	DQ=1;
	if(DQ)
	dat|=0x80;
	delay2(50);
  }
  return(dat);
}


void writeonechar(unsigned char dat)  //写一个字节
{ unsigned char i=0;
  for(i=8;i>0;i--)
  { DQ=0;
    DQ=dat&0x01;
	delay2(50);
	DQ=1;
	dat>>=1;
  }
  
}


void readtemperature(void)
{ 
   unsigned char a=0;
   unsigned char b=0;
    sdata=0;//测温度的整数部分
	xiaoshu1=0;//小数第一位
	xiaoshu2=0;//小数第二位
	xiaoshu=0;// 二位小数
  init_DS18b20();
  writeonechar(0xCC);  //跳过读序列号
  writeonechar(0x44);  //启动温度转换
  init_DS18b20();
  writeonechar(0xCC);   //
  writeonechar(0xBE);  // 读温度积存器
  a=readonechar();    //低位
  b=readonechar();    //高位
  sdata=a/16+b*16;     //整数
  
  xiaoshu1=(a&0x0f)*10/16; //小数第一位
  xiaoshu2=(a&0x0f)*100/16%10;  //小数第二位
  xiaoshu=xiaoshu1*10+xiaoshu2;  //小数
  TEMP= sdata*10+xiaoshu/10;

}




/*
void main()
{    
	PCA0MD    &= ~0x40;
	P1MDOUT   = 0x40;
    XBR1      = 0x40;
	while(1)
  { 
    readtemperature();
  }
}
*/

⌨️ 快捷键说明

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