📄 18b20.c
字号:
/*******************************************************************************
********************************************************************************
*函数描述:18B20复位和初始化函数
*局部变量:
*返回参数:
********************************************************************************
*******************************************************************************/
bit Init_18b20(void)
{
bit flag;
DQ=0;
Delay_uS(29);//延时500uS
DQ=1;
Delay_uS(3);//延时76uS
if(DQ==0)
flag = 1;//发现1820
else
flag = 0;//没发现1820
Delay_uS(25);//延时420uS
DQ = 1;
return(flag);
}
/*******************************************************************************
********************************************************************************
*函数描述:向18B20写一位数据
*局部变量:
*返回参数:
********************************************************************************
*******************************************************************************/
void Write_bit_18B20(bit Count)
{
DQ=0;
if(Count==1)
DQ=1;
Delay_uS(5);//延时100uS
DQ=1;
}
/*******************************************************************************
********************************************************************************
*函数描述:向18B20写一个字节
*局部变量:
*返回参数:
********************************************************************************
*******************************************************************************/
void Write_Byte_18B20(unchar Data_18B20)
{
unchar i,Count;
for (i=0;i<8;i++)
{
Count=Data_18B20>>i;
Count&=0x01;
Write_bit_18B20(Count);
}
Delay_uS(5);//延时100uS
}
/*******************************************************************************
********************************************************************************
*函数描述:18B20读一位数据
*局部变量:
*返回参数:
********************************************************************************
*******************************************************************************/
bit Read_bit_18B20(void)
{
unchar i;
DQ = 0;
DQ = 1;
for(i=0;i<3;i++);//这个表达式的延时是15微秒
return (DQ);
}
/*******************************************************************************
********************************************************************************
*函数描述:18B20读一个字节函数
*局部变量:
*返回参数:
********************************************************************************
*******************************************************************************/
unchar Read_Byte_18B20(void)
{
unchar i,Count=0;
for(i=0;i<8;i++)
{
if(Read_bit_18B20())
Count|=0x01<<i;
Delay_uS(6);
}
return(Count);
}
/*******************************************************************************
********************************************************************************
*函数描述:18B20转换+读取温度+计算
*局部变量:
*返回参数:
********************************************************************************
*******************************************************************************/
unint Convert_Read_Count_18B20(void)
{
unchar H_18B20=0;
unchar L_18B20=0;
unint z=0;
if(Init_18b20())
{
Write_Byte_18B20(0xcc);//跳过序列号命令
Init_18b20();
Write_Byte_18B20 (0xcc); // 跳过序列号命令
L_18B20= Read_Byte_18B20();// 读取低位温度
H_18B20= Read_Byte_18B20(); //读取高位温度
z=H_18B20*0x100+L_18B20;
if(H_18B20&0x80)
{
PN_18B20=1;//温度标志位,-
z=~z+1;//取反加1
}
else
{
PN_18B20=0;//温度标志位,+
}
}
else
{
PN_18B20=0;//温度标志位,+
z=0;
}
return(z);
}
/*******************************************************************************
********************************************************************************
*函数描述:18B20计算函数
*局部变量:
*返回参数:
********************************************************************************
*******************************************************************************/
void Count_18B20(void)
{
unchar i=0;
Temperature=0;
for(i=0;i<10;i++)//读10次温度值
{
Temperature=Temperature+Convert_Read_Count_18B20()*0.0625;
}
Temperature=Temperature/10;//取平均,Temperature是个全局float
if(Temperature>=0)
{
PN=0;
}
else
{
PN=1;
Temperature=-Temperature;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -