课程设计实验报告温度计的设计.docx

上传人:b****7 文档编号:8866165 上传时间:2023-02-02 格式:DOCX 页数:21 大小:1.31MB
下载 相关 举报
课程设计实验报告温度计的设计.docx_第1页
第1页 / 共21页
课程设计实验报告温度计的设计.docx_第2页
第2页 / 共21页
课程设计实验报告温度计的设计.docx_第3页
第3页 / 共21页
课程设计实验报告温度计的设计.docx_第4页
第4页 / 共21页
课程设计实验报告温度计的设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

课程设计实验报告温度计的设计.docx

《课程设计实验报告温度计的设计.docx》由会员分享,可在线阅读,更多相关《课程设计实验报告温度计的设计.docx(21页珍藏版)》请在冰豆网上搜索。

课程设计实验报告温度计的设计.docx

课程设计实验报告温度计的设计

 

课程设计报告

 

课题名称:

基于DS18B20的温度计的设计

******

学号:

**********

班级:

11级通信工程

时间:

2014年6月10日

 

摘要

本实验介绍了一种基于单片机控制的数字温度计,就是用单片机AT89C51实现温度测量和报警,采用DS18B20温度传感器来作为温度监测元件,测温范围是-30度~120度,使用LCD显示模块,能通过按键调整报警的上下限温度。

该电路设计结构简单,可靠性高,功能强大。

关键词:

单片机,温度计,AT89C51,DS18B20,LCD显示

 

Abstract

ThedesignoftheDigitalThermometer,usingAT89C51MCDasthecoretocontrolthetemperaturemeasurementandalarm,usesDS18B20temperaturesensorfortemperaturemonitoringdevice,whichcanmeasuretemperaturesfrom-30to120degrees.ThisstudyusesLCDtoshowthecurrenttemperature.Itcanadjusttheupperandlowertemperatureofthealarmbythethreebuttons.Thiscircuitdesignhassimplestructure,highreliabilityandpowerfulfunctions.

Keywords:

MCD,Thermometer,AT89C51,DS18B20,LCD

 

1.设计目标·················································4

1.1设计要求·······················································4

1.2设计背景·······················································4

2.设计方案

2.1设计思路······················································4

2.2设计框图······················································4

2.3所需器材······················································5

3.硬件设计························································5

3.1主控制器AT89C51··············································5

3.2温度传感器DS18B20·············································5

3.3各部分电路说明···············································7

3.3.1晶振电路··················································7

3.3.2复位电路··················································8

3.3.3蜂鸣器和指示灯电路········································8

3.3.4DS18B20温度采集电路及按键控制电路························8

3.3.5LCD显示电路··············································8

4.电路测试及分析·················································9

4.1实物图························································9

4.2实测结果·······················································9

4.2.1温度显示及报警············································9

4.2.2掉电保存··················································10

5.总结····························································11

附录一、proteus仿真电路图·······································11

附录二、总程序···················································11

 

1.设计目标

1.1设计要求

1、使用DS18B20温度传感器设计温度测量电路,温度范围设置为-30度到150度。

2、能进行温度显示

3、温度报警设定,掉电后数据保存。

4、温度超限报警功能。

1.2设计背景

在一些传统温控系统电路中,广泛采用的是通过热电偶、热电阻或PN结测温电路经过相应的信号调理电路,转换成A/D转换器能接收的模拟量,再经过采样/保持电路进行A/D转换,最终送入单片机及其相应的外围电路,完成监控。

但是由于传统的信号调理电路实现复杂、易受干扰、不易控制且精度不高。

本实验介绍单片机结合DS18B20进行温度控制系统设计,因此,本系统用一种新型的可编程温度传感(DS18B20),不需复杂的信号调理电路和A/D转换电路能直接与单片机完成数据采集和处理,实现方便、精度高,可根据不同需要用于各种场合。

2.设计方案

2.1设计思路

在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。

显示模块采用的是液晶显示屏。

2.2温度计电路设计总体设计方框图如图1所示

 

2.3所需器材

AT89C51芯片一个,DS18B20温度传感器一个,LCD液晶屏一个,22pF电容2个,12M晶振1个,10uF电容1个,触碰式按键4个,220欧电阻3个,1K欧电阻一个,4.7K欧电阻一个,10K欧电阻一个,10K欧滑动变阻器一个,1K欧排阻一个,三极管一个,蜂鸣器一个,LED灯2个。

3.硬件设计

3.1主控制器AT89C51

40个引脚,4kbytesflash片内程序存储器,128bytes的随机存取数据存储器(ram),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。

在闲置模式下,CPU停止工作。

但RAM,定时器,计数器,串口和中断系统仍在工作。

