基于单片机的多路温度测控系统设计毕业论文.doc
基于单片机的多路温度测控系统设计 摘要 随着社会的发展,温度的测量及控制变得越来越重要,温度是生产过程和科学实验中普遍而且重要的物理参数。本文利用单片机结合传感器技术而开发设计了这一多路温度监控系统。本文详细地讲述了基于AT89S52单片机和温度传感器DS18B20的温度监控系统的设计方案与软硬件实现方案。温度采集采用数字温度传感器DS18B20采集环境温度,采集到的温度通过LCD1602液晶显示器显示温度数据,数据显示精度达到0.1°,通过按键可以1的步进改变温度设定值,设置温度的上下限。当温度低于设定的下限温度或者高于设定的上限温度时蜂鸣器发声和LED发光报警。本文设计出了系统总体框架,电路图及程序,经过调试并在硬件平台上实现了所设计的功能。关键词 单片机 多路温度测量 温度控制 DS18B20温度传感器temperature detecting system design Based on MCU Abstract With the societys development, control and measuring temperature is becoming more and more important as temperature is an general and signal physical parameter. This article exploits and designs a temperature monitoring system through the technology of combined with sensor. It describes the design & achieving scheme of temperature monitoring system basing on AT89S52 and temperature sensor DS18B20. device takes use of digital temperature sensor DS18B20. The main from shows the figure through LCD1602, and change the set value of temperature by 1 via key to set the bound. When the actual temperature value is lower than the lower limit or higher than the upper limit, buzzer sounds with LED flashes. The essay gives a general fame work of the system, circuit diagram and procedure, and after debugging it achieves all designed functions on hardware platform.朗读显示对应的拉丁字符的拼音 字典Keywords MCU, temperature monitoring system, temperature detection,temperature sensorDS18B20, 目录1 引言52 概述621 课题背景与研究意义622 系统设计要求723 系统设计方案72.3.1 系统设计方案论证72.3.2 系统设计方案硬件实现框图83系统硬件电路设计931 系统元器件选型及参数介绍93.1.1 系统单片机选型93.1.2 系统温度传感器选型与介绍103.1.3 系统显示器的选型与介绍1232 系统硬件电路分析133.2.1 系统单片机主控电路分析133.2.2 系统温度采集部分电路分析153.2.3 系统显示部分电路分析153.2.4 系统报警提示部分电路分析1633 系统硬件电路绘制与PCB线路板制作183.3.1 Protel99SE软件介绍183.3.2 系统原理图绘制与印刷线路板制作184系统软件设计分析2141 系统软件编程环境介绍2142 系统软件实现功能要求2143 系统主程序流程图2244 系统温度采集的实现234.4.1 DS18B20初始化时序234.4.2 DS18B20写时序244.4.3 DS18B20读时序2445 系统液晶显示部分的实现255 系统的制作安装于调试275.1实物电路的绘制与PCB板的制作275.2实物元件的安装与焊接28结 论29致 谢30参 考 文 献31 引言微电子技术、自动控制技术与计算机技术的发展将人类社会带入了一个电子信息世界。各种电子控制系统应用于生活的每一个角落。温度的测量与控制已经渗透到了工农业生产及人们的日常生活中,工业上锅炉加热、水温控制、烤炉温度控制等诸多场合对温度的测量与控制要求越来越多。农业上仓库温度监控、花房温度检测、孵化室温度控制等方面对温度的自动控制的要求越来越高,传统的以人工来测温及调节温控设备已经不能满足人们的要求。采用单片机及传感技术实现对温度测量与控制不仅具有控制方便、简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大的提高控制效率、节约劳动力。因此,如何很好的实现温度自动测量与控制是当前摆在科技工作者面前亟待解决的问题。随着各式各样的传感器的出现,传感技术的应用也逐渐成熟,伴随着传感器价格的逐步降低,其应用领域越来越广泛,从航天科技到工业控制再到农业生产,传感器的应用水平已成为衡量一个国家科学技术发展水平的重要标志之一。因此,了解并掌握各类传感器的基本结构、工作原理及特性是非常重要的。当前传感器的被测信号来自于各个应用领域,在诸多领域中温度传感器是其中重要的一类传感器。其发展速度之快,以及其应用范围之广我们已经有目共睹,其技术革新及成本节俭同样是技术工作者不断攻克的难题。本着节约设计成本及合理应用温度传感器实现温度测量、温度调节与控制、报警控制等功能,本文利用单片机结合传感器技术而开发设计了多路温度测控系统。文中传感器理论与单片机实际应用有机结合,详细地讲述了基于单片机AT89S52和温度传感器DS18B20的温度控制系统的设计方案与软硬件实现方案。系统包括4路数据采集模块、电源系统模块、单片机控制模块、人机交互液晶显示模块、温度设置模块、输出控制模块及报警电路七个部分组成。文中对每个部分功能、实现过程作了详细介绍。本设计应用性比较强,系统稍微改装便可作为生物培养液温度监控系统,可以做热水器温度调节系统、实验室温度监控系统等等。设计后的系统具有操作方便,控制灵活等优点。2 概述21 课题背景与研究意义随着科技的发展及生活水平的提高,人们对环境参数的要求也越来越高,温度做为环境参数的一个重要因素,从人们对生活环境的要求,家用空调、电冰箱、烤箱等温度参数的控制极大的影响着人们的生活环境,正是有了这些温度测量及控制设备,人们的生活水平才能得到逐步的提高;从工农业生产来看,现代温室大棚、粮仓、工业恒温控制箱等对温度参数的要求至关重要,因此对温度的精确测量及温度的精确控制是使得工农业生产顺利进行的先决条件。在工业生产过程中为了高效地进行生产,简单的温度测量已经不能满足日益高效的生产节拍,随着科技的进步,智能控制已经得到了广泛的应用,如何把温度的测量与智能控制相结合已经成为大家关注的焦点。由于现代工艺越来越多的实现智能控制,以降低日益提高的劳动力成本。所以国内外科技工作者无不关注如何更好的使温度测量与自动控制结合一起,本文正是本着这一思想,采用集成温度传感器与单片微处理器像结合实现温度的测量与控制,由于单片微处理器的性能日益提高、价格又不断降低,使其性能价格比的优势非常明显。本课题采用数字温度传感器采集温度,51单片机来对温度数据进行处理显示并自动控制报警及降温装置。采用此方案设计不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标。作为控制系统中的一个典型实验设计,单片机温度控制系统综合运用了微机原理、自动控制原理、传感器原理、模拟电子技术、数字控制技术、键盘显示技术等诸多方面的知识,是对所学知识的一次综合测试。22 系统设计要求设计并制作一个基于单片机的多路温度监控系统,要求能够对4个测量点的温度进行采集,显示、判断,当温度超出设定的温度范围时系统具备报警提示功能,同时系统应具备自动调节温度功能,当检查点温度超出范围应能通过相应的装置使温度自动回到合理范围内,保证温度在设定的范围内工作,同时系统报警上下限范围可通过人工按键设定。具体设计指标如下:1: 四路温度采集与显示,显示界面采用LCD1602液晶,要求同时显示4路温度值,显示精度+/-0.5°。2:温度调节控制部分采用单片机控制四路继电器的通断来实现,继电器控制风扇,用来调节温度,风扇的开与关通过判定温度值自动开关。3:温度超出设定值,系统应具备紧急报警功能,报警模式采用声光报警,具体实现采用蜂鸣器与LED发光二极管实现。4:具备按键设置与调整功能,可通过按键设置报警警戒温度,风扇开启温度点。23 系统设计方案2.3.1 系统设计方案论证结合所学知识,通过查找资料和论证,可通过以下方案来实现课题要求实现的指标,各方案介绍如下所述。方案一:采用纯硬件的闭环控制系统。该系统的优点在于速度较快,但可靠性比较差、控制精度比较低、灵活性小、线路复杂、调试安装都不方便。且要实现题目所有的要求难度较大。方案二:FPGA/CPLD或采用带有IP内核的FPGA/CPLD方式。即用FPGA/CPLD完成采集,存储,显示及A/D等功能,由IP核实现人机交互及信号测量分析等功能。这种方案的优点在于系统结构紧凑,可以实现复杂的测量与与控制,操作方便;缺点是调试过程复杂,设计成本较高。方案三:采用单片机与高精度数字温度传感器相结合的方式。即用单片机完成人机界面,系统控制,信号分析处理,由前端温度传感器完成信号的采集。这种方案克服了方案一、二的缺点,所以本课题任务是“基于单片机的多路温度测控系统设计”。2.3.2 系统设计方案硬件实现框图4路温度的采集采用数字型温度传感器DS18B20,采集到的温度值送单片机进行处理,通过LCD1602液晶进行显示;系统电源电路采用宽电压直流输入,通过集成三端稳压芯片LM7805进行稳压后供单片机及液晶显示模块用电;温度调节控制电路通过继电器控制小风扇的方案实现,使设计简单化,既能验证设计功能又能很好的降低设计成本。系统主控部分采用单片机AT89S52配以外围电路实现。系统硬件实现框图如图2-1所示。4路DS18B2温度传感感器AT89S52单片机最小系统温度调节控制电路LCD1602液晶显示界面按键输入电路系统电源电路图2-13系统硬件电路设计31 系统元器件选型及参数介绍3.1.1 系统单片机选型单片机的选择在整个系统设计中至关重要,要满足大内存、高速率、通用性、价格便宜等要求,本课题选择AT89S52作为主控芯片。AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S52芯片具有以下特性附录A系统电路图4:指令集和芯片引脚与Intel公司的8051兼容;4KB片内在系统可编程Flash程序存储器;时钟频率为033MHz;128字节片内随机读写存储器(RAM);32个可编程输入/输出引脚;2个16位定时/计数器;6个中断源,2级优先级;全双工串行通信接口;监视定时器;2个数据指针。AT89S52单片机的40个引脚中有2个专用于主电源引脚,2个外接晶振的引脚,4个控制或与其它电源复用的引脚,以及32条输入输出I/O引脚5。AT89S52单片机引脚图如图3-1所示:图3-13.1.2 系统温度传感器选型与介绍早期常见的温度控制系统多数是模拟电路设计,主要是使用热敏电阻或使用铂电阻,或使用热电偶等,其温度控制的准确度和精确度都不太好。如今,数字技术高速发展,早先的温度控制系统也被基于数字技术的新一代产品所替代。其中温度传感器DS18B20应用非常广泛,它在测温精度、转换时间、传输距离、分辨率等方面有很大的改进。而随着高性能和低成本的单片机的不断发展,新式无线温度控制系统的应用也越来越广泛,它的功能强大,体积小,重量轻,灵活耐用,备受大家青睐。因此,本系统选用的是美国DALLAS 半导体公司生产的DS18B20 温度传感器。选用该传感器的原因有:DS18B20与微处理器仅需要一条线即可实现双向通讯,简化连接难度;无需其他的AD转化器件,降低成本,也减少了硬件制板的费用;可供使用电压范围大:3.0V到5.5V都可以使用,器件的功耗较低;测温分辨率高,最高可达0.125度,便于温度精确控制附录B系统源程序#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char/*显示LCD1602*sbit rs = P25;sbit wela = P26;sbit lcden = P27;sbit S1 = P20;sbit S2 = P21;sbit S3 = P22;sbit S4 = P23;sbit DQ1 = P10; /温度传感器sbit DQ2 = P11;sbit DQ3 = P12;sbit DQ4 = P13;sbit LED1 = P14; /LEDsbit LED2 = P15;sbit LED3 = P16;sbit LED4 = P17;sbit BUZZ=P30; /蜂鸣器sbit SW1 = P34; /控制sbit SW2 = P35;sbit SW3 = P36;sbit SW4 = P37;bit HL_flag;uchar chn; /通道选择 /DQ通道 uchar DQ1_SET2; /DQ1上下限设置 DQ1_SET0 下限 DQ1_SET1 上限;uchar DQ2_SET2; /DQ1上下限设置 DQ1_SET0 下限 DQ1_SET2 上限;uchar DQ3_SET2; /DQ1上下限设置 DQ1_SET0 下限 DQ1_SET3 上限;uchar DQ4_SET2; /DQ1上下限设置 DQ1_SET0 下限 DQ1_SET4 上限;uchar chn; /通道选择/-LCD1602-/-温度传感器DS18B20-uchar ng; /负号标志uchar code tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x58,0xFF; /* 0 1 2 3 4 5 6 7 8 9 C 无*/uchar code df_Table= 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9; /温度小数位对照表uchar CurrentT = 0; /当前读取的温度整数部分uchar Temp_Value=0x00,0x00; /从DS18B20读取的温度值uchar Display_Digit=0,0,0,0;/待显示的各温度数位bit DS18B20_IS_OK = 1; /传感器正常/-温度传感器DS18B20-/-LCD1602-void DelayMS(uint ms) /延时N ms uchar i;while(ms-) for(i=0;i<113;i+);/-LCD1602-void delay(uint z) /延时N msuint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void write_com(uchar com) /1602液晶写指令rs=0;lcden=0;P0=com;delay(1);lcden=1;delay(1);lcden=0;void write_date(uchar date) /1602液晶写数据rs=1;lcden=0;P0=date;delay(1);lcden=1;delay(1);lcden=0;void init_lcd() /初始化液晶,及画面初始化wela=0;lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);/-LCD1602-/*18b20*/延时void Delay_18b20(uint x) while(-x);uchar Init_DS18B20() uchar status; switch(chn) case 0:break; case 1:DQ1 = 1;Delay_18b20(8); /延时DQ1 = 0;Delay_18b20(90);/延时DQ1 = 1;Delay_18b20(8);status = DQ1;Delay_18b20(100);DQ1 = 1;return (status); break; case 2: DQ2 = 1;Delay_18b20(8); /延时DQ2 = 0;Delay_18b20(90);/延时DQ2 = 1;Delay_18b20(8);status = DQ2;Delay_18b20(100);DQ2 = 1;return (status); break; case 3: DQ3 = 1;Delay_18b20(8); /延时DQ3 = 0;Delay_18b20(90);/延时DQ3 = 1;Delay_18b20(8);status = DQ3;Delay_18b20(100);DQ3 = 1;return (status); break; case 4: DQ4 = 1;Delay_18b20(8); /延时DQ4 = 0;Delay_18b20(90);/延时DQ4 = 1;Delay_18b20(8);status = DQ4;Delay_18b20(100);DQ4 = 1;return (status); break; default : break; /读一个字节uchar ReadOneByte() uchar i,dat=0; switch(chn) case 0: break; case 1: DQ1 = 1;_nop_();for(i=0;i<8;i+) DQ1 = 0;dat >>= 1;DQ1 = 1;_nop_();_nop_();if(DQ1)dat |= 0X80;Delay_18b20(30);DQ1 = 1;return(dat); break; case 2:DQ2 = 1;_nop_();for(i=0;i<8;i+) DQ2 = 0;dat >>= 1;DQ2 = 1;_nop_();_nop_();if(DQ2)dat |= 0X80;Delay_18b20(30);DQ2 = 1;return(dat); break; case 3: DQ3 = 1;_nop_();for(i=0;i<8;i+) DQ3 = 0;dat >>= 1;DQ3 = 1;_nop_();_nop_();if(DQ3)dat |= 0X80;Delay_18b20(30);DQ3 = 1;return(dat); break; case 4: DQ4 = 1;_nop_();for(i=0;i<8;i+) DQ4 = 0;dat >>= 1;DQ4 = 1;_nop_();_nop_();if(DQ4)dat |= 0X80;Delay_18b20(30);DQ4 = 1;return(dat); break; default : break; /写一个字节void WriteOneByte(uchar dat) uchar i; switch(chn) case 0: break; case 1: for(i=0;i<8;i+) DQ1 = 0;DQ1 = dat& 0x01;Delay_18b20(5);DQ1 = 1;dat >>= 1; case 2: for(i=0;i<8;i+) DQ2 = 0;DQ2 = dat& 0x01;Delay_18b20(5);DQ2 = 1;dat >>= 1; case 3: for(i=0;i<8;i+) DQ3 = 0;DQ3 = dat& 0x01;Delay_18b20(5);DQ3 = 1;dat >>= 1; case 4: for(i=0;i<8;i+) DQ4 = 0;DQ4 = dat& 0x01;Delay_18b20(5);DQ4 = 1;dat >>= 1; default : break; /读温度值void Read_Temperature() if(Init_DS18B20()=1)DS18B20_IS_OK=0;elseWriteOneByte(0xcc); /跳过序列号WriteOneByte(0x44); /启动温度转换Init_DS18B20();WriteOneByte(0xcc);/跳过序列号WriteOneByte(0xbe);/读取温度寄存器Temp_Value0 = ReadOneByte(); /温度低8位Temp_Value1 = ReadOneByte();/温度高8位DS18B20_IS_OK=1;/处理温度值void Display_Temperature()/ uchar i;uchar t = 150;/,延时 ng = 0; /与负值标志if(Temp_Value1&0xf8)=0xf8) Temp_Value1 = Temp_Value1;Temp_Value0 = Temp_Value0+1;if(Temp_Value0=0x00)Temp_Value1+;ng = 1;elseng = 0;Display_Digit0 = df_TableTemp_Value0&0x0f; /查表得温度小数部分CurrentT = (Temp_Value0&0xf0)>>4) | (Temp_Value1&0x07)<<4); /温度整数部分Display_Digit3 = CurrentT/100; /百Display_Digit2 = CurrentT%100/10; /十Display_Digit1 = CurrentT%10; /个write_com(0x80+5);write_date('T'); write_date('e');write_date('m'); write_date('p');write_date(' '); if(ng=1)write_date('-');elsewrite_date(Display_Digit3+'0'); /负温度 /正温度 write_date(Display_Digit2+'0'); /十write_date(Display_Digit1+'0'); /个write_date('.'); /点write_date(Display_Digit0+'0'); / 小数位write_date('C');/*温度显示*void DIS_SET(uchar x,uint d_timer) /显示设置采样时间uchar bai,shi,ge; bai=d_timer%1000/100; shi=d_timer%100/10; ge=d_timer%10;write_com(0x80+0x40+x); write_date(0x30+bai);write_date(0x30+shi);write_date(0x30+ge);write_date('C');/*void DIS_CHN(uchar add,uchar date) /显示CHNuchar bai,shi,ge; bai=date%1000/100; shi=date%100/10; ge=date%10;write_com(0x80+add); write_date('D');write_date('Q');write_date(0x30+date);void init() /定时器初始化TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1; /开中断ET0=1; /TR0=0; /BUZZ=1; /关蜂鸣器void KEY_SCAN(void) /键盘扫描 if(S1=0) / 通道切换DelayMS(100);chn+;if(chn>4)chn=1; while(!S1);/等待按键释放 if(S2=0) /上限或者下限切换DelayMS(100);if(S2=0) HL_flag=HL_flag; /HL_flag=1;上限 HL_flag=0下限 while(!S2);/等待按键释放if(S3=0)&&(HL_flag=0) /加下限delay(50);if(S3=0) switch(chn) case 0: break; case 1: DQ1_SET0+;break; /显示设置下限 case 2: DQ2_SET0+;break; /显示设置下限 case 3: DQ3_SET0+;break; /显示设置下限 case 4: DQ4_SET0+;break; /显示设置下限 default : break; else /加上限 delay(50);if(S3=0) switch(chn) case 0: break; case 1: DQ1_SET1+;break; /显示设置下限 case 2: DQ2_SET1+;break; /显示设置下限 case 3: DQ3_SET1+;break; /显示设置下限 case 4: DQ4_SET1+;break; /显示设置下限 default : break; if(S4=0)&&(HL_flag=0) /-下限delay(50);if(S4=0) switch(chn) case 0: break; case 1: DQ1_SET0-;break; /显示设置下限 case 2: DQ2_SET0-;break; /显示设置下限 case 3: DQ3_SET0-;break; /显示设置下限 case 4: DQ4_SET0-;break; /显示设置下限 default : break; else /-上限 d