• 大小: 751KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-12
  • 语言: 其他
  • 标签: 51  DS18B20  1602  

资源简介

用51单片机读取DS18B20的温度数据,并在1602上面显示,包含完整工程和proteus仿真

资源截图

代码片段和文件信息

#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define delay4us() {_nop_();_nop_();_nop_();_nop_();}

sbit DQ=P3^4;

uchar code df_Table[]={0112334456678899}; //温度小数位对照表

uchar CurrentT=0;//当前读取的温度整数部分
uchar Temp_Value[]={0x000x00};    //从DS18B20读取的温度值
uchar Display_Digit[11]={00000000000};   //待显示的各温度数位
bit DS18B20_IS_OK=1;  //DS18B20正常标志

void DelayXus(uint x)  //延时1
{
  uchar i;
  while(x--)
  {
  for(i=0;i<200;i++);
  }
}

void Delay(uint x)  //延时2
{
  while(x--);
}

uchar Init_DS18B20()  //初始化18B20
{
  uchar status;
  DQ=1;
  Delay(8);
  DQ=0;
  Delay(90);
  DQ=1;
  Delay(8);
  status=DQ;
  Delay(100);
  DQ=1;
  return status;
}

uchar ReadOneByte()  //从DS18B20读一字节数据
{
  uchar idat=0;
  DQ=1;
  _nop_();
   for(i=0;i<8;i++)
    {
DQ=0;
dat>>=1;
DQ=1;
_nop_();
_nop_();
if(DQ)
dat|=0x80;
Delay(30);
DQ=1;
}
return dat;
}

void WriteOneByte(uchar dat)   //从DS18B20写一字节数据
{
 uchar i;
 for(i=0;i<8;i++)
  {
   DQ=0;
   DQ=dat&0x01;
   Delay(5);
   DQ=1;
   dat>>=1;
  }
}

void Read_Temperature()//      从DS18B20读取温度值
{
 if(Init_DS18B20()==1)   //DS18B20故障
       DS18B20_IS_OK=0;
else
{
  WriteOneByte(0xcc);  //跳过序列号命令
  WriteOneByte(0x44);   //启动温度转换命令
  Init_DS18B20();//复位DS18B20
  WriteOneByte(0xcc);//跳过序列号命令
  WriteOneByte(0xbe);//读取温度寄存器
  Temp_Value[0]=ReadOneByte(); //读取温度低字节
  Temp_Value[1]=ReadOneByte(); //读取温度高字节
  DS18B20_IS_OK=1;    //DS18B20正常
}
}

void Display_Temperature()
{
uchar i;
uchar t=150ng=0;
if((Temp_Value[1]&0xf8)==0xf8)
  {
    Temp_Value[1]=~Temp_Value[1];
Temp_Value[0]=~Temp_Value[0]+1;
if(Temp_Value[0]==0x00)
   Temp_Value[1]++;
   ng=1;
  }
  Display_Digit[5]=df_Table[Temp_Value[0]&0x0f]+‘0‘; //由低四位确定小数值
  CurrentT=(((Temp_Value[0]&0xf0)>>4)|((Temp_Value[1]&0x07)<<4));
  if(CurrentT/100==0)
  Display_Digit[1]=‘ ‘;
  else
  Display_Digit[1]=CurrentT/100+‘0‘;
  Display_Digit[2]=(CurrentT%100)/10+‘0‘;
  Display_Digit[3]=CurrentT%10+‘0‘;
  Display_Digit[4]=‘.‘;
  Display_Digit[6]=‘0‘;
  Display_Digit[7]=‘0‘;
  Display_Digit[8]=‘ ‘;
  Display_Digit[9]=‘c‘;
  if(ng==1)
  Display_Digit[0]=‘-‘;
  else
  Display_Digit[0]=‘+‘;
  LCD_Write_String(61Display_Digit);
  LCD_Write_String(20“thermometry“);
  LCD_Write_String(11“Temp“);
}

void main()
{
LCD_Init();
Read_Temperature();
Delay(50000);
Delay(50000);
while(1)
 {
  Read_Temperature();
   if(DS18B20_IS_OK)
      Display_Temperature();
  DelayXus(100);
  } 
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      12522  2015-08-02 08:35  DS18B20\DS18B20

     文件       2757  2015-08-02 08:35  DS18B20\DS18B20.c

     文件       2508  2015-08-02 08:35  DS18B20\DS18B20.hex

     文件         62  2015-08-02 08:35  DS18B20\DS18B20.lnp

     文件       6001  2015-08-02 08:35  DS18B20\DS18B20.LST

     文件      19143  2015-08-02 08:35  DS18B20\DS18B20.M51

     文件      14055  2015-08-02 08:35  DS18B20\DS18B20.OBJ

     文件        159  2015-08-13 10:28  DS18B20\DS18B20.plg

    .......     57076  2015-08-13 10:58  DS18B20\DS18B20.uvopt

     文件      13576  2015-07-31 22:40  DS18B20\DS18B20.uvproj

    .......     56272  2015-08-12 23:11  DS18B20\DS18B20_uvopt.bak

     文件          0  2015-07-31 19:14  DS18B20\DS18B20_uvproj.bak

     文件     121665  2015-07-31 22:40  DS18B20\Last Loaded show.DBK

     文件       3488  2014-05-08 15:35  DS18B20\lcd1602.h

     文件     121681  2015-08-02 08:36  DS18B20\show.DSN

     文件       1028  2015-08-13 10:58  DS18B20\show.PWI

     文件       6376  2005-03-22 15:22  DS18B20\STARTUP.A51

     文件      14049  2015-07-31 22:02  DS18B20\STARTUP.LST

     文件        749  2015-07-31 22:02  DS18B20\STARTUP.OBJ

     文件     819712  2015-07-31 21:04  DS18B20\参考资料.doc

     目录          0  2015-08-13 10:58  DS18B20

----------- ---------  ---------- -----  ----

              1272879                    21


评论

共有 条评论