⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20user.c

📁 这段代码是关于用凌阳采集温度、并显示在数码管上的程序。
💻 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 + -