📄 ds18b20.h
字号:
#include "absacc.h"
sbit DQ=P1^0; //c51与DS18B20通信口
unsigned char tempL=0; //温度低八位
unsigned char tempH=0; //温度高八位
float temperature; //显示温度值
void ds18b20_delay(unsigned int time) //延时
{
unsigned int n;
n=0;
while(n<time) n++;
return;
}
Init_DS18B20(void) //初始化
{
unsigned char x=0;
DQ=1;
ds18b20_delay(8);
DQ=0;
ds18b20_delay(85);
DQ=1;
ds18b20_delay(14);
x=DQ;
ds18b20_delay(20);
}
ReadOneChar(void) //读一个字节
{
unsigned char i=0;
unsigned char dat=0;
for (i=8;i>0;i--)
{
DQ=1;
ds18b20_delay(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ) dat|=0x80;
ds18b20_delay(4);
}
return(dat);
}
WriteOneChar(unsigned char dat) //写一个字节
{
unsigned char i=0;
for (i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
ds18b20_delay(5);
DQ=1;
dat>>=1;
}
ds18b20_delay(4);
}
ReadTemperature(void) //读取温度
{
char ctempL,ctempH;
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0x44); //启动温度转换
ds18b20_delay(125);
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0xbe); //读取暂存器内容
tempL=ReadOneChar();//读取温度低字节
tempH=ReadOneChar();
if(tempH<0xf8) //温度是否小于零
temperature=((tempH*256)+tempL)* 0.0625;//大于零
else
{
ctempL=tempL;
ctempH=tempH;
temperature=(((~ctempH)*256)+(~ctempL)+1)* 0.0625;
temperature=-temperature;
}
//ds18b20_delay(200);
//return(temperature);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -