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

📄 1820.h

📁 DS18B20温度传感器和1602详细源代码和这PROTUES彷真
💻 H
字号:
#include<intrins.h>

sbit  dq=P2^4  ;
#define uchar unsigned char
#define uint unsigned int
#define sint   signed  int

#define delay2us()   _nop_();_nop_(); //延时2us,每nop 1us
#define delay8us()   _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

//设置重复检测次次数,超出次数则超时
#define     ReDetectTime    20


/********************************************************
* 函数                                                            * 
********************************************************/
void delayus(uchar us);    
void start1820(void); //DS18B20初始化,存在返0,否则返1
void writebit(bit bitdata);   //写bit2DS18B20
void writebyte(uchar chrdata); //写Byte DS18B20
bit readbit(void);   //读bit From DS18B20
uchar readbyte(void); //读Byte DS18B20


/********************************************************
* us延时程序                                                 *
********************************************************/
void delayus(uchar t)   
{ 
    while(t--); //12M,一次6us,加进入退出14us(8M晶振,一次9us)  
}

/********************************************************
* DS18B20初始化                                         *
********************************************************/
void start1820(void) //存在返0,否则返1
{
//bit temp = 1;
//uchar outtime = ReDetectTime; //超时时间
//while(outtime-- && temp)
//{
  // delayus(10); //(250)1514us时间可以减小吗
   dq=0;
  
   delayus(100);
   dq=1;
   //delayus(10); //614us(480-960)
   //dq=1;
   //delayus(10); //73us(>60)
   //temp = dq;
   delayus(70); //us
//}
//return temp;
}

/********************************************************
* 写bit2DS18B20                                        *
********************************************************/
void writebit(bit bitdata)
{
if(bitdata)
{
   dq=0;
   delay2us();   //2us(>1us)
   dq=1; //(上述1-15)
   delayus(12); //86us(45- x,总时间>60)
}else
{
   dq=0;
   delayus(12); //86us(60-120)
}
dq=1;
delay2us();    //2us(>1us) 

}

/********************************************************
* 写Byte DS18B20                                       *
********************************************************/
void writebyte(uchar chrdata)
{
uchar ii;
for(ii = 0; ii < 8; ii++)
{
   writebit(chrdata & 0x01);
   chrdata >>= 1;
}
}


/********************************************************
* 读bit From DS18B20                                 *
********************************************************/
bit readbit(void)
{
bit bitdata;
dq=0;
delay2us();   //2us( >1us) 
dq=1;
delay8us();   //8us( <15us)
bitdata = dq;
delayus(7); //86us(上述总时间要>60us)
return bitdata;
}


/********************************************************
* 读Byte DS18B20                                      *
********************************************************/
uchar readbyte(void)
{
uchar ii,chardata;
for(ii = 0; ii < 8; ii++)
{ 
   chardata >>= 1;
   if(readbit()) chardata |= 0x80; 
}
return chardata;
}



sint gettemp()
{
   unsigned char temph=10,templ=39;
   sint temp=49;
   float   tt;
   start1820();
   writebyte(0xcc);
   writebyte(0x44);

 //delay_nms(1000);    可以没有 
        start1820();
   writebyte(0xcc);
   writebyte(0xbe);

   templ=readbyte();
   temph=readbyte();


      temp=(sint)temph;
      temp<<=8;
      temp=(sint)templ+temp;
      tt=temp*0.0625;
      temp=(sint)tt;

   
   return  temp;
}

⌨️ 快捷键说明

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