9759|22

25

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

DS18B20怎样使用? [复制链接]

 
3芯积分
如题,查看了DS18B20资料,仍不知道程序要干些什么。如果接3个DS18B20温度分别显示在1602上,怎么实现?
我想要个思路:
1、DS18B20本身要干些什么,是否只需硬件连好?所有数据线并一起连到     单片机端口就可以了?
2、用STC的52单片机,单片机要干些什么,要写些什么子程序?
3、DS18B20输出与单片机怎样对接上?DS18B20输出什么,单片机接收后
    怎样处理,处理结果是什么形式,特别是怎样显示成有小数点?
另外,1602显示我知道,写指令和写数据,显示,我会弄,就是不知道怎样操作DS18B20,就算它有返回数据,我也不知道是什么数,还有看网上又怎么*10啦什么的,小数点在哪啊什么的,看不明白,希望大神帮助解答,资料可在论坛说,或发我邮箱:mdt150@163.com。谢谢啦!

此帖出自51单片机论坛

最新回复

  详情 回复 发表于 2017-3-30 17:05
点赞 关注(2)
 

回复
举报

732

帖子

2

TA的资源

纯净的硅(中级)

沙发
 
好不巧啊,网盘上没有找到我的程序,上次弄物联网耍耍的时候用到了久违的DS18B20了,不过上班的电脑上没程序。。。总的来说控制DS18B20应该是比较简单的了,没几个寄存器,主机发命令给从机,从机可以多个设备连接在总线上,然后主机通过芯片的ID来寻找对应的从机,数据手册上很清楚的。
此帖出自51单片机论坛
 
个人签名亚里士缺德
 
 

回复

1万

帖子

26

TA的资源

裸片初长成(高级)

板凳
 
本帖最后由 dontium 于 2016-11-24 12:04 编辑

1、DS18B20本身要干些什么
你用这个芯片要干什么?
2、单片机要干些什么
    你学单片机了吗?
3、DS18B20输出与单片机怎样对接上?
  手册上写得很清楚,如果还不知道: 1、请再读一遍。2、重复第一步

DS18B20是个广泛使用的芯片,网上有很多资料,楼主可以找一找,包括电路图及程序。
此帖出自51单片机论坛
 
 
 

回复

419

帖子

1

TA的资源

一粒金砂(中级)

4
 
硬件:很简单,DS18B20一根数据线和单片机相连
软件:写个函数,网上有很多可以参考

此帖出自51单片机论坛
 
 
 

回复

4005

帖子

0

TA的资源

版主

5
 
晕你啦
此帖出自51单片机论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(中级)

6
 
本帖最后由 zl2168 于 2016-11-24 19:21 编辑

实例97  一线式DS18B20测温
DS18B20简介
内部组织结构   
操作步骤和操作指令   
电路设计   
程序设计   
Keil调试   
Proteus仿真   
Proteus仿真一下,确认有效。
实例97 DS18B20测温.rar (51.78 KB, 下载次数: 76)

以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行








此帖出自51单片机论坛
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

7
 
zl2168 发表于 2016-11-24 19:18
实例97  一线式DS18B20测温
⒈ DS18B20简介
⑴ 内部组织结构    …
⑵ 操作步骤和操作指令    …
⒉ 电 ...


这个仿真有效。有没有教程,C语言的程序参考呢?
此帖出自51单片机论坛
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

8
 
dontium 发表于 2016-11-24 12:02
1、DS18B20本身要干些什么
你用这个芯片要干什么?
2、单片机要干些什么
    你学单片机了吗?
3、DS18 ...

你这回复,我也是醉了。我知道用它采集并反馈温度啊,单片机怎样才算学了?芯片手册,是有写,但是是说一根的情况,多根的,我初学,想确认一下,希望大神们给点帮助。我不是要具体程序,我只要思路和一些详细点的资料。也正因为网上资料太多,且看不太明白,才在论坛问问看有没有通俗易懂的答复,哎。
此帖出自51单片机论坛
 
 
 

