基于DS18B20温度传感器的温度计设计_第1页
基于DS18B20温度传感器的温度计设计_第2页
基于DS18B20温度传感器的温度计设计_第3页
基于DS18B20温度传感器的温度计设计_第4页
基于DS18B20温度传感器的温度计设计_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于DS18B20温度传感器的温度计设计摘要:以DS18B20温度传感器,4位7段数码管和AT89C52RC微控制器为主要部分实现数字温度计的设计,利用DS18B20本身具有的模数转换功能和暂时存储功能将模拟量气温转换为微控制器可处理的数字量,并使用AT89C52RC的输入输出及定时器中断功能通过DS18B20的单线连接结构与DS18B20进行信息传输,读取温度值并用数码管显示出来。1. 设计选题的目的、意义通过数字温度计的设计进一步熟悉单片机微控制器及相关数字/模拟电路的原理和功能,熟悉单片机的程序设计,学会传感器的使用和相关文献的查找及学习。2. 硬件电路设计硬件部分主要包括微控制器、温度

2、传感器模块和数码管显示模块三部分。2.1 微控制器主要功能电路如下图,包括电源,接地,复位电路,时钟脉冲电路(11.0592MHz)。2.2 温度传感器模块如下图,使用外部电源,可以减少程序复杂程度。DS18B20特性:l 独特的单线接口仅需一个端口进行通讯l 简单的多点分布应用l 无需外部器件l 可通过数据线供电l 零待机功耗l 测温范围-55+125l 温度以12位数字量读出l 温度数字量转换时间750ms(12位)l 用户可定义的非易失性温度警报设置l 报警搜索命令识别并超过程序限定温度(温度报警条件)的器件l 应用包括温度控制、工业系统、消费品、温度计或任何热感测系统2.3 数码管显示

3、模块如上图,由两片SN74HC573N八路透明锁存器分别控制共阳极数码管位和段的锁存,实现只用MCU的一组I/O口分别控制数码管位和段的选通。3. 软件电路设计软件同样包括三个部分:传感器控制,显示控制,主程序。3.1 温度传感器控制ADS18B20内部存储读写与控制原理右图是DS18B20内部9字节的暂存器的结构,向其传送读取命令后,暂存器会依次将9个字节的数据通过单线送出,每个字节都是低位在先。在本课题,只需0字节和1字节,也就是温度LSB(低8位)和温度MSB(高8位)中的数据。这两个字节中各位数据的意义如下表所示。MSB的高5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数

4、值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625才能得到实际温度。MSBSSSSS262524LSB232221202-12-22-32-4DS18B20有5条ROM操作命令和6条存储器操作命令,本实例中用到1条ROM操作命令和2条存储器操作命令,见下表。性质指令约定代码操作说明ROM操作跳过ROMCCH允许总线控制器不提供64位ROM编码就使用存储器操作命令存储器操作温度转换44H启动DS18B20进行温度转换存储器操作读暂存器BEH读暂存器9个字节内容对DS18B20操作之前必须初始化(复位),而且,操作必须遵守一定的时序规则,具体见

5、附件程序部分。B温度传感器控制流程开始CCH命令(跳过ROM)44H命令(温度转换)初始化延时等待转换初始化CCH命令(跳过ROM)44H命令(读暂存器)从DS18B20接收数据温度传感器控制程序见附件“DS18B20.h”。3.2 数码管显示控制显示小数点后一位,即显示范围:-99.9999.9,需要四位数码管同时显示,短时内连续扫描4位数码管,视觉效果即为同时显示。流程图如下。数码管显示程序见附件“numled.h”。开始百位选通信号十位显示信号百位显示信号十位选通信号个位选通信号0.1位显示信号0.1位选通信号个位显示信号3.3 主程序不断显示温度值,同时利用定时器中断控制温度传感器,每

