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

📄 ds18b20.c

📁 自己做的单片机Proteus仿真实例
💻 C
字号:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep=P3^3;
sbit ds=P3^4;
sbit seg0=P3^5;
sbit seg1=P3^6;
sbit seg2=P3^7;
sbit seg3=P3^2;
sbit led0=P1^0;
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;
uint temp;
float f_temp;
uchar flag;
uint warn_l1=20;
uint warn_l2=50;
uint warn_h1=320;
uint warn_h2=350;
uchar code table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
void delay(uint z)
{
     uint i,j;
	 for(i=z;i>0;i--)
	    for(j=110;j>0;j--);
}
void reset()
{
     uint j;
	 ds=0;
	 j=103;
	 while(j>0)j--;
	 ds=1;
	 j=4;
	 while(j>0)j--;
}
bit read_bit()
{
     uint i;
	 bit dat;
	 ds=0;i++;
	 ds=1; i++; i++;
	 dat=ds;
	 i=8;
	 while(i>0)i--;
	 return(dat);
}
uchar read()
{
     uchar i,j,dat;
	 dat=0;
	 for(i=0;i<8;i++)
	 {
	     j=read_bit();
		 dat=dat|(j<<i);
	 }
	 return(dat);
}
void write(uchar dat)
{
     uint i;
	 uchar j;
	 bit aa;
	 for(j=1;j<=8;j++)
	 {
	      aa=dat&0x01;
		  dat=dat>>1;
		  if(aa)
		  {
		       ds=0;
			   i++;
			   i++;
			   ds=1;
			   i=8;while(i>0)i--;
		  }
		  else
		  {
		       ds=0;
			   i=8;while(i>0)i--;
			   ds=1;
			   i++;
			   i++;
		   }
	  }

}
void tempchange()
{
     reset();
	 delay(1);
	 write(0xcc);
	 write(0x44);

}
uint get_temp()
{
     int a,b;
	 reset();
	 delay(1);
	 write(0xcc);
	 write(0xbe);
	 a=read();
	 b=read();
	 flag=0;
	 b=b&0x0f;
	 if(b>8)
	 {
	     flag=1;
	     b=b&0x07;
		 b=(b*256+a);
		 temp=2047-b+1;
	  }
	  else
	  {
	     b=b&0x07;
	     temp=(b*256+a);
	  }
	  f_temp=temp*0.0625;
	  temp=(uint)(f_temp*10+0.5);
	  return(temp);
}
void display(uchar i,uchar j,uchar k)
{
	  P0=0xff;
	  seg0=0;
	  P0=table[i];
	  delay(3);
	  seg0=1;

	  P0=0xff;
	  seg1=0;
	  P0=table[j]+0x01;
	  delay(3);
	  seg1=1;

	  P0=0xff;
	  seg2=0;
	  P0=table[k];
	  delay(3);
	  seg2=1;

	  if(flag==1)
	     {
		    P0=0xff;
			seg3=0;
		    P0=0x02;
			delay(3);
			seg3=1;
		  }

}
void dis_temp(uint t)
{
      uchar i,j,k;
	  i=t/100;
	  j=t%100/10;
	  k=t%100%10;
	  display(i,j,k);
}
void warn(uint s,uchar led)
{
      uchar i;
	  i=s;
	  beep=1;
	  
	  P1=~(led);
	  while(i--)
	  {
		  dis_temp(get_temp());

	  }
	  beep=0;
	  P1=0xff;
	  i=s;		 //延时
	  while(i--)
	  {
	  	  dis_temp(get_temp());

	  }	  	     
}
void deal(uint t)
{
      uchar i;
	  if((t>warn_l1)&&(t<=warn_l2))
	  {
	       warn(40,0x02);
	   }
	   else if(t<=warn_l1)
	   {
	       warn(10,0x01);
	   }	    
	   else if((t<warn_h2)&&(t>=warn_h1))
	  {
	       warn(40,0x04);
	   }
	   else if(t>=warn_h2)
	   {
	       warn(10,0x08);
	   }
	   else
	   {
	       i=40;
		   while(i--)
		   {
		        dis_temp(get_temp());
		   }
		}

}
void init()
{
     beep=0;
	 seg0=1;
	 seg1=1;
	 seg2=1;
	 seg3=1;
	 flag=0;
}
void main()
{
     uchar i;
     init();
	 while(1)
	 {
	     tempchange();
		 for(i=10;i>0;i--)
		 dis_temp(get_temp());
		 deal(temp);
		 dis_temp(get_temp());
	  }
}

⌨️ 快捷键说明

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