纬图虚拟仪器论坛

 找回密码
 立即注册
搜索
查看: 24619|回复: 6

51单片机的18B20驱动程序源码

[复制链接]
发表于 2012-7-30 19:57:55 | 显示全部楼层 |阅读模式
本帖最后由 wdluo 于 2012-8-2 11:56 编辑

已经调试通过,调用Read_Disp_Temperature()函数即可获取18B20所测温度.
  1. #ifndef  __DS18B20_H__
  2. #define  __DS18B20_H__
  3. #include <reg51.h>
  4. sbit DQ = P1 ^ 5;  //定义端口DQ
  5. void  Delay_18b20(unsigned int  ulVal);
  6. void Init_DS18B20(void);//初始化ds1820
  7. unsigned char ReadOneChar(void);//读一个字节
  8. void WriteOneChar(unsigned char dat);//写一个字节
  9. int Read_Disp_Temperature(void);//读取温度

  10. #endif
复制代码

  1. #include <ds18b20.h>
  2. #include <reg51.h>

  3. void  Delay_18b20(unsigned int  ulVal)
  4. {
  5.     while ( --ulVal  !=  0 );
  6. }

  7. void Init_DS18B20(void)//初始化ds1820
  8. {
  9.         unsigned char x = 0;

  10.         DQ = 1;    //DQ复位
  11.         Delay_18b20(8);  //稍做延时

  12.         DQ = 0;    //单片机将DQ拉低
  13.         Delay_18b20(80); //精确延时 大于 480us
  14.         //Delay(400); //精确延时 大于 480us

  15.         DQ = 1;    //拉高总线
  16.         Delay_18b20(14);

  17.         x = DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  18.     Delay_18b20(20);
  19. }

  20. unsigned char ReadOneChar(void)//读一个字节
  21. {
  22.         unsigned char i = 0;
  23.         unsigned char dat = 0;

  24.         for (i = 8; i > 0; i--)
  25.         {
  26.                   DQ = 0; // 给脉冲信号
  27.                   dat >>= 1;
  28.                   DQ = 1; // 给脉冲信号
  29.                   if(DQ)
  30.                   dat |= 0x80;
  31.                   Delay_18b20(15);
  32.         }
  33.         return (dat);
  34. }

  35. void WriteOneChar(unsigned char dat)//写一个字节
  36. {
  37.         unsigned char i = 0;
  38.         for (i = 8; i > 0; i--)
  39.         {
  40.                   DQ = 0;
  41.                   DQ = dat&0x01;
  42.                   Delay_18b20(5);
  43.                   DQ = 1;
  44.                   dat>>=1;
  45.         }
  46. }

  47. int Read_Disp_Temperature(void)//读取温度
  48. {
  49.         unsigned int a = 0, b = 0, c = 0, t = 0;
  50.         float tt = 0;

  51.         Init_DS18B20();
  52.         WriteOneChar(0xCC); // 跳过读序号列号的操作
  53.         WriteOneChar(0x44); // 启动温度转换

  54.         Init_DS18B20();
  55.         WriteOneChar(0xCC); //跳过读序号列号的操作
  56.         WriteOneChar(0xBE);
  57.         a = ReadOneChar();        //读取温度寄存器
  58.         b = ReadOneChar();
  59.         t = b;
  60.         t <<= 8;
  61.         t = t | a;
  62.         return(t);
  63. }

复制代码
源码文件下载: 18B20 C51驱动程序.rar (1.01 KB, 下载次数: 107)
回复

使用道具 举报

发表于 2012-9-1 00:12:21 | 显示全部楼层
mark 一下,借鉴了
回复 支持 反对

使用道具 举报

发表于 2012-10-1 09:10:45 | 显示全部楼层
挺好的东西,18b20温度测试挺有用的
回复 支持 反对

使用道具 举报

发表于 2013-5-9 21:16:57 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2014-7-17 19:32:23 | 显示全部楼层
C51驱动程序以及DS18B20资料手册
回复 支持 反对

使用道具 举报

发表于 2014-7-20 09:15:04 | 显示全部楼层
51单片机的18B20驱动程序源码
回复 支持 反对

使用道具 举报

发表于 2015-1-3 22:13:47 | 显示全部楼层
好资料!谢谢分享!!
回复 支持 反对

使用道具 举报

发表于 2022-11-7 19:44:22 | 显示全部楼层
讨债公司 www.zhent.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|纬图虚拟仪器

GMT+8, 2024-12-31 01:37 , Processed in 3.301874 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表