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

📄 ds1820.c

📁 ds18b20水温控制程序
💻 C
字号:
 
#include<reg51.h>
#define uchar unsigned char
#define	uint unsigned int


uchar tplsb,tpmsb;
sbit dq=P1^0;sbit p11=P1^1; sbit p12=P1^2;   sbit p13=P1^3;		 sbit p14=P1^4;
uchar temp1,temp2,temp3;   
uchar n,m,p,q ;


void delay(uint t)
{
  uint i;
  while(t--)
  {
  	for(i=0;i<125;i++){}
  }
}


void txreset(void)
{
 uint i;
 dq=0;
 i=100;
 while(i>0) i--;
 dq=1;
 i=4;
 while(i>0) i--;

}


void rxwait(void)
{
 uint i;
 while(dq) ;
 while(~dq);
 i=4;
 while (i>0) i--;

}


bit rdbit(void)
{
 uint i;
 bit b;
 dq=0;
 i++;
 dq=1;
 i++;i++;

 b=dq;
 i=8;
 while(i>0)	i--;
 return(b);

}


uchar rdbyte(void)
{
 uchar i,j,b;
 b=0;
 for(i=1;i<=8;i++){
                   j=rdbit();
				   b=(j<<7)|(b>>1);
				   }
return(b);

}


void wrbyte(uchar b)
{
 uint i;
 uchar j;
 bit btmp;
 for(j=1;j<=8;j++)
		{
		 btmp=b&0x01;
		 b=b>>1;
		 if(btmp)
		   {
		   	dq=0;
			i++;i++;
			dq=1;
			i=8;
			while (i>0) i--;
		   }
		  else
		   {
		   	dq=0;
			i=8;
			while(i>0) i--;
			dq=1;
			i++;i++;
		   }
		}


}



void convert(void)
{
 txreset();
 rxwait();
 delay(1);
 wrbyte(0xcc);
 wrbyte(0x44);

}


 rdtemp(void)
{
 unsigned char tplsb=0;
 unsigned char tpmsb=0;
 unsigned int t=0;
 float tt=0;
 txreset();
 rxwait();
 delay(1);
 wrbyte(0xcc);
 wrbyte(0xbe);
 tplsb=rdbyte();
 tpmsb=rdbyte();

  t=tpmsb;
  t<<=8;
  t=t|tplsb;
  tt=t*0.0625;
  //t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用
  return(t);
}


void getcode(uchar x)
{
 
 switch(x)  //个位
 {
 case 0:P0=0XA0;break;
  case 1:P0=0XBB;break;
   case 2:P0=0X62;break;
    case 3:P0=0X2A;break; 
	case 4:P0=0X39;break;
	 case 5:P0=0X2C;break;
	  case 6:P0=0X24;break;
	   case 7:P0=0XBA;break; 
	   case 8:P0=0x20;break;
	    case 9:P0=0x28;break;
		 default:break;	}

}

void getcode2(uchar x)
{
 
 switch(x)  //个位
 {
 case 0:P0=0x80;break;
  case 1:P0=0x9b;break;
   case 2:P0=0x42;break;
    case 3:P0=0x0a;break; 
	case 4:P0=0x19;break;
	 case 5:P0=0x0c;break;
	  case 6:P0=0x04;break;
	   case 7:P0=0x9a;break; 
	   case 8:P0=0x00;break;
	    case 9:P0=0x08;break;
		default:break;	}

}



void display()
{
 
 P2=0xbf;
 getcode2(temp1%10);	  //   个位
 delay(2);
 P0=0xff;

 
 P2=0x7f;
 getcode(temp1/10);		  //   十位
 delay(2);
 P0=0xff;

 
 P2=0xef;
 getcode(temp2%10);
 delay(2);
 P0=0xff;

 
 P2=0xdf;
getcode(temp2/10);
 delay(2);
 P0=0xff;
}


void display2()
{
 
 P2=0xbf;
getcode2(temp3%10);	  //   个位
 delay(2);
 P0=0xff;

 
 P2=0x7f;
getcode(temp3/10);		  //   十位
 delay(2);
 P0=0xff;

 
 
}


void bijiao()
{
  if(temp1<temp3)  p14=0;
  else 	p14=1;



}


void setting()
{
 while(p13)
 {
 if(p11==0)	 {temp3+=1; delay(400);}
 if(p12==0)	 {temp3-=1;	delay(400);}		
 display2();
  }
}


void int1() interrupt 0	using 1{

 
 P2=0xbf;
 getcode2(temp3%10);	  
 delay(2);
 P0=0xff;

 
 P2=0x7f;
 getcode(temp3/10);		  
 delay(2);
 P0=0xff;
 
 IE=0x80;

 setting();
 

}



void main(void)
{
 unsigned char i=0;
  IE=0x81;
  p14=1;
  temp3=40;



   do
   {   IE=0x81;
   delay(1);
   
   convert();
   i=rdtemp();
   
   bijiao();
  display();
    
  

   

   }
  while(1);
}

⌨️ 快捷键说明

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