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

📄 18b20.c

📁 18B20源程序加上位机温度显示应用程序包
💻 C
字号:
#include <reg51.h>
#include <Intrins.h>
#include <absacc.h>
#include <my.h>
#define uchar unsigned char
#define uint unsigned int
#define WriteDeviceAddress 0xa0
#define ReadDviceAddress 0xa1
uint ff;

uchar shuj;
uchar csh_flag;
uchar data_flag;
uchar sec_1;
uchar sec;
uchar time;
uchar shuju;
sbit sstb=P3^2;
sbit csh=P3^4;
sbit run=P3^5;
uchar tm[3];
uchar data  prn_buf[8];
sbit DQ =P1^0;//根据实际情况定义端口
sbit dog=P1^2;

typedef unsigned char byte;
typedef unsigned int  word;

void htobcd(uchar dd)
{ 
	uint div;
	uchar  i;
	div=100;
	for (i=0;i<3;i++) 
       {
	tm[i]=dd/div;       
	dd%=div;
	div/=10;
	}
	
	
}

 void  m_send(uchar f)                         
 {      ES=0;             
        SBUF=f;
        while (TI==0)
        dog=~dog;
        TI=0;
        ES=1;
 }  
                                                                         		
uchar  Msec(uint x)                         
{uchar j;
 while(x--)
       {for(j=0;j<125;j++)
            {dog=~dog;}
       }
}


void delay(word useconds)
{
  for(;useconds>0;useconds--);
}


byte ow_reset(void)
{
  byte presence;
  DQ = 0; 
  delay(60); 
  DQ = 1; 
  delay(6); 
  presence = DQ; 
  delay(50); 
  return(presence); 
}  


byte read_byte(void)
{
  byte i;
  byte value = 0;
  for (i=8;i>0;i--)
  {
    value>>=1;
    DQ = 0; 
    DQ = 1; 
    delay(2);  
    if(DQ)value|=0x80;
    delay(12); 
  }
  return(value);
}


void write_byte(char val)
{
  byte i;
  for (i=8; i>0; i--) 
  {
    DQ = 0; // 
    DQ = val&0x01;
    delay(10); 
    DQ = 1;
    val=val/2;
  }
  delay(10);
}

//读取温度
char Read_Temperature(void)
{uchar  x,y;
  union{
    uchar c[2];
    int x;
  }temp;
  ow_reset();
  write_byte(0xCC); 
  write_byte(0xBE); 
  temp.c[1]=read_byte();
  temp.c[0]=read_byte();
  ow_reset();
  write_byte(0xCC); 
  write_byte(0x44); 

   x=temp.c[0];
   y=temp.c[1]; 
   x=x<<4;
   x=x&0xf0;
   y=y>>4;
   y=y&0x0f; 
   x=x+y;    
   htobcd(x);  
   m_send(tm[0]+0x30);
   m_send(tm[1]+0x30);
   m_send(tm[2]+0x30);
   m_send(0xa1);
   m_send(0xe6);
   m_send(0x0d);
  //return temp.x/2;
}

void  main( )
{
                      uchar  t,i;         
            TMOD=0x21;
            SCON=0x50; 
            serial_baund_9600;     	     
            PS=0;           
            ES=1;           
            dog=~dog;
            EA=1;
            do{dog=~dog;
              Read_Temperature( );
                         //m_send(i);  
                         Msec(2000);    
	       }while(1);
}


 

⌨️ 快捷键说明

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