在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。

单片机AT89S51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。

单片机AT89S51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。

3.2温度传感器DS18B20

DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

TO-92封装的DS18B20的引脚排列见下图。

DS18B20的特点如下:

•1、适应电压范围更宽,电压范围:

3.0~5.5V,在寄生电源方式下可由数据线供电。

•2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

•3、DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。

•4、DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。

•5、温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃。

•6、可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。

•7、在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。

•8、测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。

•9、负压特性:

电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。

•10、内部含有E2PROM,其报警上、下限温度值和设定的分辨率倍数在芯片掉电的情况下不丢失。

DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。

高速暂存RAM的结构为8字节的存储器,结构如图3所示。

头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。

第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。

DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。

该字节各位的定义如图3所示。

低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。

温度LSB

温度MSB

TH用户字节1

TL用户字节2

配置寄存器

保留

保留

保留

CRC

 

 

DS18B20的初始化

1.时序图

2.写时序图

 

3.读时序图

3.3各部分电路说明

3.3.1晶振电路

每个单片机系统里都有晶振,全程是叫晶体震荡器。

如右图电路所示,C1、C2为瓷片电容,其大小均为22PF;X1即为晶振,其大小为11.0592MHz,电路中的XTAL1与XTAL2分别与AT89S51的第19脚和第18脚相连。

 

在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。

3.3.2复位电路

单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。

如上图所示电路可实现上电复位与手动复位。

图中的SW为微动按钮,C3为电解电容,其大小为10uF/16V,所用的电阻R为10KΩ。

 

手动按钮复位需要人为在复位输入端RST上加入高电平。

当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。

由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。

3.3.3蜂鸣器和指示灯电路

当温度在安全范围内时,D2灯保持点亮;当超出安全温度时,D1灯点亮,同时,蜂鸣器报警。

3.3.4DS18B20温度采集电路及按键控制电路

电路中采用R2为4.7K的上拉电阻,作用是在电路驱动器关闭时给线路(节点)以一个固定的电平。

三个按键是用来调整温度报警的上下限值。

3.3.5LCD显示电路

本实验中是采用的LCD液晶显示模块。

 

4.电路测试及分析

4.1实物图

实物图如下所示,左边是正面图,右边是反面图。

 

4.2实测结果

4.2.1温度显示及报警

左图中显示的温度下限是26度,当实际温度下降到温度下限以下时,D1等点亮,蜂鸣器报警;右图显示的是温度上限80度,实际温度高于下限温度,D2灯点亮,且蜂鸣器不响。

 

4.2.2掉电保存

下面左图显示的是掉电前温度上限设置为69度,右图是掉电后重启时,温度上限仍为69度,实现了掉电后保存温度上下限。

 

5.总结

经过我们小组成员的共同努力,终于完成了这次关于温度计的设计实验。

虽然还有一点点不足,但总算是完成了任务,总体来说是达到了目标。

通过这次实验,让我加深了对单片机的认识,同时也了解了DS18B20温度传感器的一些工作原理,以及如何写入掉电保存。

当然,在实验过程中也碰到很多困难,其中程序上的就是关于掉电保存的问题,DS18B20内部含有E2PROM,芯片本身可以实现掉电保存,但是必须事先用程序写进去,这一步花了我们好多时间查找资料,最终是完成了。

还有就是电路焊接的时候遇到点小麻烦,有的地方焊得不牢固,导致电路板测试时不稳定。

这次实验让我收获颇多,学到了不少知识,也增加了我对单片机的兴趣。

附录一、仿真电路图

附录二、程序代码

#include

#include

#include

#defineINT8Uunsignedchar

#defineINT16Uunsignedint

sbitSET=P3^7;//定义调整键

sbitDEC=P3^6;//定义减少键

sbitADD=P3^5;//定义增加键

sbitDQ=P3^4;

INT16Uwarn_h1=0x20;

INT16Uwarn_l1=0x14;

INT8UTemp_Disp_Buff[17];

INT8Uset_st=0;

voidXianshi();

voidKEY_Scan();

voidcopyRAMtoEE();

voidhuidiaotoRAM();

externINT8UTemp_Value[];

externINT8UInit_DS18B20();

externvoidLCD_Initialise();

externvoidLCD_ShowString(INT8Ur,INT8Uc,INT8U*str);

externvoiddelay_ms(INT16U);

externvoidDelayX(INT16Ux);

externINT8URead_Temperature();

externvoidWriteOneByte(INT8Udat);

//-----------------------------------------------------------------

//主函数

//----------------------------------------------------------------

sbitbeep=P2^3;

sbitled0=P1^0;

sbitled1=P1^1;

sbitled2=P1^2;

