• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-27
  • 语言: 其他
  • 标签: DS18B20  温度显示  

资源简介

单点温度读取 和多点测温的 读取DS18B20的序列号实现多点测温

资源截图

代码片段和文件信息

/********两点测温**********/

#include
//#include“DS18B20LCD.h“

/*uchar code str1[]={0x280x5f0xf90x460x020x000x000xe7};//ROM1
uchar code str2[]={0x280x7f0xdb0xe40x020x000x000x84};//ROM2 */

//sbit DQ=P3^5;
/*unsigned char data  display[2] = {0x000x00}; 
unsigned char data  RomCode[8] = {0x000x000x000x000x000x000x000x00};   */
/*DS18B20程序**/
//DS18B20延时函数
sbit DQ=P2^7;
void delay(unsigned int i)
{
while(i--);
}

void delay_ms(unsigned xms)
{
   unsigned char ij;
   for(i=xms;i>0;i--)
       for(j=112;j>0;j--);
}
/********************************/
//#include
/********************************/
unsigned char code table[]=
{
  0xc00xf90xa40xb0
  0x990x920x820xf8
  0x800x900x880x83
  0xc60xa10x860x8e
};
/*********************数码管显示程序*************************/
void display(unsigned int num)
{
   unsigned char qianbaishige;
   qian=num/1000;
   bai=num%1000/100;
   shi=num%1000%100/10;
   ge=num%1000%100%10;

   P1=table[qian];
   P0=0x01;
   delay_ms(1);
   P0=0x00;

   P1=table[bai];
   P0=0x02;
   delay_ms(1);
   P0=0x00;

   P1=table[shi];
   P0=0x04;
   delay_ms(1);
   P0=0x00;

   P1=table[ge];
   P0=0x08;
   delay_ms(1);
   P0=0x00;
}
//DS18B20初始化函数
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
delay(8); //稍做延时
DQ = 0; //单片机将DQ拉低
delay(80); //精确延时 大于 480us
DQ = 1; //拉高总线
delay(14);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay(20);
}

//DS18B20读一个字节
unsigned char 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);
}

//DS18B20写一个字节
void 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;
}
}

/*匹配ROM*/

 /* void b20_Matchrom(uchar a)   //匹配ROM
{
  char j;
  WriteOneChar(0x55);    //发送匹配ROM命令
  if(a==1)
  {
    for(j=0;j<8;j++)
       {
         WriteOneChar(str1[j]);   //发送18b20的序列号,先发送低字节
       }
  }
  if(a==2)
  {
     for(j=0;j<8;j++)
        {
          WriteOneChar(str2[j]);    //发送18b20的序列号,先发送低字节
        }
  }
}  */

//读取温度值并转换
/*uint read_temp(uchar z)  // 读取温度值并转换
{
   uchar ab;
   uint t=0;
   float tt;
   Init_DS18B20();
   WriteOneChar(0xcc);     //读序列号
   Init_DS18B20();
   if(z==1)
   {
     b20_Matchrom(1);    //匹配ROM1
   }
   if(z==2)
   {
     b20_Matchrom(2);     //匹配ROM2 
   }
   WriteOneChar(0x44);        //启动温度转换
   delayms(5); 
   Init_DS18B20();
   WriteOneChar(0xcc);       //读序列号
   Init_DS18B20();
   if(z==1)
   {
     b20_Matchrom(1);   //匹配ROM1
   }
   if(z==2)
   {
     b20_Matchrom(2);   //匹配ROM2
   }
   WriteOneChar(0xbe);  //读取温度
   a=ReadOneChar();
   b=ReadOneChar();
   t=b;
   t<<=8;
   t=t|a;
  //if(t<0x0fff)
   //tflag=0;
  // else
 

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

     文件       1336  2011-02-21 21:20  DS18B20LCD.h

     文件       6380  2011-05-06 17:20  温度传感器.c

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

                 7716                    2


评论

共有 条评论