单片机原理及应用项目化教程(C语言版)项目八DS18B20与蜂鸣器.ppt

单片机原理及应用项目化教程(C语言版)项目八DS18B20与蜂鸣器.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
uint Get18B20Temp() { uchar MSB,LSB; float sum; bit ack; ack= init_18B20( ); if(ack==0) { Write18B20(0xCC); Write18B20(0xBE); LSB = Read18B20(); MSB = Read18B20(); temp = ((int)MSB8) + LSB; sum=temp*0.0625; //温度读取 temp=sum*10+0.5;//小数点保留一位,加0.5为四舍五入 } return temp; } void dispaly(uint temp1) { static uchar i = 0; //此处必须为静态变量或者全局变量 ledwei[0]=Ledduan[temp1%10]; ledwei[1]=Ledduan1[ temp1/10%10]; ledwei[2]=Ledduan[ temp1/100%10]; P0 = 0xFF; switch(i){ case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=ledwei[0];break; case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=ledwei[1];break; case 2: ADDR2=0; ADDR1=1; ADDR0=0; i=0; P0=ledwei[2];break; default:break; } } 将上述程序编译一下,并下载到单片机中,观察运行结果并分析。 ? 思考: 1、怎么测量负温度,并编写程序? 2、 怎么把测量到的温度通过LCD显示出来?(写出显示程序) 3、 当温度超过设置值时,怎么设置使蜂鸣器发出某首音乐声? * * 项目八 DS18B20与蜂鸣器 8.1 DS18B20介绍 DS18B20是美信公司的一款温度传感器,单片机可以通过1-Wire协议与DS18B20进行通信,最终将温度读出。 1. GND为电源地; 2. DQ为数字信号输入/输出端; 3.VDD为外接供电电源输入端(在寄生电源接线方式时接地)。 DS18B20工作原理 DS18B20通过编程,可以实现最高12位的温度存储值,在寄存器中,以补码的格式存储。如下图所示,其中S表示的是符号位,低11位都是2的幂,用来表示最终的温度。 DS18B20温度值 DS18B20工作协议过程 1、初始化。1-Wire总线开始需要检测这条总线上是否存在DS18B20这个器件。如果存在DS18B20,总线会返回一个低电平脉冲,如果不存在,总线保持为高电平。获取存在脉冲不仅仅是检测是否存在DS18B20,还要通过这个脉冲过程通知DS18B20准备好,单片机要对它进行操作了。 存在脉冲检测过程,首先单片机要拉低这个引脚,持续大概480us到960us之间的时间即可,我们的程序中持续了500us。然后,单片机释放总线,就是给高电平,DS18B20等待大概15到60us后,会主动拉低这个引脚大概是60到240us,而后DS18B20会主动释放总线,这样IO口会被上拉电阻自动拉高。 bit init_18B20( ) { bit ack; IO_18B20=1; _nop_(); _nop_(); IO_18B20 = 0; Delay10us(50); IO_18B20 = 1; Delay10us(5); ack = IO_18B20; Delay10us(20);//总线释放  IO_18B20=1; return ack; } 2、ROM操作指令。在每个DS18B20内部都有一个唯一的64位长的序列号,这个序列号值就存在DS18B20内部的ROM中。开始的8位是产品类型编码(DS18B20是0x10),接着的48位是每个器件唯一的序号,最后的8位是CRC校验码。DS18B20可以引出去很长的线,最长可以到几十米,测不同位置的温度。单片机可以通过和DS18B20之间的通信,获取每个传感器所采集到的温度信息,也可以同时给所有的DS18B20发送一些指令。 Skip ROM(跳过ROM):0xCC。当总线上只有一个器件的时候,可以跳过ROM,不进行ROM检测。 3.RAM存储器操作指令。 读暂存寄存器:0xBE DS18B20的温度数据是2个

文档评论(0)

autohhh + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档