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

📄 18b20.txt

📁 温度传感器18B20在51单片机中的使用 程序完整
💻 TXT
字号:
#include <REG52.H>
 #include <intrins.h>
 bit flag;//复位标志
 unsigned char code displaycode[9]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F};
 unsigned char t;
 sbit DQ=P3^7;   //定义通信端口
 //sbit Key=P2^0;//按下键后开始转换
 sbit P3_6=P3^6; //复位不成功灯亮
 delay(unsigned char i);//延时函数
 Init_DS18B20(void)reentrant;//处始化函数
 WriteOneChar(unsigned char dat);//写命令
 ReadOneChar();//读温度 
 unsigned char temperature();//温度转换函数
 Display0();//显示函数
 void main()
	{   	
	while(1)
		{
		   
			 t=temperature();   				
	         Display0();//	显示函数    						 	  	
        }    
    }
  /////*****温度转换函数*****////////////////////////////
  unsigned char temperature(void)
      {
            unsigned char a,b,c=0; 
 		     unsigned char k;
              
   		Init_DS18B20();
	       
 	        WriteOneChar(0xCC); // 跳过读序号列号的操作
 			WriteOneChar(0x44); // 启动温度转换
 			
		Init_DS18B20();
			            
			WriteOneChar(0xCC); //跳过读序号列号的操作
 			WriteOneChar(0xBE); //读取温度寄存器
 			a=ReadOneChar();  //先读低八位
 			b=ReadOneChar();  //后读高八位
            
 	       c=b&0xf0;//测试温度正负
           if(c)   //若为负求其补码
           b=~b+1;
            k=(unsigned char)(b*256+a)*0.0625;
            return(k);
		      
	      }
 ///////////////****初始化函数**********//////////////////////   
Init_DS18B20(void)reentrant 
{
 DQ = 0;    //DQ拉低
 delay(120); //精确延时 大于 480us小于960us
 DQ = 1;    //拉高总线
 delay(5);//等待时间大于15小于60毫秒
 flag=DQ;      //稍做延时后 如果flag=0则初始化成功flag=1则初始化失败
 if(!flag)
{delay(35);
 DQ=1;}
 else 
  {	P3_6=0;	 //不成功重新初始化 灯亮
  Init_DS18B20();
             
  }
}
	////////////////***写命令函数*****////////////////////
			WriteOneChar(unsigned char dat)
				   {
					unsigned char i=0;
					   bit 	Test ;					      			    	
					   for(i=8;i>0;i--)
							{
							 Test=dat&0x01;  //测试写入位是零或一
							   dat>>=1;	//接着写下一位
								if(Test)		
							       {
								    DQ=0;       //写周期的开始
						   			DQ=1;	
									delay(10); 		
								   }
						    else
							    {
								  DQ=0;
								  delay(12)	;
								  DQ=1;    //释放总线
							     }					
		   		   
				   		   }
				   }
/////////////////*****读温度信息****////////////////////////////			
			ReadOneChar()
					{
					    unsigned char dat,i,k=0;
						for(i=8;i>0;i--)
						  { 
				   			DQ=0;
							DQ=1;  ///释放总线 读数据
							dat>>=1;
							if(DQ)       /////包括拉低总线的前15微秒采样
							dat|=0x80;
							delay(12);	////至少需要60微秒					 
			               }
						 return(dat);
					  }
  ///////////////*****微秒级延时 延时间为3+(n+1)*6+2**********////////////
              delay(unsigned char i)
					{
					while(i--);

					}
/////////////******显示函数******///////////////					
	  	 Display0()
            		{  unsigned char m,n; 
					      m=t/10;//温度高位
						  n=t%10;//温度低位
						 P1=0xff;
						 P1=displaycode[m];
							  P2=0xfd;
							delay(150);
						 P2=0xff;///每次显示完后送高电平
							P1=0xff;
							  P1=displaycode[n];
							  P2=0xfe;
						     delay(150);
						     P2=0xff;////每次显示完后送高电平
					}		  
	

⌨️ 快捷键说明

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