基于DS18B20的数字温度计设计课程设计Word文档格式.docx
《基于DS18B20的数字温度计设计课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于DS18B20的数字温度计设计课程设计Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
![基于DS18B20的数字温度计设计课程设计Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/10/3fc2fc1a-efd4-4b0f-8db8-9b5f1fc8c40e/3fc2fc1a-efd4-4b0f-8db8-9b5f1fc8c40e1.gif)
4.2、系统软件设计………………………………………………………………
4.3、读出温度子程序…………………………………………………………
4.4、温度转换命令子程序……………………………………………………
4.5、计算温度子程序…………………………………………………………
4.6、显示数据刷新子程序……………………………………………………
第五章、源程序…………………………………………………………
第六章、课程设计小结…………………………………………………
附录:
参考文献…………………………………………………………
引言
在科学技术不断发展的今天,温度的检测、控制应用于许多行业,随着电子工业的发展,数字仪表反应速度快、操作简单,对使用环境要求不高的优点,市场上逐渐出现越来越多的数字式温度计,实践表明,整个低功耗高精度的便携式数字式温度计使用方便,工作稳定,待机时间长,具有广阔的应用前景,并开始得到广泛应用。
本论文介绍了智能集成温度传感器DS18B20的结构特征及控制方法,并对以此传感器,AT89C51单片机为控制器和LCD1602(LiquidCrystalDisplay)为显示器构成的便携式数字温度计的电路组成、工作原理及程序设计作了详细的介绍。
本论文所介绍的数字式温度计测量范围为0~100℃,精度为0.1℃,可以手动设置温度上下报警值,当温度超出所设报警值还将发出报警鸣叫声,并显示温度值,该温度计适用于人民的日常生活和工、农业生产领域。
关键词:
DS18B20;
AT89C51;
LCD1602;
温度计;
数字式控制
第一章、绪论
1.1、绪论
十七世纪是温度计诞生和发展的最初阶段,这个物理仪器几乎比任何其它仪器都得到更广泛的应用。
现代的历史研究认为最早发明温度计的科学家是伽利略,他于1592年发明了最早的气体温度计,最早的液体温度计是荷兰科学家华伦海特制造出来。
随着宇航、核能、冶金、材料、低温、微电子学和生物医学等方面的发展,对温度测量、控制的精度和范围提出了越来越高的要求,尤其是对温度的测量非但要准确,而且需读取数值更直观更方便,从而促进了温度测量和控制技术的迅速发展。
虽然水银温度计至今仍是各种温度测量的计量标准。
可是它的缺点是刻度间隔通常都很密,不容易准确分辨,读数因难,而且它们的热容量还比较大,达到热平衡所需的时间较长,因此很难读准,并且使用非常不方便,而且水银有毒,玻璃管易碎。
后来出现代替水银的有酒精温度计和金属簧片温度计,它们虽然没有毒性,但测量精度很低,只能作为一个概略指示。
后来接着出现了热电阻温度计、热电偶温度计等。
随着大规模集成电路工艺的提高,又出现了多种集成的数字化温度传感器。
随着电子工业的发展,数字仪表反应速度快、操作简单,对使用环境要求不高的优点,市场上逐渐出现越来越多的数字式温度计,另外,纵观国际上现有的温度计的变化,总的趋势是从模拟向数字转变,相应的体积也在不断减小,并且一切向着数字化控制,智能化控制方向发展。
1.2、整体设计
单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。
采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比采用电子或数字电路更加强大。
基于单片机的温湿度控制仪的设计,本设计实现的是单片机温湿度测量与控制系统,通过LCD或LED显示所测量的温湿度,是基于单片机对数字信号的高敏感和可控性、温湿度传感器可以产生模拟信号,和A/D模拟数字转换芯片的性能,我设计了以单片机为核心的一套检测系统,其中包括单片机、复位电路、温度检测、湿度检测、与PC机通信、系统软件等部分的设计。
从总体上设计了两种方案来实现温湿度双参数测试设计。
采用将温度和湿度分开测量,其中温度传感器选用DALASS公司的数字温度传感器DS18B20,可以与单片机直接相连。
湿度传感器选用HS1101电容式湿度传感器,湿度的变化可以转化为频率的变化,湿度越高,频率越小,外加一个555定时器便可以将电容的变化转变为频率的变化,产生一定频率的方波,直接与单片机的定时器1相连,便可以测出方波的频率,进而便可以得到湿度值。
由于DS18B20采用单总线方式,在进行多点测量的时候将非常易于扩展,不需要添加任何器件,将所有传感器直接与单片机IO口连接即可。
采用液晶显示器LCD1602显示所测温度和湿度。
第二章、仿真软件介绍
2.1、Proteus简介
Proteus软件是来自英国Labcenterelectronics公司的EDA工具软件,Proteus软件有十多年的历史,在全球广泛使用,除了其具有和其它EDA工具一样的原理布图、PCB自动或人工布线及电路仿真的功能外,其革命性的功能是,他的电路仿真是互动的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等。
Proteus组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。
此系统受益于15年来的持续开发,被《电子世界》在其对PCB设计系统的比较文章中评为最好产品—“TheRoutetoPCBCAD”。
Proteus产品系列也包含了革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。
用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。
其功能模块:
—个易用而又功能强大的ISIS原理布图工具;
PROSPICE混合模型SPICE仿真;
ARESPCB设计。
PROSPICE仿真器的一个扩展PROTEUSVSM:
便于包括所有相关的器件的基于微处理器设计的协同仿真。
此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LEDs甚至LCD显示CPU模型。
第三章、DS18B20的相关介绍
DS18B20测温系统设计
采用将温度和湿度分开测量,其中温度传感器选用DALASS公司的数字温度传感器DS18B20,可以与单片机直接相连。
3.1DS18B20温度传感器
DS18B20工作原理
DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。
DS18B20测温原理中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
DS18B20性能特点
DS18B20的性能特点:
①采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位),②测温范围为-55℃-+125℃,测量分辨率为0.0625℃,③内含64位经过激光修正的只读存储器ROM,④适配各种单片机或系统机,⑤用户可分别设定各路温度的上、下限,⑥内含寄生电源。
DS18B20引脚功能
引脚
功能
GND
电压地
DQ
单数据总线
VDD
电源电压
NC
空引脚
表1:
DS18B20引脚接口说明表
3.1.4
DS18B20内部结构功能图
图1DS18B20内部结构功能图
3.2LCD1602液晶显示器
液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。
在单片机的人机交流界面中,一般的输出方式有以下几种:
发光管、LED数码管、液晶显示器。
发光管和LED数码管比较常用,软硬件都比较简单,本次设计中重点介绍字符型液晶显示器的应用。
LCD1602液晶显示器工作原理
液晶显示原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。
在单片机系统中应用晶液显示器作为输出器件有以下几个优点:
1、显示质量高:
由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。
因此,液晶显示器画质高且不会闪烁。
2、数字式接口:
液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。
3、体积小、重量轻:
液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。
4、功耗低:
相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。
LCD1602主要技术参数:
显示容量:
16×
2个字符
芯片工作电压:
4.5—5.5V
工作电流:
2.0mA(5.0V)
模块最佳工作电压:
5.0V
字符尺寸:
2.95×
4.35(W×
H)mm
LCD1602引脚功能说明
LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表2所示:
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
电源正极
10
D3
3
VL
液晶显示偏压
11
D4
4
RS
数据/命令选择
12
D5
5
R/W
读/写选择
13
D6
6
E
使能信号
14
D7
7
D0
15
BLA
背光源正极
8
D1
16
BLK
背光源负极
表2:
LCD1602引脚接口说明表
3.3DS18B20测温度原理图
DS18B20在AltiumDesigner上测温原理图
图2DS18B20在AltiumDesigner上测温原理图
DS18B20在proteus上测温原理图
图3DS18B20在proteus上测温原理图
3.4、DS18B20特点和温度计设计
采用将温度和湿度分开测量,基于单片机AT89C51的温湿度检测和控制系统,主要以广泛应用的DS18B20数字温度传感器和HS1101湿度传感器作为温度和湿度的检测,该仪器具有测量精度高、硬件电路简单、并能很好的进行显示,可测试不同环境温湿度的特点。
另外和控制电路相连,可以进行加湿电路和除湿电路的控制,使温度和湿度参数在预先设定的范围内,不需要人的直接参与。
由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,经放大电路后,送入A/D转换器进行A/D转换,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。
其基本框图如图3-1所示。
第四章、系统硬件和软件总体设计
4.1、硬件电路设计框图
主程序的主要功能是负责温度的实时显示、检测鸣警信号和按键信号,主程序流程图如下:
图5-1主程序流程图读出温度子程序
读出温度子程序的主要功能是读出RAM中的字节,其程序流程图如图5-2示
图5-2读温度流程图
温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。
温度转换命令子程序流程图如上图,图5-3所示
图5-3温度转换流程图
计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,其程序流程图如图5-4所示
图5-4计算温度流程图
显示数据刷新子程序
显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。
程序流程图如图5-5所示。
图5-5显示数据刷新流程图
第五章、源程序
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P3^7;
//ds18b20与单片机连接口
sbitRS=P2^5;
sbitRW=P2^6;
sbitEN=P2^7;
sbitBEEP=P1^0;
ucharcodestr1[]={"
Temperature:
"
};
uchardatadisdata[5];
uinttvalue;
//温度值
uchartflag;
//温度正负标志
/*************************lcd1602程序**************************/
voiddelay1ms(ucharms)//延时1毫秒(不够精确的)
{
uchari;
ucharj;
for(i=0;
i<
ms;
i++)
for(j=0;
j<
100;
j++);
}
voidbeep1()
{
unsignedchary;
for(y=0;
y<
100;
y++)
delay1ms(10);
BEEP=!
BEEP;
//BEEP取反
}
BEEP=1;
//关闭蜂鸣器
delay1ms
(1);
}
voidwr_com(ucharcom)//写指令//
{
delay1ms
(1);
RS=0;
RW=0;
EN=0;
P0=com;
EN=1;
}
voidwr_dat(uchardat)//写数据//
{
RS=1;
P0=dat;
voidlcd_init()//初始化设置//
delay1ms(15);
wr_com(0x38);
delay1ms(5);
wr_com(0x08);
wr_com(0x01);
wr_com(0x06);
wr_com(0x0c);
voiddisplay(uchar*p)//显示//
while(*p!
='
\0'
)
wr_dat(*p);
p++;
delay1ms
(1);
voidinit_play()//初始化显示
lcd_init();
wr_com(0x80);
display(str1);
voiddelay_18B20(uinti)//延时1微秒
while(i--);
voidds1820rst()/*ds1820复位*/
ucharx=0;
DQ=1;
//DQ复位
delay_18B20(4);
//延时
DQ=0;
//DQ拉低
delay_18B20(100);
//精确延时大于480us
//拉高
delay_18B20(40);
/****************************************************
18b20读数据
*****************************************************/
uchards1820rd()/*读数据*/
uchari=0;
uchardat=0;
for(i=8;
i>
0;
i--)
//给脉冲信号
dat>
>
=1;
if(DQ)
dat|=0x80;
delay_18B20(10);
return(dat);
/**************************************************
18b20写数据
**************************************************/
voidds1820wr(ucharwdata)/*写数据*/
for(i=8;
0;
DQ=0;
DQ=wdata&
0x01;
delay_18B20(10);
DQ=1;
wdata>
/*****************************************************
读温度并转换
uintread_temp()/*读取温度值并转换*/
uchara,b;
ds1820rst();
ds1820wr(0xcc);
//*跳过读序列号*/
ds1820wr(0x44);
//*启动温度转换*/
ds1820wr(0xbe);
//*读取温度*/
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<
<
=8;
tvalue=tvalue|a;
if(tvalue<
0x0fff)
tflag=0;
else
tvalue=~tvalue+1;
tflag=1;
tvalue=tvalue*(0.625);
//温度值扩大10倍,精确到1位小数
return(tvalue);
/*******************************************************************
显示温度
********************************************************************/
voidds1820disp()//温度值显示
ucharflagdat;
disdata[0]=tvalue/1000+0x30;
//百位数
disdata[1]=tvalue%1000/100+0x30;
//十位数
disdata[2]=tvalue%100/10+0x30;
//个位数
disdata[3]=tvalue%10+0x30;
//小数位
if(tfl