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

📄 temperature.c

📁 常用测温芯片
💻 C
字号:
#define DQ_SET  PORTA|=(1<<3)
#define DQ_CLR  PORTA&=~(1<<3) 
 
/********************/
//复位
/********************/
void  drive_Reset(void)
{
  DDRA|=(1<<3);//输出
  DQ_CLR;
  delay(800);   //480US~960US
  DQ_SET;
  delay(1); 	  // DS18B20 WAITS 15~60US
} 
/********************/
//应答
/********************/
void RWait(void)
{
	 uchar timee=0;
	 DDRA&=~(1<<3);
	 while(PINA&0X08==0x08)
	 {
	    timee++;
	    delay(1);
	    if(timee>=200)
	    break;	
	 }
   delay(150);
}

/********************/
//读数据的一个字节
/********************/
uchar Readchar(void)
{
  uchar xx;
	uchar tempdata;
  //DDRE&=~(1<<0);
	for(xx=8;xx>0;xx--)
	{ 
		 DDRA|=(1<<3);//输出时序
	   tempdata>>=1;
	   DQ_CLR;
	   delay(1);   //保持至少1US
	   DQ_SET;
	   delay(1);   //保持至少1US
	   DDRA&=~(1<<3);//读出数据
	   if(PINA&0X08) 	tempdata|=0X80;
	   delay(50);
	}
	return (tempdata);
}
/********************/
//写数据的一个字节
/********************/
void WrByte(uchar Commend)
{
	uchar xx;
	uchar tempdata;
	DDRA|=(1<<3);//输出
	for(xx=0;xx<8;xx++)
	{
	   tempdata=Commend&0x01;
	   if(tempdata)
	   {
	      /*写1*/
	      DQ_CLR;
	      delay(6);  //1~15
	      DQ_SET;
	      delay(30);//15~45 	
	   }
	   else
	   {
	   	  /*写0*/
	   	  DQ_CLR;
	   	  delay(30);//15~45
	   	  DQ_SET;
	   	  delay(40);//15~45
	   }	
	   Commend=Commend>>1;
	}
}
/********************/
//启动温度转换
/********************/
void convert(void)
{
  	drive_Reset();
  	RWait();
  	delay(1);
  	WrByte(0xcc);
  	WrByte(0x44);
}
/********************/
//读取温度 .读取之前有加700us的延时
/********************/
void RD_18b20(void)
{   
   uchar tempL=0;
   uchar tempH=0;
   drive_Reset();
  	RWait();
  	delay(1);
  	WrByte(0xcc);
  	WrByte(0xbe);
  	tempL=Readchar();
  	tempH=Readchar();
  	tempresult=tempL+(tempH<<8);
}

/**************************/
//测量温度函数
/**************************/
void RD_TEM(void)
{
    delayms(1);
    convert();
    delay(700);
    RD_18b20();
    delay(10);	
}


void show_t(void)
{
	uchar xx=0;
	uchar yy=0;
  RD_TEM();
  delayms(6000);
  xx=tempresult/100;
  yy=tempresult%100; 
  show_data(7,xx);  
  show_data(8,yy);
  //BELL(1);	
  
}

⌨️ 快捷键说明

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