回复

1万

帖子

26

TA的资源

裸片初长成(高级)

9
 
537224 发表于 2016-11-24 19:55
你这回复,我也是醉了。我知道用它采集并反馈温度啊,单片机怎样才算学了?芯片手册,是有写,但是是说一 ...

呵呵,如有不妥,只当我没说。

要掌握一个新器件,除了有基础知识外,就也就是看它的手册,除此最好的办法外,没有它法,看别人做的东西,也是根据手册得来的,只是别人理解了。

对于新器件,全靠看别人的例程不是个好办法,因为它的很多细节例程中是说不到,到头来还需要看手册。
此帖出自51单片机论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(中级)

10
 
537224 发表于 2016-11-24 19:43
这个仿真有效。有没有教程,C语言的程序参考呢?

不是已经回复了你吗!
此帖出自51单片机论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(中级)

11
 
本帖最后由 zl2168 于 2016-11-24 22:17 编辑
537224 发表于 2016-11-24 19:55
你这回复,我也是醉了。我知道用它采集并反馈温度啊,单片机怎样才算学了?芯片手册,是有写,但是是说一 ...

也正因为网上资料太多,且看不太明白,才在论坛问问看有没有通俗易懂的答复
张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有DS18B20测温的详细资料,还有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行
此帖出自51单片机论坛
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

12
 
汤权 发表于 2016-11-24 09:18
好不巧啊,网盘上没有找到我的程序,上次弄物联网耍耍的时候用到了久违的DS18B20了,不过上班的电脑上没程 ...

能不能找到发现我邮箱,mdt150@163.com,感谢。
此帖出自51单片机论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(中级)

13
 
537224:你的悬赏是虚的!
此帖出自51单片机论坛
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

14
 
zl2168 发表于 2016-12-1 10:59
537224:你的悬赏是虚的!

你的答复,没有什么资料,只是推荐什么书。还有给的例程只有仿真和HEX文件,没有C程序,你想让我就这样就悬赏吗?没解决。
此帖出自51单片机论坛
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

15
 
537224 发表于 2016-12-2 22:11
你的答复,没有什么资料,只是推荐什么书。还有给的例程只有仿真和HEX文件,没有C程序,你想让我就这样就 ...

能否发些实用例子,资料?
此帖出自51单片机论坛
 
 
 

回复

927

帖子

0

TA的资源

纯净的硅(中级)

16
 
买一块开发板,带教程的,一百来块钱的板子常用的设备都会有,教程里的代码全做几遍,好好消化一下,想不会也难。
此帖出自51单片机论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(中级)

17
 
谁要你的悬赏!不过是调侃一下而已,但给你推荐的书上确有你所需的东东!
此帖出自51单片机论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

18
 
DS18B20测温芯片,可以并一起,我用过50个芯片并一起的,单片机读串口,每个芯片有自己的地址,测温分辨率是0.5度的,我用过人家做好的成品,
此帖出自51单片机论坛
 
 
 

回复

162

帖子

0

TA的资源

一粒金砂(中级)

19
 
郭天祥的那本书里有一个温度传感器的例程 多个的我没试过 收藏下 帮顶
此帖出自51单片机论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

20
 
对于新手要多点耐心,我们也是由不懂学习来的。
先说电路:
3---VCC
1---GND
2---数据线(要加上拉电阻)

再说程序
sbit DQ=P1^7; //单片机P1.7接数据口
unsigned char time;   //设置全局变量,专门用于严格延时
//函数功能:将DS18B20传感器初始化
Init_DS18B20(void)
{
  DQ = 1;           //先将数据线拉高
  delay_us(6); //略微延时约6微秒
  DQ = 0;           //再将数据线从高拉低,要求保持480~960us
  delay_us(600); //略微延时约600微秒,以向DS18B20发出一持续480~960us的低电平复位脉冲
  DQ = 1;              //释放数据线(将数据线拉高)
  delay_us(30);//延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)   
  delay_us(200);
}

