您的位置 首页 制造

DS18B20测温51驱动程序

includeAT89X52h>sbitDQ=P3^4;定义DS18B20总线IO16进制转10进制数ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x0

#include

sbit DQ = P3^4; //界说DS18B20总线I/O

//16进制转10进制数

uchar code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};

void Delay_DS18B20(int num)
{
while(num–) ;
}

void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
Delay_DS18B20(8); //稍做延时
DQ = 0; //单片机将DQ拉低
Delay_DS18B20(80); //准确延时,大于480us
DQ = 1; //拉高总线
Delay_DS18B20(14);
x = DQ; //稍做延时后,假如x=0则初始化成功,x=1则初始化失利
Delay_DS18B20(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;
Delay_DS18B20(4);
}
return(dat);
}

void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i–)
{
DQ = 0;
DQ = dat&0x01;
Delay_DS18B20(5);
DQ = 1;
dat>>=1;
}
}

unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;

unsigned char xiaoshu;
unsigned char tt=0;
Init_DS18B20();
WriteOneChar(0xCC); //越过读序号列号的操作
WriteOneChar(0x44); //发动温度转化
Init_DS18B20();
WriteOneChar(0xCC); //越过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器
a=ReadOneChar(); //读低8位
b=ReadOneChar(); //读高8位

t=a&0x0f;

xiaoshu=ditab[t]; //温度小数位

tt=(b<<4)|((a&0xf0)>>4); //个,十,百位数

t=tt*10+xiaoshu; //融入小数,使成为一体

//(如:tt=27℃,小数位为0.6℃,融入后为276℃。便利处理)
return(t); //回来温度值
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/261158.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部