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

📄 ds18b20的c51程序.c

📁 DS18B20各种应用的C51程序大全,包含各种范例
💻 C
字号:
/*DQ为数据口,接于P3.4
/*18b20采用三线接法,上拉5.1k电阻*/
/*晶体:11.0592M*/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
uchar  table[10]={0xfd,0x05,0x3e,0x7a,0x63,0x5b,0x5f,0x70,0x7f,0x7b};//一位数码管
sbit dq= P3^4;
bit  flag;
uint temp;
void init_18b20 (void);
uint  read_word (void);
void write (uchar wr);
void get_temp (void);
void delay (uint us);
display_temp(uint temp1);
void delay1(uint t);
main ()
{  /*P1=0x63;
while(1);  */
   TMOD=0x20;
   PCON=0x00;
   TH1=0xfd;TL1=0xfd;
   TR1=1;
   SCON=0x50;
   EA=1;
   dq=0;
  _nop_();
  dq=1;
  init_18b20();
  get_temp();
  temp=temp;
  while(1){get_temp();display_temp(temp);
    SBUF=temp;
     while(TI==0);TI=0;}
}
void init_18b20 (void)
{  dq=1;
  _nop_();
  dq=0;
  delay(90);            //delay 530 uS
  dq=1;
  delay(6);            //delay 100 uS
  if(dq==0)
     flag=1;            //detect 1820 success!
  else
     flag=0;             //detect 1820 fail!
  delay(20);
  dq=1;
}
//
void write (uchar wr)
{
  uchar i;
  for (i=0;i<8;i++)
   {
     dq=0;
     _nop_();
     dq=wr&0x01;
     delay(5);            //delay 45 uS
     dq=1;
     wr>>=1;
   }
}
//
uint read_word (void)
{
  uchar i;
  uint u=0;
  for(i=0;i<16;i++)
   {
     dq=0;
     u>>=1;
     dq=1;
     if(dq==1)
        u|=0x8000;
     delay (4);
   }
  return(u);
}

void get_temp (void)
{
  uint bdata tem;
  init_18b20();
  if (flag)
   { write (0xcc);            //skip rom
     write (0x44);            //temp convert
     init_18b20 ();
     write (0xcc);            //skip rom
     write (0xbe);            //read temp
     tem=read_word();            //read
     if(tem<0x8000)
       temp=tem*0.0625;            //temperature>=0
     else
       temp=tem*(-0.0625);         //temperature< 0
     }
 }
void delay (uint us)
{
  while (us--);
}
void delay1(uint t) /*****************************************延时函数*************************************/
{ uint i,j;
  for(i=0;i<=t;i++) {
    for(j=0;j<=200;j++);}
}
display_temp(uchar temp1)  //显示温度
{uchar t1,t2;
t1=temp1/10;
t2=temp1%10;
P1=table[t1];
delay1(500);
P1=table[t2];
delay1(500);
}

⌨️ 快捷键说明

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