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

📄 ds18b20数字温度传感器.c

📁 单片机控制DS18B20温度显示仪
💻 C
字号:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
uchar code bitscan[]={0xf7,0xfb,0xfd,0xfe,0x7f,0xbf,0xdf,0xef};  //扫描码
uchar code displaycode[]={0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xf8,
		   	              0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0x40};  //显示码
unsigned char code dotcode[32]={0,3,6,9,12,16,19,22, 
                                25,28,31,34,38,41,44,48, 
                                50,53,56,59,63,66,69,72, 
                                75,78,81,84,88,91,94,97};
sbit dt=P3^7;
bit sflag;
unsigned char displaycount;
unsigned char timecount; 
uchar readdata[8];
uchar displaybuf[8]={16,16,16,16,16,16,16,16};  //显示缓冲区
bit resetds18b20(void)    //复位
{
uchar i;
dt=0;
for(i=255;i>0;i--);
dt=1;
for(i=60;i>0;i--);
return(dt);
for(i=200;i>0;i--);
}
void writecommandtods18b20(uchar command)  //写DS18B20
{
uchar i,j;
for(i=0;i<8;i++);
{
if((command&0x01)==0)
{
dt=0;
for(j=35;j>0;j--);
dt=1;
}
else
{
dt=0;
for(j=2;j>0;j--);
dt=1;
for(j=33;j>0;j--);
}
command=_cror_(command,1);
}
}
uchar readdatafromds18b20(void)  //读DS18B20
{
uchar i,j,temp;
temp=0;
for(i=0;i<8;i++);
{
temp=_cror_(temp,1);
dt=0;
_nop_();
_nop_();
dt=1;
for(j=10;j>0;j--);
if(dt==1)
{
temp=temp|0x80;
}
else
{
temp=temp|0x00;
}
for(j=200;j>0;j--);
}
return(temp);
}
void showtemp(void)  //温度显示
{
uchar x;
unsigned int result;
if(displaycount==2) 
    { 
      P0=displaycode[displaybuf[displaycount]]&0x7f; 
    } 
    else 
      { 
        P0=displaycode[displaybuf[displaycount]]; 
      } 
  P2=bitscan[displaycount]; 
  displaycount++; 
  if(displaycount==8) 
    { 
      displaycount=0; 
    } 
  
  timecount++; 
  if(timecount==150) 
    { 
      timecount=0; 
      while(resetds18b20());
      writecommandtods18b20(0xcc);
      writecommandtods18b20(0xbe);
      readdata[0]=readdatafromds18b20(); 
      readdata[1]=readdatafromds18b20(); 
      for(x=0;x<8;x++) 
        { 
          displaybuf[x]=16; 
        } 
      sflag=0; 
      if((readdata[1] & 0xf8)!=0x00) 
        { 
          sflag=1; 
          readdata[1]=~readdata[1]; 
          readdata[0]=~readdata[0]; 
          result=readdata[0]+1; 
          readdata[0]=result; 
          if(result>255) 
            { 
              readdata[1]++; 
            } 
        } 
      readdata[1]=readdata[1]<<4; 
      readdata[1]=readdata[1] & 0x70; 
      x=readdata[0]; 
      x=x>>4; 
      x=x & 0x0f; 
      readdata[1]=readdata[1] | x; 
      x=2; 
      result=readdata[1]; 
      while(result/10) 
        { 
          displaybuf[x]=result%10; 
          result=result/10; 
          x++; 
        } 
      displaybuf[x]=result; 
      if(sflag==1) 
        { 
          displaybuf[x+1]=17; 
        } 
      x=readdata[0] & 0x0f; 
      x=x<<1; 
      displaybuf[0]=(dotcode[x])%10; 
      displaybuf[1]=(dotcode[x])/10; 
      while(resetds18b20());
      writecommandtods18b20(0xcc);
      writecommandtods18b20(0xbe);
    } 
}
void main()  //主函数
{
 unsigned int x;
 for(x=0;x<2000;x++);
 while(resetds18b20());
 writecommandtods18b20(0xcc);
 writecommandtods18b20(0xbe);
 while(1)
 {
  showtemp();
 }
}

⌨️ 快捷键说明

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