6、当中断到达且判断条件(转换时间完毕)符合时从DS18B20接收并转换数据并使其复位和再一次转换温度数值,中断结束等待下一次中断流程图如下,程序见附件“温度计.c”。开始设置定时器及中断初始状态数码管显示温度值初始化DS18B20S开始温度转换定时器开启中断开始定时器复位温度转换时间完毕?从DS18B20接收数据转换并储存数据中断结束,返回是否总结该项目的重点,同时也是耗时最长的难点在于搞清楚DS18B20的工作原理及工作方式,其难在涉及到比较多的基础硬件控制,而这是C语言学习者相对汇编语言学习者来说比较吃力的地方,其次还有DS18B20读写时序控制规则也是比较耗时的地方,我们通过不断地修改测试

7、和借鉴网络已有实例解决。附件目录:<温度计.c><userlib.h><DS18B20.h><numled.h>File: <温度计.c>#include<reg52.h>#include "userlib.h"#include "numled.h"#include "DS18B20.h"unsigned int intcount=0; /中断次数unsigned char tempH=0; /保存LSB,MSBunsigned char tempL=0;unsi

8、gned int temperature=0; /温度值保存在temperature里/-主程序-void main()IE=0x82;TMOD=0x01;TH0=(65535-1000)/256;TL0=(65535-1000)%256;while(Init_DS18B20();/初始化WriteOneChar(0xcc);/跳过读序列号的操作WriteOneChar(0x44); /启动温度转换TR0=1;while(1)temperature=(0x00ff&tempL)|(0x00ff&tempH)<<8);if(tempH>8)temperature

9、=temperature+1;Show(4,16,0);elseShow(4,temperature/1600%10,0);Show(3,temperature/160%10,0);Show(2,temperature/16%10,1);Show(1,temperature/8%10,0);/-定时器中断-void timer0(void) interrupt 1TH0=(65535-1000)/256; /定时器初值TL0=(65535-1000)%256;intcount+;if(intcount=1000) /1000*1000大约1090msintcount=0; Init_DS18B

10、20();/初始化WriteOneChar(0xcc);/跳过读序列号的操作WriteOneChar(0xbe); /读温度寄存器(头两个值分别为温度的低位和高位)tempL=ReadOneChar(); /读出16bit温度tempH=ReadOneChar();while(Init_DS18B20();/初始化WriteOneChar(0xcc);/跳过读序列号的操作WriteOneChar(0x44); /启动温度转换File:<userlib.h>#define LED P0 /LED+数码管使用端口sbit seclock=P16;/数码管段锁存sbit bbitlock

11、=P17;/数码管位锁存 sbit DQ=P22; /DS18B20void Delayms(unsigned int x)/延时函数,单位msunsigned int i,j;for(i=0;i<x;i+)for(j=0;j<110;j+);void Delay(unsigned int x) /延时函数for(;x>0;x-);File: <DS18B20.h>/-初始化-unsigned Init_DS18B20(void)unsigned char x=0;DQ=1;/DQ先置高Delay(5);/稍延时DQ=0; /发送复位脉冲Delay(70); /延

12、时(480us<x<960us)DQ=1;/拉高数据线Delay(5);/等待(1560us)x=DQ;/用X的值来判断初始化有没有成功,18B20存在的话X=0,否则X=1Delay(60);return(x);/-读一个字节-unsigned char ReadOneChar(void)/主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号unsigned char i=0; /每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期unsigned char dat=0;for(i=8;i>0;i-)/一个字节有8位DQ=1

13、;Delay(1);DQ=0;dat>>=1; DQ=1;if(DQ) dat|=0x80;else dat&=0x7f; Delay(4);return(dat);/-写一个字节-void WriteOneChar(unsigned char dat)unsigned char i=0; /数据线从高电平拉至低电平,产生写起始信号。15us之内将所需写的位送到数据线上for(i=8;i>0;i-)/在1560us之间对数据线进行采样,如果是高电平就写1,低写0发生DQ=0;/在开始另一个写周期前必须有1us以上的高电平恢复期。DQ=dat&0x01;Dela

14、y(5);DQ=1;dat>>=1;Delay(4);File: <numled.h>unsigned char bbitcode5=0,0x01,0x02,0x04,0x08; /位选代码unsigned char numcode17=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xa0,0x83,0xa7,0xa1,0x84,0x8e,0xbf; /显示数字代码0f和负号unsigned char dotcode2=0xff,0x7f;/是否显示dpvoid Cls()/清屏消影LED=0xff;seclock=1;bbitlock=1;bbit

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论