📄 ds18b20s51.h
字号:
#define uchar unsigned char
#define uint unsigned int
#define byte unsigned char
#define word unsigned int
//extern unsigned char Show_temreal;
sbit DQ=P3^6;//--------------------------------根据实际情况定义端口 --***********************************
sbit DQ2=P3^5;
sbit DQ3=P3^4;
unsigned char code tab4[16][4]={{0,0,0,0},{0,6,2,5},{1,2,5,0},{1,8,7,5},
{2,5,0,0},{3,1,2,5},{3,7,5,0},{4,3,7,5},
{5,0,0,0},{5,6,2,5},{6,2,5,0},{6,8,7,5},
{7,5,0,0},{8,1,2,5},{8,7,5,0},{9,3,7,5}};
//延时
//*********** 18B20驱动 **************************
//延时
void delay(uchar useconds)
{
while(--useconds);
}
//---------复位-------------
byte ow_reset(void)
{
byte presence;
DQ = 0; //拉低总线
delay(250); // 保持 480us
delay(250);
DQ = 1; // 释放总线
delay(30); // 等待回复
presence = DQ; // 读取信号
delay(250); // 等待结束信号
return(presence); // 返回 0:正常 1:不存在
}
//----------------------------
byte ow_reset2(void)
{
byte presence;
DQ2 = 0; //拉低总线
delay(250); // 保持 480us
delay(250);
DQ2 = 1; // 释放总线
delay(30); // 等待回复
presence = DQ2; // 读取信号
delay(250); // 等待结束信号
return(presence); // 返回 0:正常 1:不存在
}
//----------------------------
byte ow_reset3(void)
{
byte presence;
DQ3 = 0; //拉低总线
delay(250); // 保持 480us
delay(250);
DQ3 = 1; // 释放总线
delay(30); // 等待回复
presence = DQ3; // 读取信号
delay(250); // 等待结束信号
return(presence); // 返回 0:正常 1:不存在
}
//从 1-wire 总线上读取一个字节
byte read_byte(void)
{
byte i;
byte value = 0;
for (i=8;i>0;i--)
{
value>>=1;
DQ = 0;
DQ = 1;
delay(2);
if(DQ)value|=0x80;
delay(6);
}
return(value);
}
//------------------------------2
//从 1-wire 总线上读取一个字节
byte read_byte2(void)
{
byte i;
byte value = 0;
for (i=8;i>0;i--)
{
value>>=1;
DQ2 = 0;
DQ2 = 1;
delay(2);
if(DQ2)value|=0x80;
delay(6);
}
return(value);
}
//-----------------------------3
//从 1-wire 总线上读取一个字节
byte read_byte3(void)
{
byte i;
byte value = 0;
for (i=8;i>0;i--)
{
value>>=1;
DQ3 = 0;
DQ3 = 1;
delay(2);
if(DQ3)value|=0x80;
delay(6);
}
return(value);
}
//向 1-WIRE 总线上写一个字节
void write_byte(char val)
{
byte i;
for (i=8; i>0; i--) // 一次写一位
{ DQ=1;
DQ = 0; //
DQ = val&0x01;
delay(30); //
DQ = 1;
val=val/2;
}
delay(70);
}
//----------------------------2
//向 1-WIRE 总线上写一个字节
void write_byte2(char val)
{
byte i;
for (i=8; i>0; i--) // 一次写一位
{ DQ2=1;
DQ2 = 0; //
DQ2 = val&0x01;
delay(30); //
DQ2 = 1;
val=val/2;
}
delay(70);
}
//----------------------------3
//向 1-WIRE 总线上写一个字节
void write_byte3(char val)
{
byte i;
for (i=8; i>0; i--) // 一次写一位
{ DQ3=1;
DQ3 = 0; //
DQ3 = val&0x01;
delay(30); //
DQ3 = 1;
val=val/2;
}
delay(70);
}
//------------------------------------------
//读取温度
//输入:ID为要读取的18B20编号,如1,2,3,
//输出:读取到的相应传感器的温度
unsigned int Read_Temperature(unsigned char ID)
{
union
{
unsigned char c[2];
unsigned int x;
}temp;
//uchar value=0;
switch(ID)
{
case 1:
ow_reset();
write_byte(0xCC); // -----------------------------Skip ROM-----------------------------------
write_byte(0xBE); // ---------------------------Read Scratch Pad-----------------------------
temp.c[1]=read_byte(); //********************Start read data*****************************
temp.c[0]=read_byte(); //**************read two byte data from device********************
ow_reset(); //-----------------------------------------reset---------------------------
write_byte(0xCC); //------------------------------------Skip ROM*****************************
write_byte(0x44); //--------------------------------- Start Conversion-----------------------
break;
case 2:
ow_reset2();
write_byte2(0xCC); // -----------------------------Skip ROM-----------------------------------
write_byte2(0xBE); // ---------------------------Read Scratch Pad-----------------------------
temp.c[1]=read_byte2(); //********************Start read data*****************************
temp.c[0]=read_byte2(); //**************read two byte data from device********************
ow_reset2(); //-----------------------------------------reset---------------------------
write_byte2(0xCC); //------------------------------------Skip ROM*****************************
write_byte2(0x44); //--------------------------------- Start Conversion-----------------------
break;
case 3:
ow_reset3();
write_byte3(0xCC); // -----------------------------Skip ROM-----------------------------------
write_byte3(0xBE); // ---------------------------Read Scratch Pad-----------------------------
temp.c[1]=read_byte3(); //********************Start read data*****************************
temp.c[0]=read_byte3(); //**************read two byte data from device********************
ow_reset3(); //-----------------------------------------reset---------------------------
write_byte3(0xCC); //------------------------------------Skip ROM*****************************
write_byte3(0x44); //--------------------------------- Start Conversion-----------------------
break;
default:break;
}
return temp.x;
}
//---------------------------****************program end here**************-----------------------
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -