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

📄 ds18.c

📁 自己做的单片机Proteus仿真实例
💻 C
字号:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep=P3^3;
sbit ds=P3^4;
sbit lcdrs=P3^6;
sbit lcden=P3^7;
sbit led0=P1^0;
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;
uint temp,qian,bai,shi,ge;
float f_temp;
uchar flag;
int warn_l1=20;
int warn_l2=50;
int warn_h1=320;
int warn_h2=350;
uchar  code table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
uchar  code  table1[]="Voltage:";
void delay(uint z)
{
     uint i,j;
	 for(i=z;i>0;i--)
	    for(j=110;j>0;j--);
}
void delayus(uint i)
{ while(i--); }   
void write_com(uchar com)
{
     lcdrs=0;
	 P0=com;
	 delay(5);
	 lcden=1;
	 lcden=0;
}
void write_data(uchar date)
{
     lcdrs=1;
	 P0=date;
	 delay(5);
	 lcden=1;
	 lcden=0;
}
void reset()
{
	 ds=1;
	 delayus(4);
	 ds=0;
	 delayus(100);
	 ds=1;
	 delayus(40);
	
}

uchar read()
{
     uchar i=0;
	 uchar dat=0;
	 for (i=8;i>0;i--)
	 {    
	      ds=0;            //给脉冲信号
		  dat>>=1;
		  ds=1;            //给脉冲信号
		  if(ds)
		  dat|=0x80;
		  delayus(10);
	 }
 	return(dat);
}
void write(uchar dat)
{
    uchar i=0;
    for(i=8;i>0;i--)
    { 
	     ds=0;
         ds=dat&0x01;
         delayus(10);
         ds=1;
         dat>>=1;
    }

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

}
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=f_temp*10+0.5;
	  return(temp);
}
void display()
{	 
     uint num;
     write_com(0x84);	 
	 for(num=0;num<8;num++)
	 {
		  write_data(table1[num]);
		  delay(5);
		     
	 }
	 write_com(0x80+0x40+8);
	 write_data('.');
	 write_com(0x80+0x40+11);
	 write_data('V');	
	 write_com(0x80+0x40+5);
	 write_data(0x30+qian);
	 write_com(0x80+0x40+6);
	 write_data(0x30+bai);
	 write_com(0x80+0x40+7);
	 write_data(0x30+shi);
	 write_com(0x80+0x40+9);
	 write_data(0x30+ge);
	 if(flag==1)
	     {
		   	write_com(0x80+0x40+4);
	        write_data('-');
		  }
}
void dis_temp(uint t)
{
      qian=t/1000;
	  bai=t%1000/100;
	  shi=t%1000%100/10;
	  ge=t%1000%100%10;
	  display();
}
void warn(uint s,uchar led)
{
      uchar i;
	  i=s;
	  beep=1;
	  
	  P1=~(led);
	  delay(i);
	  beep=0;
	  P1=0xff;
	 	  	     
}
void deal(uint t)
{
   	  if(flag==1)warn(40,0x01);
	  else if((t>warn_l1)&&(t<=warn_l2))
	  {
	       warn(10,0x02);
	   }
	   else if(t<=warn_l1)
	   {
	       warn(40,0x01);
	   }	    
	   else if((t<warn_h2)&&(t>=warn_h1))
	  {
	       warn(10,0x04);
	   }
	   else if(t>=warn_h2)
	   {
	       warn(40,0x08);
	   }

}
void init()
{
     beep=0;
	 flag=0;
     lcden=0;
     write_com(0x38);
	 write_com(0x0c);
	 write_com(0x06);
     write_com(0x01); 

}
void main()
{
     
     init();
	 while(1)
	 {
	     tempchange();
		 dis_temp(get_temp());
		 deal(temp);
	  }

}

⌨️ 快捷键说明

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