找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13015|回复: 23
打印 上一主题 下一主题
收起左侧

一个STM32的DS18B20驱动程序分享

  [复制链接]
跳转到指定楼层
楼主
ID:283092 发表于 2018-2-8 16:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DS18B20测温程序

stm32单片机源程序如下:
  1. #include<stm32f10x.h>
  2. #include<Ds18b20.h>
  3. #include<Gpio.h>
  4. #include<SysTick.h>
  5. /*Ds18b20复位*/
  6. void Init_Ds18b20()
  7. {         
  8.       u8 i=0;
  9.          /*设置IO口为输出模式*/
  10.      Gpio_Config_Mode_Out();

  11.          /*拉低总线*/
  12.      DS18B20_DQ_OUT_Low;

  13.          /*延迟480us*/
  14.          Delay_us(480);
  15.          /*释放总线*/
  16.          DS18B20_DQ_OUT_High;

  17.          /*设置IO口为输入模式*/
  18.          Gpio_Config_FLOATING_In();

  19.          /*等待复位信号 注意不能无限等待*/
  20.          while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)&&(i<200))
  21.          i++;
  22. }

  23. /*写一个字节*/
  24. void Write_one_byte(u8 a)
  25. {
  26.      u8 i=0;
  27.          u8 b=0x01;
  28.          u8 c=0;
  29.         /*设置IO口为输出模式*/
  30.     Gpio_Config_Mode_Out();
  31.        
  32.         for(i=0;i<8;i++)
  33.         {
  34.              c=b&a;
  35.                  if(c)
  36.                  {
  37.                        /*拉低总线*/
  38.                      DS18B20_DQ_OUT_Low;
  39.                          /*延迟15us产生写时隙*/
  40.                          Delay_us(15);
  41.                          /*释放总线*/
  42.                          DS18B20_DQ_OUT_High;
  43.                          /*保持40us*/
  44.                          Delay_us(40);
  45.                  }   
  46.                  else
  47.                  {
  48.                          /*拉低总线*/
  49.                      DS18B20_DQ_OUT_Low;
  50.                          /*至少保持60us低电平*/       
  51.                          Delay_us(60);
  52.                          /*释放总线*/
  53.                          DS18B20_DQ_OUT_High;

  54.                  }
  55.                  b=b<<1;  
  56.         }
  57.              /*释放总线*/
  58.         DS18B20_DQ_OUT_High;
  59. }

  60. /*读一个字节*/
  61. u8 Read_one_byte()
  62. {
  63.         u8 a=0;
  64.           u8 i=0;      
  65.         for(i=0;i<8;i++)
  66.         {
  67.             /*设置IO口为输出模式*/
  68.             Gpio_Config_Mode_Out();
  69.             /*拉低总线*/
  70.             DS18B20_DQ_OUT_Low;
  71.             /*延迟1us产生读时隙*/
  72.             Delay_us(1);
  73.             /*释放总线*/
  74.             DS18B20_DQ_OUT_High;
  75.             /*设置IO口为浮空输入模式*/
  76.             Gpio_Config_FLOATING_In();

  77.             if(DS18B20_DQ_IN)
  78.             {
  79.               a=a>>1;
  80.                   a=a|0x80;
  81.             }
  82.             else
  83.             {
  84.                      a=a>>1;
  85.             }
  86.                 /*延迟50us保证时间要求*/
  87.                 Delay_us(50);
  88.                 /*设置IO口为输出模式*/
  89.             Gpio_Config_Mode_Out();
  90.                 /*释放总线*/
  91.             DS18B20_DQ_OUT_High;
  92.     }
  93.         return(a);
  94. }

  95. /***************
  96.   温度获取子函数
  97.   入口参数: 无
  98.   出口参数: 温度
  99. ****************/
  100. u8 wen_du_huo_qu()
  101. {
  102.      u16 a=0;
  103.          u8 b=0;

  104.          /*复位DS18B20*/
  105.          Init_Ds18b20();
  106.          /*写跳过ROM指令*/
  107.          Write_one_byte(0xCC);
  108.          /*写温度转换指令*/
  109.          Write_one_byte(0x44);
  110.          /*延迟等待转换完成*/
  111.          Delay_us(20);
  112.          /*写读暂存器指令*/
  113. ……………………

  114. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
DS18B20程序.rar (1.66 MB, 下载次数: 553)


评分

参与人数 1黑币 +6 收起 理由
wfliu + 6 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:367374 发表于 2018-7-8 16:18 | 只看该作者
想问一下最后的返回值为10进制还是16进制啊
回复

使用道具 举报

板凳
ID:9836 发表于 2018-7-14 10:51 | 只看该作者
谢谢,刚好需要参考一下
回复

使用道具 举报

地板
ID:247070 发表于 2018-7-15 08:59 | 只看该作者
        赞一个!
回复

使用道具 举报

5#
ID:394660 发表于 2018-9-6 17:31 | 只看该作者
我想下载没有黑币怎么办
回复

使用道具 举报

6#
ID:94464 发表于 2018-11-9 22:58 | 只看该作者
求下载
回复

使用道具 举报

7#
ID:332484 发表于 2018-11-10 12:27 | 只看该作者
谢谢楼主分享 刚好需要
回复

使用道具 举报

8#
ID:362180 发表于 2018-11-19 18:53 | 只看该作者

谢谢楼主分享 刚好需要
回复

使用道具 举报

9#
ID:423190 发表于 2018-12-4 21:54 | 只看该作者
谢谢楼主
回复

使用道具 举报

10#
ID:187640 发表于 2019-1-6 15:01 | 只看该作者
感谢楼主~~~~~~~~
回复

使用道具 举报

11#
ID:143443 发表于 2019-3-9 17:29 | 只看该作者
感谢楼主
回复

使用道具 举报

12#
ID:268143 发表于 2019-5-9 20:01 | 只看该作者
感谢楼主
回复

使用道具 举报

13#
ID:532502 发表于 2019-5-10 14:47 | 只看该作者
帮顶下,谢谢分享
回复

使用道具 举报

14#
ID:323453 发表于 2019-5-11 20:13 | 只看该作者
赞一个!
回复

使用道具 举报

15#
ID:546325 发表于 2019-6-19 10:16 | 只看该作者
谢谢楼主分享,试试能使用么
回复

使用道具 举报

16#
ID:465802 发表于 2019-7-4 15:19 | 只看该作者
下载看看,看能否使用。
回复

使用道具 举报

17#
ID:165762 发表于 2019-7-11 10:05 | 只看该作者
下载下来参考一下
回复

使用道具 举报

18#
ID:585883 发表于 2019-7-17 16:40 | 只看该作者
多谢楼主分享,正好要用
回复

使用道具 举报

19#
ID:391540 发表于 2019-7-18 13:38 | 只看该作者
18B20,好多年前接触的东西啊.
回复

使用道具 举报

20#
ID:145349 发表于 2019-10-16 08:46 | 只看该作者
DS18B20 编程还是比较 麻烦的,延时函数  调用 太多,影响主程序的运行
得用定时器 来调度 程序来实现延时,详细见 见附件
21STM32F10x_DS18BD20源程序说明.zip (97.94 KB, 下载次数: 25)
回复

使用道具 举报

21#
ID:250090 发表于 2019-12-16 09:11 | 只看该作者

18B20,好多年前接触的东西啊.
回复

使用道具 举报

22#
ID:91165 发表于 2020-2-25 18:59 | 只看该作者
正在做stm32 的 ds18b20
回复

使用道具 举报

23#
ID:707198 发表于 2020-3-12 17:42 | 只看该作者
这个是stm32的都能用吗
回复

使用道具 举报

24#
ID:340312 发表于 2021-4-3 09:23 | 只看该作者
想看看用定时器怎么读温度
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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