基于单片机的环境温度测量系统设计.docx
《基于单片机的环境温度测量系统设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的环境温度测量系统设计.docx(18页珍藏版)》请在冰豆网上搜索。
基于单片机的环境温度测量系统设计
基于单片机的环境温度测量系统设计
一、绪论
1.1简介
随着国民经济的进展,人们需要对各中加热炉、热处置炉、反映炉和锅炉中温度进行监测和控制。
采用单片机来对他们控制不仅具有控制方便,简单和灵活性大等长处,而且能够大幅度提高被控温度的技术指标,从而能够大大的提高产品的质量和数量。
在日常生活及工业生产进程中,常常要用到温度的检测及控制,温度是生产进程和科学实验中普遍而且重要的物理参数之一。
在生产进程中,为了高效地进行生产,必需对它的主要参数,如温度、压力、流量等进行有效的控制。
温度控制在生产进程中占有相当大的比例。
温度测量是温度控制的基础,技术已经比较成熟。
传统的测温元件有热电偶和二电阻。
而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,这些方式相对比较复杂,需要比较多的外部硬件支持。
咱们用一种相对比较简单的方式来测量。
咱们采用美国DALLAS半导体公司继DS18B20以后推出的一种改良型智能温度传感器DS18B20作为检测元件,温度范围为-55~125ºC,最高分辨率可达0.0625ºC。
DS18B20能够直接读出北侧温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低本钱和易利用的特点。
1.2 设计的市场现状分析
纵观市场,温湿度检测技术已经比较成熟,已有的各类温湿度检测产品,五花八门,犹如八仙过海,各显神通,如A2000家用温湿度报警表、YD-808A工业用温湿度显示器等产品。
从功能上分析这些产品能够看出,一个比较完整的环境温湿度检测系统应该具有以下主要的四个功能:
(1)实时检测出环境中的温度和湿度参数;
(2)检测的参数值显示在显示设备上(如数码管,液晶显示器等);
(3)按照环境要求,设定温度湿度报警的上下限值,并实时报警;
(4)与上层监控设备通信(如PC),实现数据传输(双向或单向);
因此,本设计也应该具有这些功能,而且对每一个部份进行优化设计,也能够扩展系统功能。
二、系统设计
2.1设计要求
利用单片机AT89C51作为控制器,和用改良型智能温度传感器DS18B20作为温度收集器,设计了一款数字温度计,能够显示环境的温度和测量人体的体温。
2.2设计思想
采用数字温度芯片DS18B20测量温度,输出信号全数字化。
便于单片机处置及控制,省去传统的测温方式的很多外围电路。
且该芯片的物理化学性很稳固,它能用做工业测温元件,此元件线形较好。
在0—100摄氏度时,最大线形误差小于1摄氏度。
DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89S51组成的温度测量装置,它直接输出温度的数字信号,可直接与运算机连接。
如此,测温系统的结构就比较简单,体积也不大。
采用51单片机控制,软件编程的自由度大,可通过编程实现各类各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。
既能够单独对多DS18B20控制工作,还能够与PC机通信上传数据,另外AT89S51在工业控制上也有着普遍的应用,编程技术及外围功能电路的配合利用都很成熟。
该系统利用AT89S51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并能够按照需要设定上下限报警温度。
该系统扩展性超级强,它能够在设计中加入时钟芯片DS1302以获取时刻数据,在数据处置同时显示时刻,并能够利用AT24C16芯片作为存储器件,以此来对某些时刻点的温度数据进行存储,利用键盘来进行调时和温度查询,取得的数据能够通过MAX232芯片与运算机的RS232接口进行串口通信,方便的收集和整理时刻温度数据。
2.3系统设计原理
利用温度传感器DS18B20能够直接读取被测温度值,进行转换的特性,模拟温度值通过DS18B20处置后转换为数字值,然后送到单片机中进行数据处置,并与设置的温度报警限比较,超过限度后通过扬声器报警。
同时处置后的数据送到LED中显示。
2.4系统组成
系统框图主要由主控制器、单片机复位、报警按键设置、时钟振荡、LED显示、温度传感器组成。
系统框图如图所示:
1.主控制器
单片机AT89C51具有低电压供电和体积小等特点,四个端口只需要两个口就可以知足电路系统的设计需要,很适合便携手持式产品的设计利用系统可用二节电池供电。
2.显示电路
显示电路采用LED液晶显示数码管,从P3口RXD,TXD串口输出段码。
显示电路是利用的串口显示,这种显示最大的长处就是利用口资源比较少,只用p3口的RXD,和TXD,串口的发送和接收,四只数码管采用74LS164右移寄放器驱动,显示比较清楚。
3.温度传感器
温度传感器采用美国DALLAS半导体公司生产的DS18B20温度传感器。
DS18B20输出信号全数字化。
便于单片机处置及控制,在0—100摄氏度时,最大线形误差小于1摄氏度,采用单总线的数据传输,可直接与运算机连接。
用AT89S51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并能够按照需要设定上下限报警温度。
取得的数据能够通过MAX232芯片与运算机的RS232接口进行串口通信,方便的收集和整理时刻温度数据。
2.5DS18B20温度传感器与单片机的接口电路
DS18B20能够采用两种方式供电,一种是采用电源供电方式,现在DS18B20的1脚接地,2脚作为信号线,3脚接电源。
另一种是寄生电源供电方式,如图3-3所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。
【2】
当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必需有强的上拉,上拉开启时刻最大为10us。
采用寄生电源供电方式时VDD端接地。
由于单线制只有一根线,因此发送接口必需是三态的。
三、系统硬件设计
3.180C51单片机
80C51有40个引脚,4个8位并行I/O口,1个全双工异步串行口,同时内含5个中断源,2个优先级,2个16位按时/计数器。
80C51的存储器系统由4K的程序存储器(掩膜ROM),和128B的数据存储器(RAM)组成。
80C51单片机的大体组成框图见图:
80C51单片机的中断系统
80C51系列单片机的中断系统有5个中断源,2个优先级,能够实现二级中断服务嵌套。
由片内特殊功能寄放器中的中断允许寄放器IE控制CPU是不是响应中断请求;由中断优先级寄放器IP安排各中断源的优先级;同一优先级内各中断同时提出中断请求时,由内部的查询逻辑肯定其响应顺序。
80C51单片机的按时/计数器
在单片机应用系统中,常常会有按时控制需求,如按时输出、按时检测、按时扫描等;也常常要对外部事件进行计数。
80C51单片机内集成有两个可编程的按时/计数器:
T0和T1,它们既能够工作于按时模式,也能够工作于外部事件计数模式,另外,T1还能够作为串行口的波特率发生器。
3.2LCD液晶显示器
LM016L液晶模块采用HD44780控制器,hd44780具有简单而功能较强的指令集,能够实现字符移动,闪烁等功能,LM016L与单片机MCU通信可采用8位或4位并行传输两种方式,hd44780控制器由两个8位寄放器,指令寄放器(IR)和数据寄放器(DR)忙标志(BF),显示数RAM(DDRAM),字符发生器ROMA(CGOROM)字符发生器RAM(CGRAM),地址计数器RAM(AC)。
IR用于寄放指令码,只能写入不能读出,DR用于寄放数据,数据由内部操作自动写入DDRAM和CGRAM,或暂存从DDRAM和CGRAM读出的数据,BF为1时,液晶模块处于内部模式,不响应外部操作指令和同意数据,DDTAM用来存储显示的字符,能存储80个字符码,CGROM由8位字符码生成5*7点阵字符160中和5*10点阵字符32种.8位字符编码和字符的对应关系,能够查看参考文献(30)中的表4.CGRAM是为用户编写特殊字符留用的,它的容量仅64字节,可以自定义8个5*7点阵字符或者4个5*10点阵字符,AC可以存储DDRAM和CGRAM的地址,如果地址码随指令写入IR,则IR自动把地址码装入AC,同时选择DDRAM或CGRAM但愿,LM016L液晶模块的引脚图如图所示:
液晶显示部份与89C51的接口
用89C51的P2口作为数据线,用P3.二、P3.一、P3.0别离作为LCD的E、R/W、RS。
其中E是下降沿触发的片选信号,R/W是读写信号,RS是寄放器选择信号本模块设计要点如下:
显示模块初始化:
第一清屏,再设置接口数据位为8位,显示行数为1行,字型为5×7点阵,然后设置为整体显示,取消光标和字体闪烁,最后设置为正向增量方式且不移位。
向LCD的显示缓冲区中送字符,程序中采用2个字符数组,一个显示字符,另一个显示电压数据,要显示的字符或数据被送到相应的数组中,完成后再统一显示.第一取一个要显示的字符或数据送到LCD的显示缓冲区,程序延时2.5ms,判断是不是够显示的个数,不够则地址加一取下一个要显示的字符或数据。
3.3通信模块
80C51内部已集成通信接口URT,只需扩展一片MAX232芯片将输出信号转换成RS-232协议规定的电平标准, MAX232是一种双组驱动器/接收器,每一个接收器将EIA/TIA-232-E电平输入转换为5V TTL/CMOS电平。
每一个驱动器将TTL/CMOS输入电平转换为EIA/TIA-232-E电平。
即EIA接口,就是把5V转换为-8V到-15V电位0V转换为8V到15V再经RXD输出,接收时由RXD输入,把-8V到-15V电位转换为5V,8V到15V转换为0V。
MAX232的工作电压只需5V,内部有振荡电路产生正负9V电位。
MAX232引脚图如图所示:
四、系统软件设计
4.1主程序设计
整个系统的功能是由硬件电路配合软件来实现的,当硬件大体定型后,软件的功能也就大体定下来了。
从软件的功能不同可分为两大类:
一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。
二是执行软件(子程序),它是用来完成各类实质性的功能如测量、计算、显示、通信等。
每一个执行软件也就是一个小的功能执行模块。
这里将各执行模块一一列出,并为每一个执行模块进行功能概念和接口概念。
各执行模块计划好后,就可以够计划监控程序了。
第一要按照系统的整体功能选择一种最适合的监控程序结构,然后按如实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。
4.2DS18B20初始化
18B20初始化流程图见图:
4.3数据测试
将温度传感器与冰水混合物接触,通过充分搅拌达到热平衡后调节系统,使显示读数为0.00(标定0℃);利用气压计读出那时本地的大气压强,并按照大气压强和本地重力加速度计算出那时的实际压强;按照沸点与压强的关系查出沸点温度。
把温度传感器放入滚水中,待显示读数稳固后从头调节,使显示器显示读数等于本地那时沸点温度后工作结束。
该温度计的量程为0℃~100℃,读数精度为0.1℃,实际利用一般在0℃~100℃。
采用0℃~50℃和50℃~100℃的精密水银温度计作查验标准,对设计的温度计进行测试,其结果表明能达到该精度要求。
五、仿真结果
设置温度上限为37度,温度下限为10度。
1.如图所示,现在温度时43度,超出上限温度,黄灯亮,实现报警。
2.如图所示,现在温度为5度,低于下限温度,绿灯亮,实现报警。
3.如图所示,现在温度为20度,在所设范围内,两灯都没亮,说明温度正常。
六、总结
本文介绍了基于80C51单片机的数字温度计控制系统的设计,对整个硬件电路和软件程序设计做了分析,学习了数字温度传感器DS18B20,设计软件仿真,更直观的反映设计的正确性。
并对其中的一些大体原理也做了简要的概述。
其实本篇论文,仅仅是对数字温度计控制系统做出了一个简单的设计方案,数字温度计科利用在很多领域,在一些人不能直接进入的场所,利用单片机控制的数字温度计,能够设置并控制其中的温度,数字温度计还能够利用在温室中,如此就可以够方便的控制温室中的温度,当温度超过所要求的温度时,可发生报警。
总之数字温度计利用在很多领域。
本课题只是单片机控制数字温度计系统得一种设计方式。
附录:
系统程序清单
#include
#defineucharunsignedchar
#defineuintunsignedint
uchari;
sbitlcdrs=P3^0;
sbitlcdrw=P3^1;
sbitlcden=P3^2;
sbitd1=P1^0;
sbitd2=P1^1;
ucharcodet0[]="thetemperature";
ucharcodet1[]="is";
ucharcodewendu[]="0123456789";//利用一个温度表解决温度显示乱码
sbitDQ=P3^7;//概念ds18B20总线IO
//液晶显示模块
voiddelay(uintz)
{
uintx,y;
for(x=100;x>1;x--)
for(y=z;y>1;y--);
}
voidwrite_com(ucharcom)
{
lcdrs=0;
P2=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_date(uchardate)
{
lcdrs=1;
P2=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidinit_lcd()
{
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x01);
write_com(0x0c);
write_com(0x06);
write_com(0x80);
for(i=0;i<16;i++)
{
write_date(t0[i]);
delay(0);
}
write_com(0x80+0x40);
for(i=0;i<16;i++)
{
write_date(t1[i]);
delay(0);
}
}
//温度收集模块
voidtmpDelay(intnum)//延时函数
{
while(num--);
}
/******************************************************************************/
voidInit_DS18B20()//初始化ds1820
{
unsignedcharx=0;
DQ=1;//DQ复位
tmpDelay(8);//稍做延时
DQ=0;//单片机将DQ拉低
tmpDelay(80);//精准延时大于480us
DQ=1;//拉高总线
tmpDelay(14);
x=DQ;//稍做延时后若是x=0则初始化成功x=1则初始化失败
tmpDelay(20);
}
unsignedcharReadOneChar()//读一个字节
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)
dat|=0x80;
tmpDelay(4);
}
return(dat);
}
voidWriteOneChar(unsignedchardat)//写一个字节
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
tmpDelay(5);
DQ=1;
dat>>=1;
}
}
unsignedintReadtemp()//读取温度
{
unsignedchara=0;
unsignedcharb=0;
unsignedintt=0;
floattt=0;
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0x44);//启动温度转换
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0xBE);//读取温度寄放器
a=ReadOneChar();//持续读两个字节数据//读低8位
b=ReadOneChar();//读高8位
t=b;
t<<=8;
t=t|a;//两字节合成一个整型变量。
tt=t*0.0625;//取得真实十进制温度值,因为DS18B20能够精准到0.0625度,所以读回数据的最低位代表的是0.0625度
t=tt*10+0.5;//放大十倍,如此做的目的将小数点后第一名也转换为可显示数字,同时进行一个四舍五入操作。
return(t);
}
voiddisplay()
{
unsignedintnum,num1;//概念的时候用uchar宏概念就会犯错
unsignedintshi,ge,xiaoshu;//这里的num,shi,ge,xiaoshu必须用unsignedint无符号整数来表示,用unshignedchar字符型则显示错误
num=Readtemp();
num1=num/10;
if(num1>37)
{d1=0;d2=1;delay(500);}
if(num1<10)
{d1=1;d2=0;delay(500);}
else
{d1=1;d2=1;}
shi=num/100;
ge=num/10%10;
xiaoshu=num%10;
write_com(0x80+0x40+5);
write_date(wendu[shi]);
write_com(0x80+0x40+6);
write_date(wendu[ge]);
write_com(0x80+0x40+7);
write_date(0x2e);
write_com(0x80+0x40+8);
write_date(wendu[xiaoshu]);
}
voidmain()
{
init_lcd();
while
(1)
{
display();
delay(10);
}
}