//从DS18B20读取一个字节数据
unsigned char ReadOneChar(void)
{
   unsigned char i=0;
   unsigned char dat; //储存读出的一个字节数据
   for (i=0;i<8;i++)
   {   
     DQ =1;       // 先将数据线拉高
     _nop_();     //等待一个机器周期
     DQ = 0;      //单片机从DS18B20读书据时,将数据线从高拉低即启动读时序
    dat>>=1;
     _nop_();     //等待一个机器周期     
     DQ = 1;     //将数据线"人为"拉高,为单片机检测DS18B20的输出电平作准备
    delay_us(6); //延时约6us,使主机在15us内采样
     if(DQ==1)
        dat|=0x80; //如果读到的数据是1,则将1存入dat
    else
     dat|=0x00;//如果读到的数据是0,则将0存入dat
       //将单片机检测到的电平信号DQ存入r
    delay_us(3);  //延时3us,两个读时序之间必须有大于1us的恢复期
     }                     
return(dat);    //返回读出的十进制数据
}

//向DS18B20写入一个字节数据
WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=0; i<8; i++)
   {
    DQ =1;         // 先将数据线拉高
    _nop_();      //等待一个机器周期
    DQ=0;          //将数据线从高拉低时即启动写时序      
    DQ=dat&0x01;   //利用与运算取出要写的某位二进制数据,
                       //并将其送到数据线上等待DS18B20采样
   delay_us(30);//延时约30us,DS18B20在拉低后的约15~60us期间从数据线上采样
    DQ=1;          //释放数据线      
    delay_us(3);//延时3us,两个写时序间至少需要1us的恢复期
    dat>>=1;       //将dat中的各二进制位数据右移1位
   }
   delay_us(5); //稍作延时,给硬件一点反应时间
}


// 读温度
void ReadTemperature(unsigned char *p)
{
unsigned char tempL=0;
unsigned char tempH=0;
unsigned int sdate;//测量到的温度的整数部分
unsigned char xiaoshu1;//小数第一位
unsigned char xiaoshu2;//小数第二位
unsigned char xiaoshu;//两位小数
bit  fg=1;        //温度正负标志

   Init_DS18B20();     //将DS18B20初始化
   WriteOneChar(0xCC); // 跳过读序号列号的操作
   WriteOneChar(0x44); // 启动温度转换   
   delay_us(500); //温度转换需要一点时间
   Init_DS18B20();     //将DS18B20初始化
   WriteOneChar(0xCC); //跳过读序号列号的操作
   WriteOneChar(0xBE); //读取温度寄存器,前两个分别是温度的低位和高位
   tempL=ReadOneChar(); //读出温度的低位LSB
   tempH=ReadOneChar(); //读出温度的高位MSB

   if(tempH>0x7f)      //最高位为1时温度是负
                {
                 tempL=~tempL;         //补码转换,取反加一
                 tempH=~tempH+1;      
                 fg=0;      //读取温度为负时fg=0
         }
        sdate = tempL/16+tempH*16;      //整数部分
        xiaoshu1 = (tempL&0x0f)*10/16; //小数第一位
        xiaoshu2 = (tempL&0x0f)*100/16%10;//小数第二位
        xiaoshu=xiaoshu1*10+xiaoshu2; //小数两位

        if(fg==0) *p=1;
        else *p=0;
        *(p+1) =  sdate/10;
        *(p+2) =  sdate%10;
        *(p+3) =  xiaoshu1;
        *(p+4) =  xiaoshu2;
}

应用
unsigned char arTemperature[5];


void main(void)
{
      ......
     ReadTemperature(arTemperature);
     ......
}


那么在数组arTemperature中就是温度。
第一个元素是 正负温度,00是零上,01 是零下
第二、三个元素是温度的整数部分2位 二是十位 三是个位
第四、五个元素是温度的小数部分2位
如: 00  02  06  08  03    就是零上 26.83度。
后期数据处理自己看着办就行了。

ds18b20.jpg (40.87 KB, 下载次数: 2)

ds18b20.jpg
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表