📄 ds18b20user.c
字号:
//======================================================================
// 文件名称: DS18B20User.c
// 功能描述: DS18B20的应用函数(API),用户可根据自己需要修改,前提是
// 用户自身了解DS18B20的命令、结构以及相关的知识
//======================================================================
#include "DS18B20Driver_IO.h"
extern void DISP(void);
extern void F_18B20_Delay(unsigned int Timers);
//=====================================================================
// 语法格式: void DS18B20_WriteByte(unsigned int Data)
// 实现功能: DS18B20字节写入子程序
// 无需修改,实际上是属于整合的程序,供其它的API调用
// 参数: Data 要写入的数值,低八位有效
// 返回值: 无
//=====================================================================
void DS18B20_WriteByte(unsigned int Data)
{
unsigned int i;
for(i=0;i<8;i++)
{
if(Data&0x0001)
F_18B20_Write_1();
else
F_18B20_Write_0();
Data = Data>>1;
}
}
//=====================================================================
// 语法格式: unsigned int DS18B20_ReadByte(void)
// 实现功能: DS18B20字节读出子程序
// 无需修改,实际上是属于整合的程序,供其它的API调用
// 参数: 无
// 返回值: 读出的字节数据,低八位有效
//=====================================================================
unsigned int DS18B20_ReadByte(void)
{
unsigned int i,Data=0;
for(i=0;i<8;i++)
{
Data = Data>>1;
Data = Data|F_18B20_Read_DQ();
}
return Data;
}
//=====================================================================
// 语法格式: unsigned int DS18B20_Initial(void)
// 实现功能: DS18B20初始化
// 包括对端口的初始化,以及对DS18B20进行一次复位(总线)
// 参数: 无
// 返回值: 初始化结果,返回0表示初始化失败
//=====================================================================
unsigned int DS18B20_Initial(void)
{
unsigned int uiTemp=0;
F_18B20_SetSystemCLK();
F_18B20_Initial_IO();
uiTemp = F_18B20_Reset();
F_18B20_RsuSystemCLK();
return uiTemp;
}
//=====================================================================
// 语法格式: float DS18B20_ReadTemp(void)
// 实现功能: 启动一次DS18B20测温,并读取测温结果,以浮点数返回
// 在本函数中,启动测温后在程序里面作了等待,以待测DS18B20
// 完成本次测温转换如用户觉得不合适,可对本函数进行个性化的
// 修改,以适应自己的应用需求
// 参数: 无
// 返回值: 测温值,浮点数 以摄氏度为单位
//=====================================================================
extern float temp;
extern int fenli(void);
extern void F_18B20_Initial_IO(void);
float DS18B20_ReadTemp(void)
{
int uiTemp=0;
float fTemp=0.0;
unsigned int Data[9];
F_18B20_SetSystemCLK();
if(F_18B20_Reset())
{
DS18B20_WriteByte(0xcc); //Skip ROM
DS18B20_WriteByte(0x44); //Start one time conver
while(F_18B20_Read_DQ()==0) //wait for converting OK
{
DISP();
uiTemp++;
}
F_18B20_Reset();
DS18B20_WriteByte(0xcc); //Skip ROM
DS18B20_WriteByte(0xbe); //Skip ROM
for(uiTemp=0;uiTemp<9;uiTemp++)
{
Data[uiTemp] = DS18B20_ReadByte();
}
F_18B20_Reset();
uiTemp = (Data[1]<<8)|Data[0];
fTemp = (float)uiTemp;
fTemp = fTemp/16;
temp=fTemp;
}
F_18B20_RsuSystemCLK();
return fTemp;
}
//=====================================================================
// 语法格式: unsigned int DS18B20_SetConfig(unsigned int Config)
// 实现功能: 设置DS18B20中的config寄存器,可通过该寄存器的设置选择温
// 度转换结果的有效位数
// 实际上本函数也属于用户自定义类型的函数,用户根据自己的
// 需求编写一些DS18B20的功能函数。
// 参数: Config 要设置的值
// 返回值: 如返回0则表示设置失败
//=====================================================================
unsigned int DS18B20_SetConfig(unsigned int Config)
{
unsigned int uiTemp = 0;
unsigned int Data[2];
F_18B20_SetSystemCLK(); //将CPU主频提升到49MHz
if(F_18B20_Reset())
{
DS18B20_WriteByte(0xcc); //Skip ROM
DS18B20_WriteByte(0xBE); //Read Scratchad
uiTemp = DS18B20_ReadByte();
uiTemp = DS18B20_ReadByte();
Data[0] = DS18B20_ReadByte();
Data[1] = DS18B20_ReadByte();
F_18B20_Reset();
DS18B20_WriteByte(0xcc); //Skip ROM
DS18B20_WriteByte(0x4E); //Write Scratchad
DS18B20_WriteByte(Data[0]);
DS18B20_WriteByte(Data[1]);
DS18B20_WriteByte(Config);
uiTemp = F_18B20_Reset();
}
F_18B20_RsuSystemCLK(); //恢复CPU主频(实际上所恢复的主频在DS18B20Driver_IO.asm中定义)
return uiTemp;
}
//=====================================================================
// 语法格式: unsigned int DS18B20_GetConfig(void)
// 实现功能: 获取DS18B20中的config寄存器的值
// 实际上本函数也属于用户自定义类型的函数,用户根据自己的
// 需求编写一些DS18B20的功能函数。
// 参数: 无
// 返回值: Config 当中的值
//=====================================================================
unsigned int DS18B20_GetConfig(void)
{
unsigned int uiTemp = 0;
F_18B20_SetSystemCLK(); //将CPU主频提升到49MHz
if(F_18B20_Reset())
{
DS18B20_WriteByte(0xcc); //Skip ROM
DS18B20_WriteByte(0xBE); //Read Scratchad
for(uiTemp=0;uiTemp<5;uiTemp++)
uiTemp = DS18B20_ReadByte();
uiTemp = F_18B20_Reset();
}
F_18B20_RsuSystemCLK(); //恢复CPU主频(实际上所恢复的主频在DS18B20Driver_IO.asm中定义)
return uiTemp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -