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

📄 ds18b20.c

📁 数字温度传感器DS18B20,keil C 环境
💻 C
字号:
/*51平台,11.0592晶体,使用stc12c4052和ds18b20*/

#include "reg51.h"

#define uchar unsigned char
#define uint unsigned int

sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;
sbit p13=P1^3;
sbit addr1=P1^4;
sbit addr2=P1^5;
sbit addr3=P1^6;
sbit p17=P1^7;
sbit dir485=P3^2;
sbit rs232en=P3^3;
sbit rs485en=P3^4;
sbit p35=P3^5;
sbit p37=P3^7;  /*p37为单总线*/

/*初始化*/
void initds18b20()
{
   p37=0;
   delay(200);
   delay(184);
   p37=1;
   delay(48);
   if(p37==1)
   {
   ds18b20=0;
   }
   else
   {
   ds18b20=1;
   delay(160);
   }
   p37=1;
}


void writebyteds18b20(uchar aaa)
{
   uchar i,j;
   for(i=0;i<8;i++)
   {
    p37=0;
    p37=0x01&aaa;
	aaa=aaa>>1;
	delay(48);
	p37=1; 
    WDT=0x30;  //feed the dog to delay
	WDT=0x30;
    WDT=0x30;
	WDT=0x30;
    WDT=0x30;
	WDT=0x30;
    WDT=0x30;
	WDT=0x30;
   }
   p37=1;
}

void readds18b20()
{
   uchar i,j;
   for(i=0;i<8;i++)
   {
    p37=1;
    WDT=0x30;
	WDT=0x30;
    WDT=0x30;
	WDT=0x30;
    WDT=0x30;
	WDT=0x30;
    WDT=0x30;
	WDT=0x30;
    p37=0;
    WDT=0x30;
	WDT=0x30;
    WDT=0x30;
	WDT=0x30;
    WDT=0x30;
	WDT=0x30;
    WDT=0x30;
	WDT=0x30;
    p37=1;
    cirl=cirl>>1;
    if(p37==1)
    {
    cirl=cirl+128;
    }
    delay(32);
   }
   for(i=0;i<8;i++)
   {
    p37=1;
    WDT=0x30;
	WDT=0x30;
    WDT=0x30;
	WDT=0x30;
    WDT=0x30;
	WDT=0x30;
    WDT=0x30;
	WDT=0x30;
    p37=0;
    WDT=0x30;
	WDT=0x30;
    WDT=0x30;
	WDT=0x30;
    WDT=0x30;
	WDT=0x30;
    WDT=0x30;
	WDT=0x30;
    p37=1;
    cirh=cirh>>1;
    if(p37==1)
    {
    cirh=cirh+128;
    }
    delay(32);
   }
}
    
   


void temp()  
{
   uchar temph,templ;
   p37=1;
   initds18b20();
   if(ds18b20)
   {
     delay(48);
     writebyteds18b20(0xcc);
     writebyteds18b20(0x44);
     longdelay(184000);
     initds18b20();
     if(ds18b20)
     {
     delay(48);
     writebyteds18b20(0xcc);
     writebyteds18b20(0xbe);
     readds18b20();
     }
   }

   /*数据处理后由串行口返回PC*/
   if(ds18b20)
   {
     dir485=1; 
     SBUF=0xaa;
     while(!TI)
     {
     WDT=0x30;
     }
     TI=0;
    
     SBUF=localaddress;
     while(!TI)
     {
     WDT=0x30;
     }
     TI=0; 
   
     SBUF=0x08;    
     while(!TI)
     {
     WDT=0x30;
     }
     TI=0;

     SBUF=0x00;
     while(!TI)
     {
     WDT=0x30;
     }
     TI=0;  
 
     temph=(cirh<<4)+(cirl>>4);
     if(temph>=128)
     {
     temph=383-temph;
     }
     SBUF=temph;
     while(!TI)
     {
     WDT=0x30;
     }
     TI=0;

     templ=(uchar)((float)(cirl&0x0f)*0.625);
     SBUF=templ;
     while(!TI)
     {
     WDT=0x30;
     }
     TI=0;
 
     SBUF=localaddress+0x08+0x00+temph+templ;
     while(!TI)
     {
     WDT=0x30;
     }
     TI=0;
  
	 dir485=0; 
   }
}

⌨️ 快捷键说明

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