标题: ds18b20温度显示程序+Proteus仿真 [打印本页]

作者: xiaoyao    时间: 2014-12-17 17:08
标题: ds18b20温度显示程序+Proteus仿真



源程序和仿真文件下载: 温度显示.rar (156.57 KB, 下载次数: 627)

作者: xiaoyao    时间: 2014-12-17 17:09
  1. #include "typedef.h"
  2. #include "device_init.h"
  3. #include "delay.h"

  4. /************************************************
  5. * 函数名称:ds18b20_reset
  6. * 输    入:
  7. * 输    出:
  8. * 功能描述:
  9. *************************************************/
  10. u8 ds18b20_reset(void)
  11. {
  12.         DQ_PIN = HIGH;
  13.         delay_16us(1);
  14.         DQ_PIN = LOW;
  15.         delay_16us(30);                //延时600us
  16.         DQ_PIN = HIGH;
  17.         delay_16us(5);                //延时80us
  18.         if(!DQ_PIN)
  19.         {
  20.                 delay_16us(30);        //延时420us
  21.                 return 1;
  22.         }
  23.         else
  24.                 return 0;
  25. }
  26. /************************************************
  27. * 函数名称:ds18b20_write_byte
  28. * 输    入:
  29. * 输    出:
  30. * 功能描述:
  31. *************************************************/
  32. void ds18b20_write_byte(u8 wByte)
  33. {
  34.         u8 i;

  35.         for(i=0; i<8; i++)
  36.         {
  37.                 DQ_PIN = LOW;
  38.                 NOP();
  39.                 NOP();
  40.                 NOP();
  41.                 NOP();
  42.                 NOP();
  43.                 NOP();
  44.                 NOP();
  45.                 DQ_PIN = wByte & 0x01;
  46.                 NOP();
  47.                 NOP();
  48.                 NOP();
  49.                 NOP();
  50.                 NOP();
  51.                 DQ_PIN = HIGH;
  52.                 NOP();
  53.                 NOP();
  54.                 NOP();
  55.                 wByte >>= 1;
  56.         }
  57. }
  58. /************************************************
  59. * 函数名称:ds18b20_read_byte
  60. * 输    入:
  61. * 输    出:
  62. * 功能描述:
  63. *************************************************/
  64. u8 ds18b20_read_byte(void)
  65. {
  66.         u8 rByte;
  67.         u8 i;

  68.         for(i=0; i<8; i++)
  69.         {
  70.                 DQ_PIN = LOW;
  71.                 NOP();
  72.                 NOP();
  73.                 rByte >>= 1;
  74.                 NOP();
  75.                 NOP();
  76.                 NOP();
  77.                 NOP();
  78.                 NOP();
  79.                 NOP();
  80.                 DQ_PIN = HIGH;
  81.                 NOP();
  82.                 NOP();
  83.                 NOP();
  84.                 NOP();
  85.                 NOP();
  86.                 NOP();
  87.                 NOP();
  88.                 if(DQ_PIN)
  89.                         rByte |= 0x80;
  90.                 NOP();
  91.                 NOP();
  92.                 NOP();
  93.                 NOP();
  94.                 NOP();
  95.                 NOP();
  96.                 NOP();
  97.         }
  98.         DQ_PIN = HIGH;
  99.         return rByte;
  100. }
  101. /************************************************
  102. * 函数名称:ds18b20_get_temp
  103. * 输    入:
  104. * 输    出:
  105. * 功能描述:
  106. *************************************************/
  107. u16 ds18b20_get_temp(void)
  108. {
  109.         u16 Temp;

  110.         if(ds18b20_reset() == 0)                        //复位
  111.                 return 0;
  112.         ds18b20_write_byte(0xcc);                        //忽略ROM
  113.         ds18b20_write_byte(0x44);                        //发送温度转化命令
  114.         delay_16us(30);
  115.         if(ds18b20_reset() == 0)                        //再次复位
  116.                 return 0;
  117.         ds18b20_write_byte(0xcc);                        //忽略ROM
  118.         ds18b20_write_byte(0xbe);

  119.         Temp = ds18b20_read_byte();
  120.         Temp |= ds18b20_read_byte() << 8;

  121.         return Temp;
  122. }
复制代码

作者: hq51hei    时间: 2015-4-24 16:18
谢谢分享,太好了正好需要。
作者: KIJW    时间: 2015-10-20 00:51
顶一个,做得很好。
作者: steven33jan    时间: 2015-12-27 23:59
可以用2个2位数码管做吗?

QQ图片20151228000023.png (1.59 KB, 下载次数: 276)

QQ图片20151228000023.png

作者: admin    时间: 2015-12-28 00:29
steven33jan 发表于 2015-12-27 23:59
可以用2个2位数码管做吗?

当然可以,不过为什么会有这样的需求呢?
作者: steven33jan    时间: 2015-12-29 20:03
admin 发表于 2015-12-28 00:29
当然可以,不过为什么会有这样的需求呢?

那个程序要怎么改?
作者: steven33jan    时间: 2015-12-29 20:04
那么程序要怎么改?
作者: 1179720524    时间: 2016-1-9 22:12
大神大神  太需要你帮忙了  我们老师安排任务 利用PRUTUES实习单片机对DS18B20控制,测温。仿真。  跟您发的是一回事么  后天下午验收 能给点指导性意见不  非常感谢啊
作者: nba52411    时间: 2016-4-22 09:15
感谢楼主 最近搞毕设正需要这个
作者: 萌萌喵    时间: 2016-5-24 18:37
请问这里的u8 ds18b20_reset(void)里的u8是指unsigned char形式的吗
作者: qazssd    时间: 2016-6-17 11:44
正好这周设计做这个,先学习学习
作者: lemonack    时间: 2016-10-26 17:56
为什么我仿真之后显示 -0.5°?
作者: lemonack    时间: 2016-10-26 17:58
噢哦,突然弄懂了,谢谢楼主
作者: keepstudying    时间: 2016-11-2 22:44
谢谢分享
作者: lele5211314    时间: 2017-2-11 11:52
大爱无疆
作者: lucifer1995    时间: 2017-3-1 15:00
nice    666
作者: 享尔    时间: 2017-5-2 18:43
赞赞赞
作者: 张东qaq    时间: 2017-5-2 19:01
怎么查看温度电阻的是好的还是坏的
作者: dfsdfsd    时间: 2017-5-10 00:52
顶一个
作者: glenshu    时间: 2017-5-24 18:40
不能下载好可惜啊
作者: glenshu    时间: 2017-5-24 18:40
怎么获得黑币,下载不了啊
作者: han123456    时间: 2017-6-15 00:42
很好,刚好需要的仿真文件
作者: sxc677    时间: 2018-11-19 10:18
用的什么软件编程的?版本是多少?

作者: 噗噗噗p    时间: 2019-3-28 00:27
看一看学习一下
作者: zhengfu    时间: 2020-4-22 21:48
非常好的资料,学习下。
作者: 悠悠风铃鸣    时间: 2020-5-17 22:58
太及时了,急死我了,感谢感谢
作者: xtiwxk    时间: 2020-10-23 15:17
谢谢分享,太好了正好需要。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1