sbitled3=P1^3;

voidwarn(INT16Us,INT8Uled)

{

INT8Ui;i=s;

beep=1;

P1=led;

while(i--)

{

delay_ms

(1);

}

}

voidcopyRAMtoEE()//把RAM中的TH,TL,CONFIGUREREGISTER数据复制到EEPROM中

{

Init_DS18B20();

WriteOneByte(0xcc);

WriteOneByte(0x48);//RAM中数据复制到EEPROM

DelayX(100);//当数据完全复制到EEPROM中时总线会输出1

}

voidwritetoRAM(INT8UCR)//CR-Configureregister

{

Init_DS18B20();

WriteOneByte(0xcc);//跳过写ROM

WriteOneByte(0x4e);//向RAM中写数据

WriteOneByte(warn_h1);

WriteOneByte(warn_l1);

WriteOneByte(CR);

Init_DS18B20();

}

voidhuidiaotoRAM()

{Init_DS18B20();

WriteOneByte(0xcc);//跳过写ROM

WriteOneByte(0xb8);

}

voidKEY_Scan()

{

writetoRAM(0x7f);

if(DEC==0||ADD==0||SET==0)

{

delay_ms(10);

if(SET==0)

{while(SET==0);

{set_st++;

if(set_st==3)

{set_st=0;

}

}

}

elseif

(1)

{

if((DEC==0)&&(set_st==1))

{

delay_ms(10);

if((DEC==0)&&(set_st==1))

{while((DEC==0)&&(set_st==1));

LCD_Initialise();

warn_h1--;

sprintf(Temp_Disp_Buff,"TEM:

%d\xDF\x43",warn_h1);

LCD_ShowString(0,0,Temp_Disp_Buff);

delay_ms(150);

}

}

elseif((DEC==0)&&(set_st==2))

{

delay_ms(10);

if((DEC==0)&&(set_st==2))

{while((DEC==0)&&(set_st==2));

LCD_Initialise();

warn_l1--;

sprintf(Temp_Disp_Buff,"TEM:

%d\xDF\x43",warn_l1);

LCD_ShowString(0,0,Temp_Disp_Buff);

delay_ms(150);

}

}

elseif((ADD==0)&&(set_st==1))

{

delay_ms(10);

if((ADD==0)&&(set_st==1))

{while((ADD==0)&&(set_st==1));

LCD_Initialise();

warn_h1++;

sprintf(Temp_Disp_Buff,"TEM:

%d\xDF\x43",warn_h1);

LCD_ShowString(0,0,Temp_Disp_Buff);

delay_ms(150);

}

}

elseif((ADD==0)&&(set_st==2))

{

delay_ms(10);

if((ADD==0)&&(set_st==2))

{while((ADD==0)&&(set_st==2));

LCD_Initialise();

warn_l1++;

sprintf(Temp_Disp_Buff,"TEM:

%d\xDF\x43",warn_l1);

LCD_ShowString(0,0,Temp_Disp_Buff);

delay_ms(150);

}

}

else

{

voidXianshi();

}

}

}

}

voiddeal(floatt)

{

if((t>=warn_h1)||(t<=warn_l1))

{

warn(40,0xFE);

}

elseif((twarn_l1))

{

beep=0;

P1=0xFD;

}

}

voidmain()

{

floattemp=0.0;//浮点温度变量

Read_Temperature();

warn_h1=Temp_Value[2];

warn_l1=Temp_Value[3];

writetoRAM(0x7f);

LCD_Initialise();//液晶初始化

LCD_ShowString(0,0,"DS18B20Test");//显示标题

LCD_ShowString(1,0,"Waiting.....");//显示等待信息

sprintf(Temp_Disp_Buff,"TEM:

%d\xDF\x43",warn_l1);

LCD_ShowString(0,0,Temp_Disp_Buff);

delay_ms(1500);

sprintf(Temp_Disp_Buff,"TEM:

%d\xDF\x43",warn_h1);

LCD_ShowString(0,0,Temp_Disp_Buff);

delay_ms(150);

copyRAMtoEE();

Read_Temperature();//预读取温度

delay_ms(1500);//长延时

while

(1)//循环读取温度并显示

{

KEY_Scan();

writetoRAM(0x7f);

copyRAMtoEE();

Xianshi();

}

}

voidXianshi()

{floattemp=0.0;

floatt=0.0;

if(Read_Temperature())

{

temp=(int)(Temp_Value[1]<<8|Temp_Value[0])*0.0625;

if(temp>-31)

{

if(temp<151)

{

deal(temp);

sprintf(Temp_Disp_Buff,"TEMP:

%5.1f\xDF\x43",te

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 制度规范

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1