📄 ds18b20.h
字号:
/*程序说明:温度传感器DS18B20处理函数集
作头文件用
端口说明:P3.0 DQ*/
#include <reg52.h>
#define jump_ROM 0xCC
#define start 0x44
#define read_EEROM 0xBE
unsigned int TMPH,TMPL; //温度高字节,低字节
sbit DQ=P3^0;
/*============================================================================/
*函数名称:delay
*入口参数:N
*函数功能:延时子程序,实现(16*N+24)us的延时
系统采用了11.0592MHz的时钟时,延时满足要求,其他情况需要改动
/============================================================================*/
void delayms(unsigned int N)
{
int i;
for(i=0;i<N;i++);
}
/*=============================================================================/
*函数名称:ds18b20_res
*函数功能:DS18B20初始化
*============================================================================*/
void ds18b20_res(void)
{
DQ=0;
delayms(48);
DQ=1;
delayms(5);
while(DQ);
delayms(48);
}
/*==============================================================================/
*函数名称:ds_read_bit
*入口参数:无;返回接收的数据
*函数功能:读1bit子程序
/==============================================================================*/
unsigned char ds_read_bit(void)
{
unsigned char i;
DQ=0;
DQ=1;
for(i=0;i<3;i++);
return(DQ);
}
/*================================================================================/
*函数名称:ds_write_bit
*入口参数:bitval
*函数功能:写1bit子程序
/=================================================================================*/
void ds_write_bit(unsigned char bitval)
{
DQ=0;
if(bitval==1);
DQ=1;
delayms(5);
DQ=1;
}
/*===============================================================================/
*函数名称:ds_write_byte
*入口参数:val
*函数功能:写1byte子程序
/================================================================================*/
void ds_write_byte(unsigned char val)
{
unsigned char i,temp;
for(i=0;i<8;i++)
{
temp=val>>i;
temp=temp&0x01;
ds_write_bit(temp);
delayms(5);
}
}
/*=============================================================================/
*函数名称:ds_read_byte
*入口参数:无
*返回值:接收的数据value
*函数功能:读一个byte子程序
/==============================================================================*/
unsigned char ds_read_byte(void)
{
unsigned char i,temp,receive_data;
receive_data=0;
for(i=0;i<8;i++)
{
temp=ds_read_bit();
receive_data=(temp<<7)|(receive_data>>1);
delayms(5);
}
return(receive_data);
}
/*==========================================================================/
*函数名称:getTemValue
*入口参数:无
*返回值:value
*函数功能:取得温度值
/==========================================================================*/
void get_TemValue(void)
{
unsigned int value;
float t;
ds18b20_res();
ds_write_byte(jump_ROM);
ds_write_byte(start);
ds18b20_res();
ds_write_byte(jump_ROM);
ds_write_byte(read_EEROM);
TMPL=ds_read_byte();
TMPH=ds_read_byte();
value=TMPH;
value<<=8;
value|=TMPL;
t=value*0.0625;
TMPH=t;
TMPL=(t-TMPH)*10+0.5;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -