基于单片机的恒温箱设计_第1页
基于单片机的恒温箱设计_第2页
基于单片机的恒温箱设计_第3页
基于单片机的恒温箱设计_第4页
基于单片机的恒温箱设计_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEIV基于单片机的恒温箱设计摘要随着时代的进步和发展,我们在科研领域中使用的很多仪器在逐步趋于数字化,智能化。在日常生活及工农业生产中,对温度的检测及控制时常显得极其重要。在传统的温度测量系统设计中,往往采用模拟技术进行设计,不可避免地会遇到引线误差补偿、多点测量中的开关误差和信号调理电路的误差等问题,其中一个环节的处理不当可能会导致导致整个系统性能下降。随着现代科学技术的飞速发展,特别是大规模集成电路设计技术的发展,微型化、集成化和数字化正成为传感器发展的重要方向。本文将介绍一种基于AT89C51单片机控制,以DS18B20为测温传感器的恒温箱,它将使用LCD1602液晶显示实现温度显示。本恒温箱属于多功能恒温箱,具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点,可以手动设置上下报警温度的零界值,当测量温度显示不在设置范围内时,可以报警蜂鸣。本课题设计的恒温箱选用DS18B20数字温度传感器,可测温度范围为-55~~+125

℃,它与单片机组成一个测温系统,具有线路简单、体积小等特点,而且一条总线可连接多个器件,可以构成一个低电压低功耗的多点数字测温系统,十分方便,也适合于恶劣环境下进行现场温度测量,有广泛的应用前景。关键词:单片机;数字控制;恒温控制;DS18B20

AbstractWiththeprogressanddevelopmentofthetimes,manyinstrumentsweuseinthefieldofscientificresearcharegraduallybecomingdigitalandintelligent.Indailylifeandindustrialandagriculturalproduction,temperaturedetectionandcontrolareoftenextremelyimportant.Inthetraditionaldesignoftemperaturemeasurementsystem,analogtechnologyisoftenusedtodesign,whichinevitablyencounterssuchproblemsasleaderrorcompensation,switchingerrorinmulti-pointmeasurementanderrorofsignalconditioningcircuit,andimproperprocessingofonelinkmaycausetheperformanceofthewholesystemtodecline.Withtherapiddevelopmentofmodernscienceandtechnology,especiallythedevelopmentoflarge-scaleintegratedcircuitdesigntechnology,miniaturization,integrationanddigitizationarebecominganimportantdirectionofsensordevelopment.ThispaperwillintroduceakindofthermostatbasedonAT89C51singlechipcomputercontrol,usingDS18B20astemperaturesensor.ItwilluseLCD1602liquidcrystaldisplaytorealizetemperaturedisplay.Thisthermostatbelongstomulti-functionthermostat.Ithasthecharacteristicsofeasyreading,widerangeoftemperaturemeasurement,accuratetemperaturemeasurement,digitaldisplayandwideapplicationrange.Itcanmanuallysetthezerolimitofalarmtemperatureupanddown.Whenthetemperaturemeasurementdisplayisnotwithinthesetrange,itcanalarmbuzzing.DS18B20digitaltemperaturesensorisusedinthethermostatdesignedinthispaper.Thetemperaturerangecanbemeasuredfrom-55to~+125C.Itiscomposedofatemperaturemeasuringsystemwithsinglechipcomputer.Ithasthecharacteristicsofsimplecircuitandsmallsize.Moreover,abuscanconnectmanydevices,anditcanformalowvoltageandlowpowerconsumptionmulti-pointdigitaltemperaturemeasuringsystem.Itisconvenientandsuitableforfieldtemperaturemeasurementinharshenvironment.Ithaswideapplicationprospects.Keywords:singlechipcomputer;digitalcontrol;constanttemperaturecontrol;DS18B20

目录摘要 IAbstract II引言 11绪论 21.1选题研究背景和意义 21.2国内外研究现状 21.3本文的主要工作 32系统总体设计 42.1电路总框图设计 42.2电路总原理图 53系统各部分硬件电路 63.1显示电路 63.1.1引脚定义 63.2.2指令介绍 63.1.3显示自定义字符 73.2DS18B20温度传感器与单片机的接口电路 83.3振荡电路 133.4复位电路 133.5报警电路 143.6电源电路 143.7工作原理 154软件部分设计 164.1主程序流程图 164.2各子程序流程图 164.2.1初始化程序 164.2.2读取温度子程序 174.2.3写流程图 184.2.4读流程图 195仿真调试 215.1Proteus软件介绍 215.2系统调试 215.3仿真结果 22总结 24参考文献 25致谢 26附件代码 27PAGE21引言恒温控制技术在现代工业中应用广泛。温度的监控对于产品质量的保证、生产效率的提高、能源的可持续利用有着十分重要的作用。传统的温度控制系统存在实时监控性差、温度控制精度差、设备的体积偏大等缺点,不能适应现代化系统的设计要求。随着现代化技术的革新,各种控制方式和技术以及芯片的精确度均有很大地提升,使得恒温箱的控制精确度和实用性有了很大的提高。本文设计了以AT89C51单片机为处理器的恒温箱,并给出了详细的设计过程和实验结果,对同类型的控制系统设计具有一定的参考价值。

1绪论1.1选题研究背景和意义温度测量涉及各行各业,而传统的温度测量仪器一般需人工手动测量,准确性不高,测量过程复杂而不简便,例如有水银恒温箱、酒精恒温箱、煤油恒温箱等。在很多棘手的,有毒的,或者一些无人区是无法正常通过手动完成温度的测量,所以传统温度测量仪器的劣势之处就轻而易举的显现出来了。随着单片机技术的不断发展,电子技术的日新月异,使恒温箱的自动化、数字化、便捷化就变得非常容易实现。如今单片机在日用电子产品中运用越来越广泛,而恒温箱与传统的恒温箱相比,具有读数方便、测温范围广、测温准确、灵敏度高、抗干扰性强、性能稳定等优点,其输出温度采用数字显示,主要用于对测温准确度要求比较高的场所或科研实验室使用。现代信息技术的不断完善与改进,温度传感器的改进也与时俱进,总线更加标准化、可靠性和安全性让人民更加的放心,它的精度不断增高、功能不断增多,并且开发出了网络传感器和虚拟传感器,为研制更加高科技单片测温系统打下坚实的基础。所以研究基于单片机的恒温箱是非常的有意义。我们相信在不久的将来,会有越来越先进的恒温箱被生产制造出来。1.2国内外研究现状温度是科学技术中最基本的物理量之一,物理、化学、生物等学科都离不开温度。在电力、化工、石油、冶金、航空航天、粮食储藏、酒精生产等工业生产和实验研究领域,温度往往是表征对象和过程状态的最重要参数之一。在1593年由意大利科学家伽利略发明了世界上最早的恒温箱。第一只恒温箱的一根一端敞口的玻璃管,另一端带有核桃般大的玻璃泡。开始使用时先给玻璃泡加热,然后再把玻璃管插入水中。玻璃管中的水面就会随着温度的变化而上下移动,根据移动的多少就可以判定温度的变化或温度的高低。然而这种原始的恒温箱,非常容易受外界大气压强等环境因素,所以往往这样的恒温箱测量出来的数据跟实际数据的误差较大。所以荷兰人沃伦·海德在这个基础上做了改进,1709年使用酒精,1714年使用水银作为测量物质,制造出稍微更精确的恒温器。我们用华氏温度来表示,定义0为一定浓度盐水凝固的温度,32为纯水凝固的温度,212为标准大气压下的沸水温度。这是华氏温度调节器。随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它给人们带来的便利是不可否认的。恒温器是一个典型的例子,但人们对它的要求越来越高。要为现代人的工作、科研、生活等提供更好、更方便的条件。设备需要从数字单片机技术入手,全部朝着数字控制、智能控制的方向发展。然而,这种传统的水银或酒精恒温器,由于测量时间长、读数不准确、功能单一,不能满足数字化时代人们的基本要求。而恒温箱是一种新型的恒温箱,它具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,是一种精度高、稳定性好、适用性极强的新型现场温度显示仪。温度传感器常用于恒温器中,将温度变化转化为电信号的变化,如电压和电流的变化,温度变化与信号的变化有一定的关系,如线性关系、曲线关系等。数字信号可以通过模数转换电路进行转换,即A/D转换电路将模拟信号转换成数字信号,数字信号被发送到处理单元,如单片机或PC机,处理单元通过I/D接口将数字信号与温度连接起来。内部软件计算,并成为可显示的温度值。1.3本文的主要工作本文介绍一种基于AT89C51单片机控制、以DS18B20为测温传感器的恒温箱,它将使用4位共阳极LED数码管,以串口传送数据来实现温度显示。本恒温箱属于多功能恒温箱,具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点,可以手动设置上下报警温度的零界值,当测量温度显示不在设置范围内时,可以报警蜂鸣。

2系统总体设计2.1电路总框图设计用热敏电阻-半导体为传感器的恒温箱,需要用到A/D转换电路,而A/D转换电路工作速度较低,感温电路比较复杂。它可测量到小范围内的温度,变化率较大,固有电阻大,无需延长导线时的误差补偿,但是热敏电阻阻值的稳定性还不够理想(一般年变化量在0.1%左右),影响准确度的提高。另一个是温度与电阻值之间为非线性关系,变化率非线性,是不适合测量高温区的,而且制作仪器时需要进行线性化处理,工艺比较复杂。热电偶恒温器能在小范围内测量温度,具有热响应快、抗振动、抗冲击等特点。它能高精度地测量高温区。由于热电偶与被测对象直接接触,不受中间介质的影响,测量范围宽,结构简单,使用方便。但其变化率很小,需要对冷接触温度进行调整。在单片机电路设计中,大多采用传感器,因此可以采用温度传感器DS18B20。该传感器能方便地直接读取被测温度值并进行转换,满足设计要求。恒温器电路的总体设计框图如图1所示。以单片机AT89S51为控制器,DS18B20为温度传感器,LCD1602液晶显示管实现温度测量显示。整个系统硬件电路由lcd1602显示电路、db18b20温度传感器与单片机接口电路、振荡电路、复位电路、电源电路和报警电路组成。图2.1恒温箱电路设计总体设计方框图2.2电路总原理图图2.2电路总原理图在图2.2中,有三个独立的按键,可以分别调整恒温器上限和下限的报警设置。图中蜂鸣器可在被测温度不在上下限时报警。同时,LED数码管不会显示测量的温度值。此时,可以调整报警的上下限来测量测得的温度值。在图2.2中,复位电路是通电复位加上手动复位。使用方便。程序运行时,可手动复位,无需重新启动单片机电源即可实现复位。

3系统各部分硬件电路3.1显示电路LCD1602液晶显示器是工业字符型液晶,能够同时显示16×02即32个字符。是一种专门显示字母、数据、符号等的点阵型液晶。每个点阵都可以显示一个字符。实物如图2.26。图3.1LCD16023.1.1引脚定义LCD1602具有16个引脚。引脚示例如图3.2。各引脚功能见表3.1。图3.2LCD1602引脚示例表3.1引脚功能表序号名称描述1GND接地2VCC接+5V3VL液晶显示器对比度调整端4RS寄存器选择端5RW读写控制端6EN使能端7-14D0-D7双向数据端15BL+背灯电源正极16BL-背灯电源负极3.2.2指令介绍LCD1602液晶显示器内部共有11条指令。各指令定义及功能见表3.2。表3.2LCD1602指令表3.1.3显示自定义字符显示自定义字符步骤如下:(1)先将自定义字符写入CGRAM。LCD160内含的CGROM字符代码表中的00H~07H地址中的内容没有定义,它是用户自定义区域。用户可以向CGRAM中定义内容。在设定内容时,要逐行设定,每行对应一个CGRAM,每行5点,共8行。(2)将CGRAM中的自定义字符传送到DDRAM中。首先写入行地址。格式见表3.3。然后设定CGRAM数据的内容。见表3.4。表3.3行地址格式RSR/WDB7DB6DB5-DB3DB2-DB00001字符地址行号表3.4设定CGRAM中的数据格式RSR/WDB7-DB5DB4-DB010一般取‘000’每行5点的字模数据显示电路如图3.3所示。图3.3显示电路3.2DS18B20温度传感器与单片机的接口电路DS18B20温度传感器与单片机的接口电路可以说是本系统中最重要的电路。此温度传感器DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源模式。如图3.4所示,单片机端口与单线总线相连。为了在有效的ds18b20时钟周期内提供足够的电流,可以使用mosfet管来拉起总线。当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。图3.4DS18B20与单片机的接口电路DS18B20温度传感器是达拉斯半导体公司最近推出的一种改进型智能温度传感器。与热敏电阻等传统温度传感器相比,DS18B20温度传感器可以直接读取被测温度,并可根据实际需要通过简单编程实现9-12位数字量的读取。DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如表3.5所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如表3.7所示。较低的5位总是1。TM是工作模式位。用于设置DS18B20是工作模式还是测试模式。DS18B20出厂时,位设置为0。用户需要更改它。r1和r0决定温度转换的精度位以设置分辨率。表3.5DS18B20字节定义温度LSB温度MSBTH用户字节1TL用户字节2配置寄存器保留保留保留CRC从表3.6可以看出,DS18B20转换温度数据的时间较长,分辨率越高,转换温度数据的时间越长。因此,在实际应用中应考虑分辨率和转换时间。表3.6DS18B20温度转换时间R11R0分辨率/位温度最大转换时间/MS00993.750110187.510113751112750高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表3.7是一部分温度值对应的二进制温度数据。表3.7一部分温度对应值表温度/°C二进制表示十六进制表示125000001111101000007D0H8500000101010100000550H25.062500000001100100000191H10.125000000001010000100A2H0.500000000000000100008H000000000111100000000H-0.51111111101011110FFF8H-10.1251111111110101110FF5EH-25.06251111111001101111FE6FH-551111110010010000FC90HDS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。DS18B20的测温原理是这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温系数振荡器决定。每次测量前,将-55C对应的基数分别放入减法计数器1和温度寄存器中。计数器1和温度寄存器预设为与-55C对应的基值。减法计数器1减去由低温系数晶体振荡产生的脉冲信号。当减法计数器1的预置值减为0时,温度寄存器的值增加1,减法计数器1的预置值重新加载,减法计数器1开始对低温系数晶体产生的脉冲信号进行计数。再次振荡。循环直到减法计数器计数为零,停止温度寄存器的累积,其中温度寄存器的值是测量的温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。分别说明如下:(1)初始化单总线的所有处理均从初始化开始。初始化过程是主机通过向作为从机的DS18B20芯片发一个有时间宽度要求的初始化脉冲实现的。初始化后,才可进行读写操作。(2)ROM操作命令总线主机检测到DS18B20的存在便可以发出ROM操作命令之一。这些命令见表3.8:表3.8ROM操作命令指令代码ReadROM(读ROM)[33H]MatchROM(匹配ROM)[55H]SkipROM(跳过ROM)[CCh]SearchROM(搜索ROM)[F0H]Alarmsearch(告警搜索)[ECH](3)存储器操作命令如表3.9:表3.9存储器操作命令紫菱代码WriteScratchpad(写暂存存储器)[4EH]ReadScratchpad(读暂存存储器)[BEH]CopyScratchpad(复制暂存存储器)[48H]ConvertScratchpad(温度转换)[44H]RecallEPROM(重新调出)[B8H]ReadPowersupply(读电源)[B4H]DSl8B20多路测量简介:图3.5DSl8B20原理框图每个DSL8B20在其ROM中都有其唯一的48位序列号。它在出厂前已写入片上ROM。进入操作程序前,主机必须逐个访问DS18B20,用ROM(33H)命令读取DS18B20的序列号并登录。当主机需要在多个联机DS18B20中的一个上操作时,它首先发出匹配的ROM命令(55h),然后是64位序列(包括DS18B20的48位序列号)。之后的操作就是针对该DS18B20的。而所谓跳过ROM命令即:MOVA,#0CCH。图2.4中先有跳过ROM,即是启动所有DS18B20进行温度变换,之后通过匹配ROM再逐一地读回每个DS18B20的温度数据。在由ds18b20组成的温度测量系统中,主机发出跳转rom命令后,发出统一的温度转换启动码44h,可以实现所有ds18b20的统一转换。一秒钟后,它可以在很短的时间内一个接一个地被读取。这种方式使其T值往往小于传统方式。(由于采取公用的放大电路和A/D转换器只能逐一转换)。显然通道数越多,这种省时效应就越明显了。在DB18B20温度传感器与单片机的接口电路中另一个有重要作用的就是主控制器——单片机AT89C51。AT89S51单片机具有低压供电、体积小的特点。四个端口只需要两个端口就可以满足电路系统的设计需要。它非常适合便携式手持产品的设计。这个系统可以用两块电池供电。如图2.5所示。图3.6单片机AT89C51(1)单片机AT89C51的主要特性:·与MCS-51兼容。·4K字节可编程闪烁存储器,寿命:1000写/擦循环,数据保留时间:10年。·全静态工作:0Hz-24Hz。·三级程序存储器锁定。·128*8位内部RAM。·32可编程I/O线。·两个16位定时器/计数器。·5个中断源。·可编程串行通道。·低功耗的闲置和掉电模式。·片内振荡器和时钟电路。(2)单片机AT89C51的管脚说明:VCC:供电电压。GND:接地P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1的引脚写入1后,内部拉高,可作为输入。P1的引脚被从外部拉低至低电平,输出电流是由于内部拉高引起的。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2端口是具有内部上拉电阻的8位双向I/O端口。p2缓冲器可以接收和输出四个ttl栅极电流。当p2端口写为“1”时,其引脚由内部上拉电阻升高并用作输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL3.3振荡电路AT89C51单片机内部的振荡电路是一个高增益反向放大器,引线XTAL1和XTAL2分别是放大器的输入端和输出端。单片机内部虽然有振荡电路,但要形成时钟,外部还需附加电路。AT89C51的时钟产生方式有两种:内部时钟电方式和外部时钟方式。由于外部时钟方式用于多片单片机组成的系统中,所以此处选用内部时钟方式。即利用其内部的振荡电路在XTAL1和XTAL2引线上外接定时元件,内部振荡电路产生自激振荡。最常用的方法是将晶体振荡器与xtal1和xtal2之间的电路连接起来,形成稳定的自激振荡器。如图3.7所示,它是单片机最常用的时钟振荡器电路。其中振荡频率为12mhz的石英晶体可用于晶体振荡器,电容器一般可选择30pf左右。图3.7振荡电路3.4复位电路本设计中AT89C51是采用上电自动复位和按键复位两种方式。最简单的复位电路如图所示。上电瞬间,RC电路充电,RST引线端出现正脉冲,只要RST端保持10ms以上的高电平,就能使单片机有效地复位。其中R14选择10KΩ的电阻,电容器选择10μF。图3.8复位电路3.5报警电路报警由单片机产生一定频率的脉冲,由p2.7管脚输出,由p2.7外的pnp三极管驱动,使扬声器发出声音,使操作者能够对其进行维护,从而达到报警的目的。图3.9报警电路3.6电源电路主要提供整个恒温箱的电源电力,如图3.10电源电路图.图3.10电源电路图3.7工作原理DS18B20本身就是一种数字温度传感器,它会把温度转换成数字量以后存贮在自身内部,和单片机只需要连接一个I/0口,是一种单总线串行接口,然后通过单片机来根据传感器特性计算出温度,并且显示出来。

4软件部分设计系统程序主要包括主程序、读取温度子程序、数据转换子程序、显示数据子程序等。4.1主程序流程图主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图3.1所示。图4.1主程序流程图4.2各子程序流程图4.2.1初始化程序所有操作必须从初始化脉冲开始。波形如图所示。MCU首先向DQ引脚输出480-960US低电平,然后将DQ引脚设置为高电平。15-60us后,检测到dqpin状态。如果是低电平,则DS18B20工作正常,否则初始化失败,无法正常测量温度。如图4.2初始化程序:图4.2初始化程序4.2.2读取温度子程序读取温度子程序的主要功能是读取9字节的RAM,读取时需要进行CRC校验,校验时不需要重写温度数据。主要包括以下三个指令:(1)写暂存器命令【4EH】这个命令为由TH寄存器开始向DS18B20暂存器写入数据,4EH命令后的3字节数据将被保存到暂存器的地址2、3、4(TH、TL、CONFIG)三个字节。所有数据必须在复位脉冲前写完。即如果只想写一个字节的数据到地址2,可按如下流程:初始化;写0CCH,跳过ROM检测;写4EH;写1字节数据;复位,即向DQ输出480~960us低电平(2)读暂存命令【BEH】这个命令由字节0读取9个暂存器内容,如果不需要读取所有暂存内容,可随时输出复位脉冲终止读取过程(3)转换温度命令【44H】此命令启动温度转换过程。转换温度时DS18B20保持空闲。此时,如果MCU发出读取命令,DS18B20输出0,直到转换完成,转换完成后输出1。图4.3读取温度子程序4.2.3写流程图写时隙:写时隙由DQ引脚的下降沿引起。18B20有写1和写0两种写时隙。所有写时隙必须持续至少60μs,两个时隙之间至少有1μs的恢复时间。DS18B20在DQ下降边缘后15到60微秒之间对DQ引脚进行采样。如果此时dq很高,它会写一个位1。如果此时dq很低,它会写入一个位0,如图2.4所示。所以,若想写入1,则单片机应先将DQ置低电平,15us后再将DQ置高电平,持续45μs;若要写入0,则将DQ置低电平,持续60μs。图4.4写流程图4.2.4读流程图读时隙:读时隙是由dq的下降沿引起的。释放总线(DQSET1)DS18B20的输出数据在下降沿为15微秒后输出。此时,单片机可以读取1位数据。读时隙结束时要将DQ置1。所有读时隙必须持续至少60μs,两个时隙之间至少有1μs的恢复时间。图4.5读流程图

5仿真调试5.1Proteus软件介绍Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。5.2系统调试仿真电路图如图5.1所示。图5.1仿真电路图双击单片机出现下图所示画面图5.2,在ProgramFile一栏中选取仿真项目的源程序代码,点击OK。图5.2加载源程序示意效果5.3仿真结果单击Play按钮,进入仿真状态,出现下图5.3所示。(1)当温度值为44.5°时,温度值在设定值之间,温度正常,蜂鸣器不报警;图5.3温度正常仿真图(2)当温度值为50.5°时,温度值在超出设定值,温度过高,蜂鸣器报警,并且温度过高报警三极管亮起;图5.4温度过高仿真图(2)当温度值为29.5°时,温度值在低于设定值,温度过低,蜂鸣器报警,并且温度过低报警三极管亮起;图5.5温度过低仿真图

总结时代的进步和快速发展,使我们在科研等领域中,对数据准确性的要求越来越高,而传统的恒温箱,和早期恒温箱,已经越来越不能满足人们对准确性,便捷性的需求。经过设计方案的论证、系统的硬件和软件的设计、系统的调试等。我查阅了大量的关于传感器DS18B20、单片机基础及其接口电路、以及控制方面的理论知识。通过本文分析表明:本设计是一个性价比比较好的恒温箱的设计。本设计能够很准确,快捷的测量温度,并且能在设定测量值的温度以外数值有一个蜂鸣器报警功能,很好的起到报警提醒的作用。这次设计基本完成了任务书的要求,实现了准确,方便,快速测量温度的功能。然而毕业设计的整个过程使我对自己也有了一个全新的认识,也看到了自己的不足之处。通过这次设计,不仅锻炼了自己发现问题,并且分析问题、处理问题的能力,还提高了自己的动手方面的能力。最重要的是这特殊的锻炼不仅丰富我们的人生经历,更是我们以后生活工作中的宝贵财富。在本次设计中我加深了课本上学到的知识,也学到了课本以外的知识。让我懂得了,不管做什么,都应该脚踏实地,勤勤恳恳,积极进取,乐观执着,敢于面对困难与挑战,一丝不苟,摆正态度,对待学习应保持严谨的,谦虚的态度,努力提升自己分析问题,解决问题的能力,为今后更好的学习添砖加瓦。跟随着信息技术发展的脚步,相信在不久的将来,我们还会有更加准确的测温控制器被人们研发并大量生产出来。

参考文献[1]江伟,齐群.基于AT89S52单片机的智能小车设计与制作[J].广东交通职业技术学院学报,2013,01:24-27.[2]丁春霞.基于51单片机的LCD数字钟设计与制作[J].中国科技信息,2013,18:87+95.[3]姜宝华,齐强.基于单片机的无线遥控智能小车的设计与制作[J].电子世界,2013,03:24-25.[4]殷蔚,黄清华,胡微.高职《电子设计与制作》课程设计与实施[J].职业技术教育,2011,02:30-32.[5]陆中宏.基于Proteus软件的单片机控制系统设计与制作[J].工业技术与职业教育,2011,01:40-41.[6]彭真真.单片机驱动LCD12864的应用——科学计算器的设计与制作[J].电子制作,2011,07:40-44.[7]夏晓玲.《单片机小系统的设计与制作》课程“一体化”教学设计改革[J].鄂州大学学报,2015,05:92-93.[8]姜波,佟巳刚.基于单片机的温度监测系统设计与制作[J].数字技术与应用,2012,06:13.[9]刘德新,周志文,张卫丰.基于STC89S52单片机智能交通灯控制系统的设计与制作及应用[J].深圳信息职业技术学院学报,2012,03:38-41.[10]王平.以工作过程为导向培养创新型高技能人才的实践探索——以单片机应用设计与制作课程为例[J].职业时空,2012,09:57-58.[11]张瑞卿.基于AT89S52单片机的灌溉控制器的设计与实现[D].昆明理工大学,2014.[12]ZhangHai-feng,ZhaoAi-ling,HOUJun.DesignofFumigationTemperatureControlSystemBasedonSingle-ChipMicrocontroller[J].ProcediaEngineering,2011,15.[13]RuiJiang,YaqiXu,ZhenHuang,ZhengMa.WirelessEnvironmentalMonitoringDevice[J].ProcediaEngineering,2011,15.[14]MohamedFezari,RachadRasras,IbrahiemM.M.ElEmary.AmbulatoryHealthMonitoringSystemUsingWirelessSensorsNode[J].ProcediaComputerScience,2015,65.[15]刘腾远.基于单片机的温度控制系统设计[J].科技经济导刊,2018(01):77-78.[16]丁群燕,刘佳,曾鑫,李威.基于单片机控制的铸造浇注温度控制系统的优化[J].特种铸造及有色合金,2018,38(03):254-256.

致谢本论文是在导师的谆谆教诲和指导下完成的,从选题、构思到定稿无不渗透着导师的心血和汗水;导师渊博的知识和严谨的学风使我受益终身,在此表示深深的敬意和感谢。这次写论文的经历也会使我终身受益,我感受到,做论文是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程。没有认真学习和钻研,自己就不可能有研究的能力,就不可能有自己的研究,就不会有所收获和突破。希望这个经历,在今后的学习和生活中能够继续激励我前进。另外,还要特别感谢我的家人,他们时刻关心我,给我提供了学习的机会,时时刻刻为我鼓劲、为我加油,进而促使我不断成长和进步。同时,也要感谢寝室的室友以及所有关心我的朋友,感谢他们陪伴我走过了很多美好的时光,在我遇到困难时他们关心我、帮助我。在完成毕业论文的过程中,很多朋友都给了我无私的帮助和支持,在此表示由衷的谢意!最后,因本人水平有限,论文肯定还有不少不足之处,恳请各位老师批评指正,我希望可以有机会继续去完善,我将不断努力继续充实自己。

附件代码#include<reg52.h>#include"mytype.h"#include"led.h"#include"ds18b20.h"#include"key.h"/*****继电器端口***********/sbitcold=P1^4;sbitheat=P1^5;sbitbuzzer=P1^6;//蜂鸣器uinttvalue;uintdig3,dig2,dig1,dig0; //digx数码管要显示的数据,在led.h中声明的外部变量uintdig3_u,dig2_u,dig1_u,dig0_u;//保存设置上限upuintdig3_d,dig2_d,dig1_d,dig0_d;//保存设置下限downucharkey; //key是key的返回值,在key.h中声明的外部变量ucharkflag,kshift=1,kmode=0;//按键设置标志、闪烁led的移位按键、按键模式(上下限温度)uinttemp; //缓存温度voidKeyCtrl();//按键控制voidmain(void){ TMOD=0x01;//方式1的定时计数50ms,设置定时器每一段时间采集温度值 TH0=0x3c; TL0=0xb0; EA=1; TR0=1; ET0=1; dig2_u=5;//初始化上限50.0度 dig1_u=0; dig0_u=0; dig2_d=3;//初始化下限30.0度 dig1_d=0; dig0_d=0; while(1) { if(KeyScan())KeyCtrl();//扫描到按键执行按键控制,否则跳过 if(kflag)//如果按键设置标志为1,进入闪烁显示 { LedFlick(kshift);//数码管闪烁显示 } else { temp=tvalue;//tvalue是外部变量,在定时器执行中断采集温度时ReadTemp();改变温度值 dig3=0; dig2=temp/100%10; dig1=temp/10%10; dig0=temp%10; LedScan();//数码管显示采集温度 if(temp>(dig2_u*100+dig1_u*10+dig0_u))//大于上限值报警并制冷 { buzzer=1; heat=0; cold=1; } elseif(temp<(dig2_d*100+dig1_d*10+dig0_d))//小于下限值报警并制热 { buzzer=1; heat=1; cold=0; } else//不报警停止制冷制热 { buzzer=0; heat=0; //高电平有效,此处关闭制热 cold=0; //高电平有效,此处关闭制冷 } } } }/***********按键控制函数,模式、加减、确认***********/voidKeyCtrl(){ if(key) //key是外部变量,在扫描的时候改变,在退出这个函数前清零,否则会一直保持控制,闪啊闪的 { switch(key) //判断扫描到的按键是什么,作出相应的操作 { case1:kflag=1; //模式切换按键 kmode++; if(kmode==1)//把保存的上限温度值显示出来 { dig0=dig0_u; dig1=dig1_u; dig2=dig2_u; dig3=11;//'H' } elseif(kmode==2)//把保存的下限温度值显示出来 { dig0=dig0_d; dig1=dig1_d; dig2=dig2_d; dig3=12;//'L' } elseif(kmode==3)//恢复温度采集显示 { kmode=0; kflag=0; dig3=0; } break; case2:kshift++; //闪烁位左移按键 if(kshift==4)kshift=1; break; case3: if(kflag)//加1按键 switch(kshift) { case1:dig0++; if(dig0==10)dig0=0; //之所以这样,是避免dig0加到10以上会显示数组段码的后面的字符 break; case2:dig1++; if(dig1==10)dig1=0; break; case3:dig2++; if(dig2==10)dig2=0; break; } break; case4: if(kflag) //减1按键 switch(kshift) { case1:dig0--; if(dig0==-1)dig0=9; break; case2:dig1--; if(dig1==-1)dig1=9; break; case3:dig2--; if(dig2==-1)dig2=9; break; } break; default:break; } } if(kmode==1)//把显示的温度值上限保存一下 { dig0_u=dig0; dig1_u=dig1; dig2_u=dig2; dig3_u=dig3; } elseif(kmode==2)//把显示的温度值下限保存一下 { dig0_d=dig0; dig1_d=dig1; dig2_d=dig2; dig3_d=dig3; } key=0; }/**********定时中断每隔一段时间采集一次当前温度******/voidtime0()interrupt1{ ucharcnt; TH0=0x3c;//重赋初值 TL0=0xb0; if(!cnt) { ReadTemp(); } cnt++; if(cnt==4)cnt=0;//50ms*4=1/5s采集一次温度值}#include<reg51.h>#include"ds18b20.h"uchartflag;//温度正负标志voidDelay_DS18B20(uinti)//延时{ while(i--);}/********DS18B20复位**********/voidDS18B20_RST(){ ucharx=0; DQ=1; //DQ复位 Delay_DS18B20(2);//延时 DQ=0; //DQ拉低 Delay_DS18B20(80); //延时大于480us,但是此处注意,最大值是96,>96就得不到温度值了 DQ=1; //DQ拉高,释放总线 Delay_DS18B20(10); x=DQ; Delay_DS18B20(2);}/************读数据***********/ucharDS18B20_RD(){ uchari; ucharrdata=0; for(i=8;i>0;i--) { DQ=0;//给脉冲信号 rdata>>=1; DQ=1;//给脉冲信号 if(DQ) rdata|=0x80; Delay_DS18B20(4); } return(rdata);}/************写数据***********/voidDS18B20_WR(ucharwdata){ uchari=0; for(i=8;i>0;i--){DQ=0;DQ=wdata&0x01;Delay_DS18B20(4);DQ=1;wdata>>=1; //}Delay_DS18B20(2);}/*******转换温度并返回温度值*****/uintReadTemp(){ ucharTL,TH; DS18B20_RST(); DS18B20_WR(0xcc); //*跳过读序列号*/ DS18B20_WR(0x44); //*启动温度转换*/ DS18B20_RST(); DS18B20_WR(0xcc); //*跳过读序列号*/ DS18B20_WR(0xbe); //*读取温度*/ TL=DS18B20_RD(); TH=DS18B20_RD(); tvalue=TH; tvalue<<=8; tvalue=tvalue|TL; if(tvalue<0x0fff)tflag=0; else { tvalue=~tvalue+1; tflag=1; //负温度标志 } tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数 return(tvalue);}#include<reg52.h>#include"key.h"ucharkeyflag;//标志按键,用于按下一次只加一,不会累加/********key延时函数*************/voidKeyDelay(uintt){ uintx,y; for(x=t;x>0;x--) for(y=100;y>0;y--);}/*********按键扫描,按一次加一************/ucharKeyScan(){ if(!keyflag) { if(!(K1&K2&K3&K4)) { KeyDelay(10); if(!K1)key=1; elseif(!K2)key=2; elseif(!K3)key=3; elseif(!K4)key=4; keyflag=1; } } if(K1&K2&K3&K4)keyflag=0; return(key);}/*********按键扫描,长按累加************ucharKeyScan(){ if(!(K1&K2&K3&K4)) { KeyDelay(10); if(!K1)key=1; elseif(!K2)key=2; elseif(!K3)key=3; elseif(!K4)key=4; } return(key);}******/ #include<re

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论