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

📄 18b20.c

📁 基于DS18B20温度传感器的51单片机C程序
💻 C
字号:
/********************************************************/
/*杭州电子&计算机工作室		            		     	*/
/*http://www.hificat.com	        					*/
/*DS18B20测温程序		            					*/
/*目标器件:AT89S51	                    				*/
/*晶振:11.0592MHZ		                    			*/
/*编译环境:Keil 7.50A		                			*/
/********************************************************/


/*********************************包含头文件********************************/
#include <reg51.h>     

/*******************************共阳LED段码表*******************************/
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

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

/*********************************定义全局变量******************************/
unsigned char tempL=0; 			//临时变量低位
unsigned char tempH=0;			//临时变量高位
float temperature;     			//温度值

/****************************************************************************
函数功能:延时子程序
入口参数:k
出口参数:
****************************************************************************/
void delay(unsigned int k)
{         
	unsigned int n;     
	n=0;       
	while(n < k)      
	{n++;}        
	return;       
}         

/****************************************************************************
函数功能:数码管扫描延时子程序
入口参数:
出口参数:
****************************************************************************/
void delay1(void)
{
	int k;
	for(k=0;k<400;k++);
}

/****************************************************************************
函数功能:数码管显示子程序
入口参数:k
出口参数:
****************************************************************************/
void display(int k)
{
	P2=0xfe;			
	P0=tab[k/1000];
	delay1();
	P2=0xfd;
	P0=tab[k%1000/100];
	delay1();
	P2=0xfb;
	P0=tab[k%100/10];
	delay1();
	P2=0xf7;
	P0=tab[k%10];
	delay1();
	P2=0xff;
}

/****************************************************************************
函数功能:DS18B20初始化子程序
入口参数:
出口参数:
****************************************************************************/
Init_DS18B20(void)
{
	unsigned char x=0;
  	DQ=1;          			//DQ先置高
  	delay(8);            	//延时
  	DQ=0;             		//发送复位脉冲
  	delay(85);        	 	//延时(>480ms)
  	DQ=1;          			//拉高数据线
  	delay(14);       		//等待(15~60ms) 
}

/****************************************************************************
函数功能:向DS18B20读一字节数据
入口参数:
出口参数:dat
****************************************************************************/
ReadOneChar(void)  			
{
	unsigned char i=0; 		
	unsigned char dat=0;
    for (i=8;i>0;i--)  		
		{
			DQ=1;
    		delay(1);
    		DQ=0;      
    		dat>>=1;
   			DQ=1;
    		if(DQ)
   			dat|=0x80;
    		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;
		delay(5);
		DQ=1;
		dat>>=1;
	}
	delay(4);
}

/****************************************************************************
函数功能:向DS18B20读温度值
入口参数:
出口参数:temperature
****************************************************************************/
ReadTemperature(void)
{  
	Init_DS18B20();  			//初始化
	WriteOneChar(0xcc);  		//跳过读序列号的操作
	WriteOneChar(0x44); 		//启动温度转换
	delay(125);   				//转换需要一点时间,延时
	Init_DS18B20();  			//初始化
	WriteOneChar(0xcc);  		//跳过读序列号的操作
	WriteOneChar(0xbe); 		//读温度寄存器(头两个值分别为温度的低位和高位)
	tempL=ReadOneChar(); 		//读出温度的低位LSB
	tempH=ReadOneChar(); 		//读出温度的高位MSB  
 	//温度转换,把高低位做相应的运算转化为实际温度
	temperature=((tempH*256)+tempL)*0.0625; 
	delay(200);
	return(temperature);
}

/****************************************************************************
函数功能:主程序
入口参数:
出口参数:
****************************************************************************/     
void  main()
{ 
	float i;
	while(1)
	{
		i=ReadTemperature();
		display(i);
	}
}








⌨️ 快捷键说明

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