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

📄 18b20.c

📁 这是自己写基于89s52的C51程序
💻 C
字号:
#include<reg51.h>

sbit DQ=P2^2;    //定义通信端口
code unsigned char seg7code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned int sdata=0;//测温度的整数部分
unsigned char xiaoshu1=0;//小数第一位
unsigned char xiaoshu2=0;//小数第二位
unsigned char xiaoshu=0;// 二位小数

void delay1(unsigned int tc)   //显示延时
{ while(tc!=0)
    {unsigned int i;
	 for(i=0;i<100;i++);
	 tc--;
	}
}
void delay(unsigned int i)    //时间片延时
{ while(i--);
} 
init_DS18b20(void)             //初始化
{ unsigned char x=0;
  DQ=1;  //DQ复位
  delay(8); 
  DQ=0;  //单片机将DQ拉低
  delay(80);//精确延时大于480um
  DQ=1;   //拉高总线
  delay(14);
  x=DQ;    //延时后 如果x=0则初始化成功 x=1则初始化失败
  delay(20);
}
readonechar(void)  // 读一个字节
{ unsigned char i=0;
  unsigned char dat=0;
  for(i=8;i>0;i--)
  { DQ=0; //给脉冲信号
    dat>>=1;
	DQ=1;
	if(DQ)
	dat|=0x80;
	delay(4);
  }
  return(dat);
}
writeonechar(unsigned char dat)  //写一个字节
{ unsigned char i=0;
  for(i=8;i>0;i--)
  { DQ=0;
    DQ=dat&0x01;
	delay(5);
	DQ=1;
	dat>>=1;
  }
  
}
readtemperature(void)
{ unsigned char a=0;
  unsigned char b=0;
  init_DS18b20();
  writeonechar(0xCC); //跳过读序列号
  writeonechar(0x44); //启动温度转换
  init_DS18b20();
  writeonechar(0xCC); //
  writeonechar(0xBE); // 读温度积存器
  a=readonechar();    //低位
  b=readonechar();    //高位
  sdata=a/16+b*16;     //整数
  xiaoshu1=(a&0x0f)*10/16; //小数第一位
  xiaoshu2=(a&0x0f)*100/16%10;  //小数第二位
  xiaoshu=xiaoshu1*10+xiaoshu2;  //小数

}
void led()
{ P2=P2&0xef;
  P0=seg7code[sdata/10];
  delay1(8);
  P2=P2|0xf0;
  P2=P2&0xdf;
  P0=seg7code[sdata%10]|0x80;

  delay1(8);
  P2=P2|0xf0;
  P2=P2&0xbf;
  P0=seg7code[xiaoshu1];

  delay1(8);
  P2=P2|0xf0;
  P2=P2&0x7f;
  P0=seg7code[xiaoshu2];
  delay1(8);
  P2=P2|0xf0;

  
}
void main()
{ while(1)
  { led();
    readtemperature();
  }
}

⌨️ 快捷键说明

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