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

📄 text1.c

📁 单片机温度DS1802测量与仿真 包含通信接口 有C语言程序源码
💻 C
字号:
#include<reg51.h>
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit RST=P1^0;
sbit SCLK=P1^1;
sbit io=P1^2;
sbit DQ=P2^7;
sbit ACC7=ACC^7;
sbit ACC0=ACC^0;
unsigned char dis[]={"temperature is:"};
unsigned char shu[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x20,0x3a,0x2d,0x2e,0x43};
unsigned char zu[]={0x00,0x00,0x0c,0x00,0x00,0x0c,0x00,0x00,0x0c,0x00,0x00,0x0b,0x00,0x00,0x0b,0x00,0x00,0x0a,0x0a,
0x00,0x00,0x00,0x0d,0x00,0x00,0x0d,0x0e};
unsigned char j;
void start1602();
void busy();
void writeo(unsigned char i);
void writeda(unsigned char i);
void delay();
void delay1820(unsigned int t);
read1820();
void write820(unsigned char date);
void reoult1820();
void start1820();
void write1302(unsigned char date);
read1302();
read1302_b(unsigned char add);
void write1302_b(unsigned char add,unsigned char date);
void resoult1302();
void start1302();


void start1602()
{
 writeo(0x01);
writeo(0x38);
writeo(0x0e);
writeo(0x06);
}
 
void busy()
{
 
E=0;
RS=0;
RW=1;
E=1;
while(P0&0X80);
E=0;
delay();
}

void writeo(unsigned char i)
{
busy();
  E=0;
RW=0;
RS=0;
E=1;
P0=i;
E=0;
delay();
}

void writeda(unsigned char i)
{
busy();
 E=0;
RW=0;
RS=1;
E=1;
P0=i;
E=0;
delay();
}

void delay()
{
 for(j=0;j<200;j++);
}



// ds18b20//
void delay1820(unsigned int t)
{
 while(t--);
 }

void start1820()
{
  DQ=1;
  delay1820(15);
  DQ=0;
  delay1820(80);
  DQ=1;
  delay1820(10);
  while(!DQ);
  }


  read1820()
  {
   unsigned char da=0x00,i;
   for(i=0;i<8;i++)
   {
      DQ=1;
	  delay1820(3);
	  DQ=0;
	  da=da>>1;
	  DQ=1;
	  if(DQ)
	  {
	   da=da|0x80;
	   }
	   delay1820(10);
	   }
	   return(da);
	   }

	  void write1820(unsigned char date)
	   {
	    unsigned char i;
		for(i=0;i<8;i++)
		{
		 DQ=0;
		 DQ=date&0x01;
		 delay1820(5);
		 DQ=1;
		 date=date>>1;
		 }
		 delay1820(5);
		 }

		 void resoult1820()
		 {
		   unsigned char TTH,TTL,a;
		   unsigned int b;
		  start1820();
		  write1820(0xcc);
		  write1820(0x44);
		  delay1820(50);
		  start1820();
		  write1820(0xcc);
		  write1820(0xbe);
		  TTL=read1820();
		  TTH=read1820();
		  a=(TTH<<4)|(TTL>>4);
		  zu[19]=a/100;
		  zu[20]=a%100/10;
		  zu[21]=a%10;
		  a=(TTL&0X0F);
		  b=a*625;
		  zu[23]=b/1000;
		  zu[24]=b%1000/100;
		  delay1820(100);
		  }

		

		   //1302//
		   void write1302(unsigned char date)
		   {
		     unsigned char i;
			 ACC=date;
			 for(i=8;i>0;i--)
			 {
			  io=ACC0;
			  SCLK=1;
			  SCLK=0;
			  ACC=ACC>>1;
			  }
			  }

			  read1302()
			  {
			   unsigned char i;
			   for(i=8;i>0;i--)
			   {
			    ACC=ACC>>1;
				ACC7=io;
				SCLK=1;
				SCLK=0;
				}return(ACC);
				}

				void write1302_b(unsigned char add,unsigned char date)
				{
				 RST=0;
				 RST=1;
				 SCLK=0;
				 write1302(add);
				 write1302(date);
				 RST=0;
				 SCLK=1;
				 }

				 read1302_b(unsigned char add)
				 {
				 unsigned char date=0x00;
				  RST=0;
				  SCLK=0;
				  RST=1;
				  write1302(add);
				  date=read1302();
				  RST=0;
				  SCLK=1;
				  return(date);
				  }

				  void resoult1302()
				  {
				   unsigned char s,A1;
				   s=read1302_b(0x8d);
				   A1=((s&0x70)>>4)*10+(s&0x0f);
				   zu[0]=A1/10;
				   zu[1]=A1%10;
				   s=read1302_b(0x89);
				   A1=((s&0x70)>>4)*10+(s&0x0f);
				   zu[3]=A1/10;
				   zu[4]=A1%10;
				   s=read1302_b(0x87);
				   A1=((s&0x70)>>4)*10+(s&0x0f);
				   zu[6]=A1/10;
				   zu[7]=A1%10;
				   s=read1302_b(0x85);
				   A1=((s&0x70)>>4)*10+(s&0x0f);
				   zu[9]=A1/10;
				   zu[10]=A1%10;
				   s=read1302_b(0x83);
				   A1=((s&0x70)>>4)*10+(s&0x0f);
				   zu[12]=A1/10;
				   zu[13]=A1%10;
				   s=read1302_b(0x81);
				   A1=((s&0x70)>>4)*10+(s&0x0f);
				   zu[15]=A1/10;
				   zu[16]=A1%10;
				   }

				   void start1302()
				   {
				    write1302_b(0x8e,0x00);
					write1302_b(0x80,0);
					write1302_b(0x8e,0x80);
					}

				   void main()
				   {
				   unsigned char f;
                     TMOD=0X21;
					 TH0=(65535-50000)/256;
					 TL0=(65535-50000)%256;
					 TH1=0XFD;
					 TL1=0XFD;
					 SCON=0X50;
					 PCON=0X00;
					 
                      TR1=1;

					IE=0X90;
					 ET0=1;
					 TR0=1;
					 
				    start1602();
					start1302();

					while(1)
					{
					 
					  
					 resoult1820();
					 resoult1302();
					 writeo(0x80);
					 for(f=0;f<19;f++)
					 {
					   writeda(shu[zu[f]]);
					   }
					   writeo(0xc0);
					   f=0;
					   while(dis[f]!='\0')
					   {
					    writeda(dis[f]);
						f++;}


					   for(f=19;f<25;f++)
					   {
					    writeda(shu[zu[f]]);
						}
					   }
					   }

					   void time() interrupt 1
					   {
					    unsigned char ss,j;
						TH0=(65535-50000)/256;
						TL0=(65535-50000)%256;
						ss++;
						if(ss==100)
						{
						 ss=0;
						 for(j=0;j<27;j++)
						 {
						   SBUF=shu[zu[j]];
						   while(!TI);
						   TI=0;
						   }
						   }
						   }











    

⌨️ 快捷键说明

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