基于DS18B20数字式温度计的设计毕业设计Word格式文档下载.docx
《基于DS18B20数字式温度计的设计毕业设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于DS18B20数字式温度计的设计毕业设计Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
4.2.5显示数据刷新子程序…………………………………………………………..10
4.3程序……………………………………………………………………………………11
第5章测试与性能分析……………………………………………………………………...16
5.1测试结果……………………………………………………………………………….16
5.2优点…………………………………………………………………………………….16
5.3电路图仿真…………………………………………………………………………….17
5.4PCB布板………………………………………………………………………………18
心得体会………………………………………………………………………………………..19
致谢……………………………………………………………………………………………..20
第1章基于DS18B20数字温度计的设计课题介绍
本设计是一款简单实用的小型数字温度计,所采用的主要元件有传感器DS18B20,单片机AT89C51,,四位共阳极数码管一个,电容电阻若干。
DS18B20支持“一线总线”接口,测量温度范围-55°
C~+128°
C。
在-10~+85°
C范围内,精度为±
0.5°
DS18B20的精度较差为±
2°
C。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:
环境控制、设备或过程控制、测温类消费电子产品等。
本次数字温度计的设计共分为五部分,主控制器,LED显示部分,传感器部分,复位部分,时钟电路。
主控制器即单片机部分,用于存储程序和控制电路;
LED显示部分是指四位共阳极数码管,用来显示温度;
传感器部分,即温度传感器,用来采集温度,进行温度转换,复位部分,即复位电路。
测量的总过程是,传感器采集到外部环境的温度,并进行转换后传到单片机,经过单片机处理判断后将温度传递到数码管显示。
本设计能完成的温度测量范围是-55°
C,由于能力有限,不能实现报警功能。
第2章总体方案
2.1DS18B20内部结构及功能
DS18B20的内部结构如下图所示,主要包括:
寄生电源,温度传感器,64位ROM和单总线接口,存放中间数据的高速暂存器RAM,用于存储用户设定温度上下限值的TH和TL触发器,存储与控制逻辑,8位循环冗余校验码(CRC)发生器等7部分。
图2-1DS18B20的内部结构
图2-2温度和数字量的关系
DS18B20的性能特点如下:
●独特的单线接口方式仅需要一个端口引脚进行通信;
●多个DS18B20可以并联在唯一的三线上,实现多点组网功能;
●无需外部器件;
●可通过数据线供电,电压范围:
3.0~5.5V;
●测温范围-55℃~+125℃,在-10~+85℃时精度为±
0.5℃
●零待机功耗
●温度以9或12位数字量读出;
●用户可定义的非易失性温度报警设置
●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作
2.2方案选择讨论
根据系统的设计要求,选择DS18B20作为本系统的温度传感器,选择单片机AT89C51为测控系统的核心来完成数据采集、处理、显示等功能。
选用数字温度传感器DS18B20,省却了采样/保持电路、运放、数/模转换电路以及进行长距离传输时的串/并转换电路,简化了电路,缩短了系统的工作时间,降低了系统的硬件成本。
该系统的总体设计思路如下:
温度传感器DS18B20把所测得的温度发送到AT89C51单片机上,经过51单片机处理,将把温度在显示电路上显示,本系统显示器用4位共阳LED数码管以动态扫描法实现。
检测范围-55摄氏度到128摄氏度。
按照系统设计功能的要求,确定系统由3个模块组成:
主控制器、测温电路和显示电路。
数字温度计总体电路结构框图如图1所示。
图1数字温度计总体电路结构框图
第3章硬件部分设计
3.1主控制器
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
3.2显示电路
显示电路采用4位共阳LED数码管。
电路图如下:
图3-1显示电路
3.3复位电路
单片机系统的复位电路在这里采用的是上电+按钮复位电路形式,其中电阻R采用6.8KΩ的阻值,电容采用电容值为10μ的电解电容。
图3-2复位电路
3.4温度传感器
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
图3-3温度传感器
3.5系统总电路图
图3-4系统总电路图
第4章软件电路设计
4.1软件设计思路
单片机应用系统的程序设计,可以采用汇编语言完成,也可以采用C语言实现。
汇编语言对单片机内部资源的操作直接,简洁,代码紧凑。
但是当系统规模较大时,设计人员更趋于采用C语言进行程序设计。
这是由于C语言具有良好的可读性,可移植性和基本的硬件操作能力。
采用C51进行单片机应用程序设计,编译器能自动完成变量的存储单元的分配,编程者可以专注于应用程序的逻辑思想;
对常用功能模块和算法编制相应的函数,可以方便地进行算法和应用程序的移植。
因此,用C51进行程序设计可以大大提高实际工程的开发效率。
目前,C51的代码长度已经做到了汇编水平的1.2~1.5倍。
当代码长度超过4KB以上时,C51比汇编语言更具有明显优势。
我们还可以借助仿真器,对应用程序的关键代码进行优化,以减少代码长度,提高运行速度。
由于单片机生产工艺的改善,单片机的运行速度和内部存储器容量都有了较大的提高,这些都为C51语言的使用创造了有利的条件。
综上所述,故软件语言使用C51语言。
4.2流程图
主要包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和现实数据刷新子程序等。
4.2.1主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值。
温度测量每1S进行一次。
主流程图如下:
图4-1主程序流程图
4.2.2读出温度子程序
读出温度子程序的主要功能是读出RAM中的9字节。
在读出时须进行CRC校验,校验有错时不进行温度数据的改写。
流程图如下:
图4-2读出温度子程序流程图
4.2.3温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令。
当采用12位分辨率时,转换时间约为750ms。
在本程序设计中,采用1s显示程序延时法等待转换的完成。
图4-3温度转换命令子程序流程图
4.2.4计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定。
图4-4温度转换命令子程序流程图
4.2.5显示数据刷新子程序
显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。
图4-5显示数据刷新子程序流程图
4.3程序:
//使用AT89C2051单片机,12MHZ晶振,用共阳LED数码管
//P1口输出段码,P3口扫描
//#pragmasrc(d:
\aa.asm)
#include"
reg51.h"
intrins.h"
//_nop_();
延时函数用
#defineDisdataP1//段码输出口
#definediscanP3//扫描口
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P3^7;
//温度输入口
sbitDIN=P1^7;
//LED小数点控制
uinth;
//*******温度小数部分用查表法**********//
ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
ucharcodedis_7[12]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0x40};
/*共阳LED段码表"
0"
"
1"
2"
3"
4"
5"
6"
7"
8"
9"
不亮"
-"
*/
ucharcodescan_con[4]={0xfe,0xfd,0xfb,0xf7};
//列扫描控制字
uchardatatemp_data[2]={0x00,0x00};
//读出温度暂放
uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};
//显示单元数据,共4个数据,一个运算暂存用
/***********11微秒延时函数**********/
voiddelay(uintt)
{
for(;
t>
0;
t--);
}
/***********显示扫描函数**********/
scan()
chark;
for(k=0;
k<
4;
k++)//四位LED扫描控制
{
Disdata=dis_7[display[k]];
if(k==1){DIN=0;
discan=scan_con[k];
delay(90);
discan=0xff;
}
/***********18B20复位函数**********/
o