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

📄 lcd18b20.h

📁 基于51单片机的万年历
💻 H
字号:

/*******************DS18B20测温程序******************************************

运行结果会在函数ReadTemperature()保存两位十进制数字的温度值

调用时,要这样:

	 uchar temp;  设定一个无符号变量temp
	 temp=ReadTemperature();  变量temp=函数值=二位数的温度值

	 然后可以用temp参与显示工作。
***************************************************************************/

/*********************************端口定义**********************************/
sbit DQ=P3^3;   				//数据传输线接单片机的相应的引脚

/*********************************定义全局变量******************************/
unsigned char tempL=0; 			//临时变量低位(无符号字符变量)
unsigned char tempH=0;			//临时变量高位
unsigned char tempa;   			//温度值(整型变量)

/****************************************************************************
函数功能:延时子程序
入口参数:k
出口参数:
****************************************************************************/
void DS18_delay(int useconds)
 {
int s;
for (s=0; s<useconds;s++);
}

/***************************************************************************
函数功能:DS18B20初始化子程序
入口参数:
出口参数:
****************************************************************************/
unsigned char Init_DS18B20(void)
{
	unsigned char x=0;
 
  	DQ=0;             		//发送复位脉冲
  	DS18_delay(29);        	 	//延时(>480ms)
  	DQ=1;          			//拉高数据线
  	DS18_delay(3);       		//等待(15~60ms) 等待存在脉冲
    x=DQ;  //获得存在信号(用于判断是否有器件)
    DS18_delay(25);  // 等待时间隙结束
    return(x);  //返回存在信号,0 = 器件存在, 1 = 无器件
}

/****************************************************************************
函数功能:向DS18B20读一字节数据
入口参数:
出口参数:dat
****************************************************************************/
ReadOneChar(void)  			
{
	unsigned char i=0; 		
	unsigned char dat=0;
    for (i=8;i>0;i--)  		
		{
			DQ=1;
    		DS18_delay(1);
    		DQ=0;      
    		dat>>=1;//复合赋值运算,等效dat=dat>>1(dat=dat右移一位后的值)
   			DQ=1;
    		if(DQ)
   			dat|=0x80;
    		DS18_delay(4);
		}
    return(dat);
}

/****************************************************************************
函数功能:向DS18B20写一字节数据
入口参数:dat
出口参数:
****************************************************************************/
WriteOneChar(unsigned char dat)//有参函数,功能是"写",而写的内容就是括号内的参数
{ 
	unsigned char i=0; 		
	for(i=8;i>0;i--)  	
	{
		DQ=0;    	
		DQ=dat&0x01;
		DS18_delay(5);
		DQ=1;
		dat>>=1;//复合赋值运算,等效dat=dat>>1(dat=dat右移一位后的值)
	}
	DS18_delay(4);
}

/****************************************************************************
函数功能:向DS18B20读温度值
入口参数:
出口参数:temperature
****************************************************************************/
unsigned int ReadTemperature(void)
{  
	Init_DS18B20();  	//初始化,调用初始化函数
	WriteOneChar(0xcc);  		//跳过读序列号的操作,调用写函数,写0xcc指令码(跳过读序列号)
	WriteOneChar(0x44); 		//启动温度转换,调用写函数,写0x44指令码(启动温度转换)
	DS18_delay(125);   				//转换需要一点时间,延时
	Init_DS18B20(); 			//初始化,调用初始化函数
	WriteOneChar(0xcc);  		//跳过读序列号的操作,调用写函数,写0xcc指令码(跳过读序列号?
	WriteOneChar(0xbe); 		//调用写函数,写0xbe指令码,读温度寄存器(头两个值分别为温度的低位和高位)
	tempL=ReadOneChar(); 		//读出温度的低位LSB
	tempH=ReadOneChar(); 		//读出温度的高位MSB  


 	//tempH&=0x0f;//高字节和0f"与"运算,留住后4位有用值,赋给tempH
   tempa=((tempH*256)+tempL)*0.0625;  //温度转换,把高低位做相应的运算转化为实际温度,使用DS18B20温度传感器手册规定的公式,结果是十进制数值

	DS18_delay(20);

	return(tempa);//运算结果返回到函数 :ReadTemperature()调用时需要采用i=ReadTemperature(),然后再对i(任意uchar型变量)进行操作
}









⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -