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

📄 wengdu1.c

📁 自己用的 DS18B20代码
💻 C
字号:
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
sbit DAT=P1^5;
sbit DB=P2^2;
sbit DC=P2^1;
void GET_TEMPER();
void T_FORMAT();
void DISPLAY() ;
void Set_1820();
void WRITE_1820(uchar);
void READ_1820();
void delay(uchar);
uchar TEMPER_NUM,TEMPER_L,TEMPER_H,delay1;
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77};

void main()
{
   EA=0;
   SP=0X60;
   TEMPER_NUM=30;
   while(1)
   {
      GET_TEMPER();
     T_FORMAT();
      DISPLAY();
   }
}
void GET_TEMPER()
{
  Set_1820();
  WRITE_1820(0xcc);     //跟匹配18B20匹配指令
  WRITE_1820(0x44);      //开始转化温度,大该要700--1000MS
  DISPLAY();

  Set_1820();
  WRITE_1820(0xcc);
  WRITE_1820(0xbe);     //让温度出来。。
  READ_1820();
}
void T_FORMAT()     //取出16位中 低四位,高三位,一共7位
{
  uchar t,f;
  t=TEMPER_L;
  t&=0XF0;
  t>>=4;
  f=TEMPER_H;
  f&=0x07;
  f<<=4;
  TEMPER_NUM=t|f;
}
void DISPLAY() 
{
   uchar m;
   for(m=0;m<200;m++)
  {
   DB=0;
   P0=tab[TEMPER_NUM/10];
   delay(80);
   DB=1;
   DC=0;
   P0=tab[TEMPER_NUM%10];
   delay(80);
    DC=1;
   }
}

void Set_1820()
{
  uchar flag=1,flag1=0;
  while(!flag1)
  {
    while(flag)
    {
    
      DAT=0;
      delay1=250;          //发一个480us--960的低电平
      while(--delay1);
      DAT=1; 
      delay1=30;             //等待60US
      while(--delay1);
      flag=DAT;                //有反应出来低电平给FLAG。 
    }
    delay1=120;            //检测反映是否正确
    while(--delay1);
    flag1=DAT;
  }
 delay1=240;                 //延时一会等待写地址
 while(--delay1);
}
//--------------------------------------
void WRITE_1820(uchar val)     //一位一位发送指令,一位40US
{
  uchar i;
  for(i=8;i>0;i--)
  {
    DAT=0;
	delay1=8;              //发之前先给15US的低电平
    while(--delay1);
	DAT=val&0x01;
	delay1=20;                 
    while(--delay1);
	DAT=1;
	val=val/2;
  }
  delay1=20;
  while(--delay1);
}
//------------------------------------------------
void READ_1820()                     
{
  uchar y,value=0;
  for(y=8;y>0;y--)
  {
    value>>=1;
	DAT=0;
	DAT=0;
	DAT=1;
	delay1=4;
    while(--delay1);
	if(DAT)
	   value|=0x80;    //先读低位地址,读8个
	   delay1=10;
      while(--delay1);
  }
  TEMPER_L=value;
   value=0;
   for(y=8;y>0;y--)
  {
    value>>=1;
	DAT=0;
	DAT=0;
	DAT=1;
	delay1=4;
      while(--delay1);
	if(DAT)
	   value|=0x80;
	   delay1=10;
      while(--delay1);
  }
   TEMPER_H=value;
}
void delay(uchar z)
{
  for(;z>0;z--);
}

⌨️ 快捷键说明

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