基于单片机的数字温度计设计.docx
《基于单片机的数字温度计设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字温度计设计.docx(30页珍藏版)》请在冰豆网上搜索。
![基于单片机的数字温度计设计.docx](https://file1.bdocx.com/fileroot1/2023-2/8/e198d011-15af-4743-9a66-54def626bbf2/e198d011-15af-4743-9a66-54def626bbf21.gif)
基于单片机的数字温度计设计
基于单片机的数字温度计设计
作者姓名:
龙博
专业名称:
电子测量技术与仪器
指导老师:
闫智武讲师
摘要
随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。
温度传感器是当前温度检测的主要器件,本毕业设计的主要出发点是设计出测量温度检测的温度连续监测的仪器。
本系统采用数字式温度计传感器DS18B20为检测器件,进行单点温度检测(或温度采集),要求温度显示采用4位共阴极LED数码管显示,处理好延时,温度转换等。
具有超过上、下限温度时,进行声音(蜂鸣器)报警。
本设计的思路主要分为两部分,一是对系统硬件部分的设计,包括温度采集电路和显示电路;二是对系统软件部分的设计,对温度的采集与实现进行编程,通过DS18B20直接读取被测温度值,送入单片机进行数据处理,之后进行输出显示,最终完成了数字温度计的总体设计。
其系统构成简单,信号采集效果好,数据处理速度快,便于实际检测使用。
【关键词】:
单片机数字式温度计DS18B20温度采集
Abstract
AlongwiththeprogressofTheTimesanddevelopment,microcontrollertechnologyhasspreadtoourlife,work,scientificresearch,eachdomain,hasbecomeamorematuretechnology.Thisarticleintroducesakindofdigitalthermometerbasedonsingle-chipmicrocomputercontrol,thethermometerbelongstomultifunctionalthermometer,youcansetthealarmtemperature,whenthetemperatureisbeyondthescopeofsetting,youcancallthepolice.
Temperaturesensoristhemaindeviceoftemperaturedetection,themainpointofthisgraduationdesignistodesignameasuringinstrumentforcontinuoustemperaturedetectionofthetemperaturemonitoring.
ThissystemUSESthedigitalsensorDS18B20thermometerdevicefordetection,detectionofsinglepointtemperature(ortemperature),therequesttemperaturedisplayusingfourcommoncathodeLEDdigitaltubedisplay,dealwithtimedelay,atemperatureconversion,etc.Hasmorethanupperandlowerlimittemperature,voicealarm(buzzer).
Thedesigntrainofthoughtismainlydividedintotwoparts,onepartisonthesystemhardwaredesign,includingtemperatureacquisitioncircuitanddisplaycircuit;2itistothedesignofsystemsoftwarepart,acquisitionandimplementationoftemperatureprogramming,throughDS18B20measuredtemperaturevalue,directlyreadintosingle-chipmicrocomputerfordataprocessing,aftertheoutputshowsthateventuallycompletedtheoveralldesignofdigitalthermometer.Itssystemstructureissimple,signalacquisitioneffectisgood,thedataprocessingspeedisfast,easytoactualuse.
【Keywords】:
singlechipmicrocomputerdigitalthermometer
DS18B20temperatureacquisition
前言
日常生产生活中,经常要用到测温装置,温度的检测与控制是工业生产过程中最典型的应用。
温度测量在物理实验、医疗卫生、食品生产等领域,尤其在热学试验(如:
物体的比热容、汽化热、热功当量、压强温度系数等教学实验)中,有特别重要的意义。
现在所使用的温度计通常都是精度为1℃和0.1℃的水银、煤油或酒精温度计。
这些温度计的刻度间隔通常都很密,不容易准确分辨,读数困难,而且他们的热容量还比较大,达到热平衡所需的时间较长,因此很难读准,并且使用非常不方便。
传统的数字式测温设备制作成本偏高,且硬件电路与软件设计复杂。
本次基于单片机的数字式温度计设计很大程度上改善了传统数字式温度计的缺点。
该温度计具有读数方便,测温范围广,测温准确,输出温度采用数字显示等特点。
可用于对测温比较准确的场所,如科研实验室、生产孵化车间等使用。
因此本次毕业论文设计就尝试通过编程与芯片的结合来解决传统数字温度计的弊端,设计出新型数字温度计。
在经过对硬件设计器材的选取上,我经过老师的细心指导和对资料的参考,最终选取了AT89C51单片机、测温传感器DS18B20,4位共阴极LED数码管等器件。
本文采用将硬件与软件相结合的方法,通过模块化编程,利用可通信串口实现对数据的交换处理,经过PROTEUS虚拟仿真,进行论证。
1数字式温度计的概述
1.1数字式温度计的设计目的与要求
要想基于AT89C51系列单片机的应用与开发,就要了解单片机的构造及原理,熟悉单片机最小系统及其应用。
同时巩固和加强“单片机接口技术”课程的理论知识,掌握单片机系统一般的设计方法,并了解电子产品研制开发过程。
在设计完成过程中,学会培养独立分析问题和解决问题的能力以及创新能力和创新思维。
不断提高自身分析问题和解决问题的能力以及创新能力和创新思维。
作为此次毕业设计的最终成果,本文对数字式温度计的设计要求如下:
1、数字式温度计的基本范围在-50℃-110℃之间;
2、数字式温度计的精度误差小于0.5℃;
3、数字式温度计要用LED数码管直读显示;
4、同时要具有支持扩展的相关功能;
5、要具有任意设定数字式温度计温度上下限功能;
6、超过温度计上下限,要具有报警功能。
1.2数字式温度计设计思路
本次设计将以AT89C51单片机作为核心器件,组成一个具有多种拓展功能的数字式温度计。
此次设计采用模块化编程方法,将各个功能细化,逐个完成,最终实现整个温度计功能。
在最初的设计方案中,有两种方式可供选择:
一种是可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路。
另外一种则是考虑到用温度传感器。
采用一只温度传感器DS18B20,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
以上两种方案第二种更为简单明了,避免了AD转换电路的复杂应用。
因此本次设计采用了第二种方案。
1.3数字式温度计设计原理框图
图1.1数字式温度计设计原理框图
1.4数字式温度计工作过程简要分析
当系统启动后,各模块电路开始工作,温度传感器随机提供一个温度值,生成的温度信号脉冲经过AT89C51单片机处理显示在LED数码显示管上。
此时可以通过手动设置整个系统的上限温度、下限温度,也可以调整实时温度。
当上限温度、下限温度以及实时温度调整完毕后,经过AT89C51的处理,当此时的实时温度达到或者超过上限与下限温度值时,报警模块启动对当前整个系统温度进行报警。
若要重新整个过程,可以通过复位键进行系统复位,重新开始测定当前整个系统的温度。
2数字式温度计的硬件电路
2.1数字式温度计的系统电路
图2.1数字式温度计主板电路图
图2.1中蜂鸣器可以在被测温度不在上下限范围内时,发出报警鸣叫声音,同时LED数码管将没有被测温度值显示,这时可以调整报警上下限,从而测出被测的温度值。
按健复位电路是上电复位加手动复位,使用比较方便,在程序跑飞时,可以手动复位,这样就不用在重起单片机电源,就可以实现复位。
2.2AT89C51单片机
AT89C51单片机是一个集成电路芯片,它是由微处理器CPU、数据存储器(RAM)、程序存储器(ROM)、并行I/O口(4个8位I/O口)、串行口、定时器/计数器、中断系统及特殊功能寄存器。
图2.2AT89C51单片机
这些都是通过片内单一总线连接而成。
其基本结构依旧是微处理器CPU,加上外围芯片的传统结构模式。
但对各种功能部件的控制是采用特殊功能寄存器的集中控制方式以实现不同的功能。
2.3数字式温度计数码显示电路
本次设计采用的显示电路是4位共阴极LED数码管,从P0口输出段码。
显示电路是使用的动态显示,这种显示最大的优点就是使用资源比较少,功耗低,但显示清晰度不如静态显示。
图2.3数字式温度计数码显示电路
2.4数字式温度计传感器DS18B20
DS18B20是美国DALLAS公司生产的单总线数字温度传感器,它具有微型化、功耗低、高性能、抗干扰能力强、易于与微处理器方便接口等优点。
图2.3DS18B20数字温度传感器
该器件将半导体温敏器件、A/D转换器、存储器等做在一个很小的集成电路芯片上。
传感器直接输出温度信号数字值。
信号的传输采用两芯或者三芯电缆构成的单总线结构。
一条单总线上可以挂接若干个数字温度传感器,每个传感器有唯一一个唯一的地址编码。
微控制器通过对器件的寻址,就可以读取某一个传感器的温度值,从而简化了信号采集系统的电路结构。
其内部结构框图如图2.4所示:
图2.4DS18B20内部结构图
64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。
温度报警触发器TH和TL,可通过软件写入户报警上下限。
下表表示温度和数字量的关系:
表2-1温度与数字量的关系
温度/℃
二进制表示
十六进制表示
+125
0000011111010000
07D0H
+85
0000010101010000
0550H
+25.0625
0000000110010000
0191H
+10.125
0000000010100001
00A2H
+0.5
0000000000000010
0008H
0
0000000000001000
0000H
-0.5
1111111111110000
FFF8H
-10.125
1111111101011110
FF5EH
-25.0625
1111111001101111
FE6FH
-55
1111110010010000
FC90H
DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。
因此,在实际应用中要将分辨率和转换时间权衡考虑。
高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。
第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。
当DS18B20接收到温度转换命令后,开始启动转换。
转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。
单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。
2.5时钟振荡电路与复位电路设计
本次基于单片机数字式温度计的设计中,我采用了12M的晶振设计,这样有利于提高整个系统的性能。
AT89C51的内部有反向放大器,在经过相应针脚的接入后,与反馈元件结合组成振荡器,所产生的时钟脉冲传递到各个部件,从而构成了内部振荡。
电平复位是通过RST端经电阻和电源VCC接通而实现,本论文中通过手动按钮复位实现整个系统的复位功能。
图2.5数字式温度计时钟振荡电路与复位电路设计
2.6温度调整电路与报警电路的设计
通过对AT89C51单片机P3口的拓展,接入按钮进行脉冲调整实现对温度的加减控制。
P3.7口接入扬声器接收AT89C51的脉冲信号,通过蜂鸣声警示现系统实时温度的预警,黄色LED同时亮起起到警示作用。
图2.6数字式温度计温度调整电路与报警电路设计
3数字式温度计软件程序设计
3.1数字式温度计的程序划分
本文的数字式温度计程序主要包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序,显示数据刷新子、报警子程序、延时子程序等。
3.2数字式温度计的主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。
这样可以实时刷新当前温度,更好的实现对温度的监控。
图3.1数字式温度计主程序流程框图
程序:
voidmain(void)
{
uinti,z;
InitTimer();//初始化定时器
EA=1;//全局中断开关
TR0=1;
ET0=1;//开启定时器0
IT0=1;
IT1=1;
//check_wendu();
for(z=0;z<200;z++)
{
Disp_init();
}
while
(1)
{
if(SET==0)
{
Delay_DS18B20(2000);
do{}while(SET==0);
set_st++;x=0;shanshuo_st=1;
if(set_st>2)set_st=0;
}
if(set_st==0)
{
EX0=0;//关闭外部中断0
EX1=0;//关闭外部中断1
//check_wendu();
i=ReadTemperature();
Disp_Temperature(i);
Alarm();//报警检测
}
elseif(set_st==1)
{
BEEP=1;//关闭蜂鸣器
EX0=1;//开启外部中断0
EX1=1;//开启外部中断1
if(x>=10){shanshuo_st=~shanshuo_st;x=0;}
if(shanshuo_st){Disp_alarm(shangxian);}
}
elseif(set_st==2)
{
BEEP=1;//关闭蜂鸣器
EX0=1;//开启外部中断0
EX1=1;//开启外部中断1
if(x>=10){shanshuo_st=~shanshuo_st;x=0;}
if(shanshuo_st){Disp_alarm(xiaxian);}
}
}
}
3.2数字式温度计的读出温度子程序
出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。
其程序流程图如图3.2所示:
图3.2数字式温度计读出温度子程序流程框图
程序:
unsignedintReadTemperature(void)
{
unsignedchara=0;
unsignedcharb=0;
unsignedintt=0;
floattt=0;
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0x44);//启动温度转换
Init_DS18B20();
Delay_DS18B20(100);
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0xBE);//读取温度寄存器
a=ReadOneChar();//读低8位
b=ReadOneChar();//读高8位
t=b;
t<<=8;
t=t|a;
return(t);
}
3.3数字式温度计的温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。
温度转换命令子程序流程图如图3.3所示:
图3.3数字式温度计温度转换命令子程序流程框图
程序:
1.初始化DS18B20
voidInit_DS18B20(void)
{
unsignedcharx=0;
DQ=1;//DQ复位
Delay_DS18B20(8);//稍做延时
DQ=0;//单片机将DQ拉低
Delay_DS18B20(80);//精确延时,大于480us
DQ=1;//拉高总线
Delay_DS18B20(14);
x=DQ;//稍做延时后,如果x=0则初始化成功,x=1则初始化失败
Delay_DS18B20(20);
}
2.向DS18B20写一个字节
voidWriteOneChar(unsignedchardat)
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
Delay_DS18B20(5);
DQ=1;
dat>>=1;
}
}
3.从DS18B20读一个字节
unsignedcharReadOneChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)
dat|=0x80;
Delay_DS18B20(4);
}
return(dat);
}
3.4数字式温度计的计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图3.4所示:
图3.4数字式温度计计算温度子程序流程框图
程序:
Disp_Temperature(uintk)
{
uchari,tmph,tmpl,sign;
k=ReadTemperature();
sign=(uchar)((k>>8)&0xf0);
if(sign==0xf0)
{
k=(~k)+1;
Sign_Port=0;
fu=1;
}
else{Sign_Port=1,fu=0;}
tmpl=(uchar)(k&0x0f);
tmph=(uchar)((k>>4)&0xff);
tmpl=tmpl*0.625+0.5;
tmpbuf[3]=tmpl/10;
tmpbuf[2]=tmph%10;
tmpbuf[1]=(tmph%100)/10;
tmpbuf[0]=tmph/100;
if(fu==1)
{if(tmpbuf[1]==0)
{tmpbuf[1]=11,tmpbuf[0]=10;}
else
tmpbuf[0]=11;
}
else
{if(tmpbuf[0]==0)
{
tmpbuf[0]=10;
if(tmpbuf[1]==0)
tmpbuf[1]=10;
}
}
for(i=0;i<40;i++)
{
Display();
}
}
3.5数字式温度计的显示数据刷新子程序
显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。
程序框图如图3.5所示:
图3.5数字式温度计显示数据刷新子程序流程框图
程序:
voidDisplay(void)
{
uchari,j,temp=0xf7;
for(i=0;i<4;i++)
{
Cs_Port=0xff;
j=tmpbuf[i];
if(temp==0xfd)
Dat_Port=(table[j]|0x80);
else
Dat_Port=table[j];
Cs_Port=temp;
Delay_DS18B20(50);
Cs_Port=0xfe;
temp=temp>>1;
temp=temp|0x80;
}
}
3.6数字式温度计的报警子程序
图3.6数字式温度计报警子程序流程框图
程序:
1.显示报警温度子程序
Disp_alarm(ucharbaojing)
{
P2=0xFF;
P0=table[baojing%10];//显示个位
P2=0xfe;
Delay_DS18B20(500);
P2=0xFF;
P0=table[baojing%100/10];//显示十位
P2=0xfd;
Delay_DS18B20(500);
P2=0xFF;
P0=table[baojing/100];//显示百位
P2=0xfb;
Delay_DS18B20(500);
P2=0xFF;
if(set_st==1){P0=0x76;}
elseif(set_st==2)P0=0x38;//上限H下限L标志
P2=0xf7;
Delay_DS18B20(500);
P2=0xFF;
}
2.报警子程序
Alarm()
{
//if(x>=5){beep_st=~beep_st;x=0;}
m=ReadTemperature(