专栏中心

EEPW首页 > 专栏 > 用51单片机调DS18B20

用51单片机调DS18B20

发布人:transformer 时间:2007-07-24 来源:工程师 发布文章

 经过几天的努力学习和实践,终于调好了DS18B20.呵呵,现在27.0625摄氏度.虽然是一个小程序,不过还是挺有成就感的.将源程序代码贡献出来,相互交流一下.(不包含1602显示的驱动程序)

  //将DQ与Vcc之间接入4.7K上拉电阻
#include "reg52.h"
#include "INTRINS.H"
#include "1602.c"
#define uchar unsigned char
#define uint  unsigned int
//#define CLEARSCREEN LCD_en_command(0x01)   1602清屏
sbit DQ="P1"^0;
/*操作命令代码
  跳过ROM 0xCC
  发送温度转换 0xBE
  写EEPROM  0x4E
*/

/////////////低层驱动子程序///////////
void Init18B20(void); //初始化
void Write18B20(uchar ch);//写数据
unsigned char Read18B20(void);//读数据 
void Delay15(uchar n);  
void Delay10ms(uint delay_num);
void Display(void);
///////////////////////////////////// 
code uchar decimalH[]={00,06,12,18,25,31,37,43,50,56,62,68,75,81,87,93};
code uchar decimalL[]={00,25,50,75,00,25,50,75,00,25,50,75,00,25,50,75};
uint ResultTemperatureH ,ResultTemperatureLH,ResultTemperatureLL;//整数,小数高位,小数低位
uint  ResultSignal;//符号位

 


main()
{  uint TemH,TemL,delay,k=0;
   for(; ; )
 {
   Init18B20();

   Write18B20(0xCC);//跳过ROM
   _nop_();
   //Write18B20(0x4E);//写EEPROM
  // Write18B20(0x00);//Th
   //Write18B20(0x00);//Tl
   Write18B20(0x7f);//12 bits温度分辨率
   Init18B20();

   Write18B20(0xCC);//跳过ROM
   _nop_();


   Write18B20(0x44);//发送温度转换指令
   Delay10ms(25);
   Delay10ms(25);
   Delay10ms(25);
   Delay10ms(25);//等待1s转换

   Init18B20();
   Write18B20(0xCC);//跳过ROM
   Write18B20(0xBE);//发送温度转换指令
   TemL="Read18B20"();  //读低位温度值
   TemH="Read18B20"();  //读高位温度值                                                        

   Delay10ms(2);
  
  TemH=(TemH<<4)|(TemL>>4);
   TemL="TemL"&0x0f;   //取低4位
   if(TemH&0x80)
    {  TemH=~TemH;
    TemL=~TemL+1;
       ResultSignal="1";     //负
    }
     else  ResultSignal="0";   //正

   ResultTemperatureLH="decimalH"[TemL];
   ResultTemperatureLL="decimalL"[TemL];
   ResultTemperatureH="TemH";
   Display();

  for(delay=0;delay<60000;delay++);
  for(delay=0;delay<20000;delay++);
  
  }  
}

 

void  Display(void)
{  uint i,j,q;
   LCD_init();
     CLEARSCREEN;
  LCD_en_command(0x01);
  delay_nms(2);
 
     q="ResultTemperatureH/100";
     i=(ResultTemperatureH%100)/10;
     j="ResultTemperatureH-"(i*10+q*100);
  LCD_write_string(0,LINE1," Jaq1217 18B20  ");
 if(ResultSignal)  
   { LCD_write_string(0,LINE2," T is:-   .     ");  }
   else {LCD_write_string(0,LINE2," T is:+   .     ");}
    LCD_write_char(0x07,LINE2,q|0x30);
    LCD_write_char(0x08,LINE2,i|0x30);
    LCD_write_char(0x09,LINE2,j|0x30);
    LCD_write_char(0x0b,LINE2,(ResultTemperatureLH/10)|0x30);
 LCD_write_char(0x0c,LINE2,(ResultTemperatureLH%10)|0x30);
 LCD_write_char(0x0d,LINE2,(ResultTemperatureLL/10)|0x30);
 LCD_write_char(0x0e,LINE2,(ResultTemperatureLL%10)|0x30);
   }

unsigned char Read18B20(void)
 { unsigned char ch;
   unsigned char q ;
   for(q=0;q<8;q++)
    {ch=ch>>1;
 DQ=0;
  _nop_();
  DQ="1";
  _nop_();_nop_();_nop_();_nop_();
     if(DQ==1)  ch="ch|0x80";
   else     ch="ch"&0x7f;
     Delay15(3);
   DQ="1";
 
     } 
 return (ch);
   }
void Write18B20(uchar ch)
 { uchar i;
   for(i=0;i<8;i++)
   { DQ="0";
  Delay15(1);
  DQ="ch"&0x01;
  Delay15(3);
  DQ="1";
  ch="ch">>1;
  _nop_();
    }
 }

void Init18B20(void)
 { DQ="0";
   Delay15(33);//至少延时480us
   DQ="1";
   Delay15(10);//至少延时100us
   /*if(DQ==1)  return 0;   //初始化失败
    else  return 1;
 DQ=1; Delay15(18);  */
   }
void Delay15(uchar n)
 {  do{ _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
        _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
        _nop_(); _nop_(); _nop_();
  n--;
 
       }while(n);
  }
void Delay10ms(uint delay_num)
{
 uchar i;
 while(delay_num--)
 {
  for(i=0;i<125;i++)
   {;}
 }
}

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

格罗方德硅光子业务2026收入预计翻倍,2028年底有望突破10亿美元

EDA/PCB 2026-05-08

聚积科技首度参与SID Display Week展现多元背光卓越成功案例与创新解决方案

《最新BIOS设置详解》书 236页

0.3A低压步进驱动芯片MC3479

C64+ 系列DSP上Cache 的应用(第二部分)

视频 2009-10-16

GUC与纬颖科技达成技术合作,共建下一代超大规模AI基础设施

智能计算 2026-05-07

恩智浦CoreRide获Vector软件支持,赋能软件定义汽车平台

面向机器人全关节和环境感知,迈来芯推出传感驱动组合方案

1.5A晶体管CMOS电路步进驱动芯片ucn5804b

华为提前布局AI眼镜市场,为何敢对屏幕说“不”

消费电子 2026-05-07

为AI研发提速 联发科技重金打造的研发数据中心启用

硬道理

snowflake11 2005-09-10

如何在数in2组成430W均流输出

视频 2010-07-19

0.5A低压步进驱动芯片SAA1042

从封口令到独供令 传台积电严控CoPoS供应链

EDA/PCB 2026-05-08

仅用一颗葡萄供电的微处理器

视频 2009-10-16

1000兆以太网交换机设备技术规范(中国标准)

TI DSP开发工具CCS上AET调试功能

视频 2009-10-16

Diodes公司四通道 ReDriver™为下一代汽车智能座舱平台提供32Gbps信号完整性

C64+ 系列DSP上Cache 的应用(第一部分)

视频 2009-10-16

具身智能/灵巧手的感测目标:将物理世界可靠、高精度、低时延地映射到数字系统之中

更多 培训课堂
更多 焦点
更多 视频

技术专区