📄 ds18b20.h
字号:
/*********************************************************************
微 雪 电 子 WaveShare http://www.waveShare.net
目 的: 建立DS18B20操作库
目标系统: 基于任何兼容C51的微处理器
应用软件: Keil C
版 本: Version 1.0
圆版时间: 2004-08-25
开发人员: SEE
说 明: 若用于商业用途,请保留此段文字或注明代码来源
深 圳 微 雪 电 子 保 留 所 有 的 版 权
*********************************************************************/
/*01010101010101010101010101010101010101010101010101010101010101010101
----------------------------------------------------------------------
版本更新记录:
版 本: Version 1.1
圆版时间: 2005-03-25
----------------------------------------------------------------------
入口参数说明:
sbit DS18B20_IO = P1^3;
----------------------------------------------------------------------
待定参数说明:
#define DELAY() {NOP();NOP();NOP();NOP();}
----------------------------------------------------------------------
对外变量说明:
bool DS18B20Err;
----------------------------------------------------------------------
对外函数说明:
----------------------------------------------------------------------
10101010101010101010101010101010101010101010101010101010101010101010*/
#ifndef DS18B20_H
#define DS18B20_H
#include "D:\C51_H\CmmC51.H"
//sbit DS18B20_IO = P1^3;
#define TRUE 1
#define FALSE 0
bool DS18B20Err = FALSE; //DS18B20Err=1:DS18B20错误,DS18B20Err=0:DS18B20正常
#define DELAY() {NOP();NOP();NOP();NOP();}
/*--------------------------------------------------------------------
函数名称:DS18B20复位
函数功能:
注意事项:无
提示说明:无
输 入:
返 回:无
--------------------------------------------------------------------*/
void reset(void)
{
DS18B20_IO=0;
delay50us(12);
DS18B20_IO=1;
}
/*--------------------------------------------------------------------
函数名称:DS18B20检测存在脉冲
函数功能:
注意事项:无
提示说明:无
全局变量:DS18B20Err
返 回:无
--------------------------------------------------------------------*/
void checkPre(void)
{
uint8 i;
//while(DS18B20_IO);
for(i=0;i<100;i++)
{
if(~DS18B20_IO)
break;
}
if(i==100)
{
DS18B20Err=TRUE;
return ; //万一出现DS18B20错误,也不至于出现程序阻塞
}
//while(~DS18B20_IO);
for(i=0;i<100;i++)
{
if(DS18B20_IO)
{
DS18B20Err=FALSE;
return ;
}
}
}
/*--------------------------------------------------------------------
函数名称:DS18B20读一个位
函数功能:
注意事项:外挂11.0592-12M晶振
提示说明:无
输 入:
返 回:一个位
--------------------------------------------------------------------*/
bool readBit(void)
{
bool dat;
DS18B20_IO=0;
DELAY();
DS18B20_IO=1;
DELAY();
DELAY();
dat=DS18B20_IO;
return(dat);
}
/*--------------------------------------------------------------------
函数名称:DS18B20读一个字节
函数功能:
注意事项:无
提示说明:无
输 入:
返 回:一个字节
--------------------------------------------------------------------*/
uint8 readByte(void)
{
uint8 i,j,dat=0;
for(i=1;i<=8;i++)
{
j=readBit();
dat=(j<<7)|(dat>>1);
}
return(dat);
}
/*--------------------------------------------------------------------
函数名称:DS18B20写一个字节
函数功能:
注意事项:无
提示说明:无
输 入:
返 回:无
--------------------------------------------------------------------*/
void writeByte(uint8 dat) //reentrant
{
uint8 j;
//uint8 testb; //用 'uint8 testb',Keil c 可能将生成错误的HEX文件
bool testb; //造成仿真正确,而已烧片错误
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb!=0)
{
DS18B20_IO=0;
DELAY();
DELAY();
DS18B20_IO=1;
delay50us(1);
}
else
{
DS18B20_IO=0;
delay50us(1);
DS18B20_IO=1;
DELAY();
DELAY();
}
}
}
/*--------------------------------------------------------------------
函数名称:DS18B20(1个)开始转换
函数功能:
注意事项:无
提示说明:无
输 入:
返 回:无
--------------------------------------------------------------------*/
void DS18B20_startup(void)
{
reset();
checkPre();
delay50us(1);
writeByte(0xcc);
writeByte(0x44);
}
/*--------------------------------------------------------------------
函数名称:DS18B20(n个)开始转换
函数功能:
注意事项:无
提示说明:无
输 入:
返 回:无
--------------------------------------------------------------------*/
/*
void DS18B20_nStartup(void)
{
}
*/
/*--------------------------------------------------------------------
函数名称:DS18B20(1个)读温度
函数功能:
注意事项:无
提示说明:无
输 入:
返 回:温度
--------------------------------------------------------------------*/
uint8 DS18B20_getTmp(void)
{
sint16 y;
reset();
checkPre();
delay50us(1);
writeByte(0xcc);
writeByte(0xbe);
y=readByte();
y+=readByte()*256;
if(y<0)
y=0xffff-y+1;
y>>=4; //相当于 y/=16;
return (uint8)y;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -