基于单片机的温度控制系统设计毕业论文(31页).doc
-
资源ID:37055501
资源大小:235.50KB
全文页数:31页
- 资源格式: DOC
下载积分:15金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
基于单片机的温度控制系统设计毕业论文(31页).doc
-基于单片机的温度控制系统设计毕业论文-第 25 页南 阳 理 工 学 院 本 科 毕 业 设 计(论文)基于单片机的温度控制系统设计Based on Single Chip Microcomputer Temperature Control System Design学 院(系): 计算机与信息工程学院 专 业: 计算机科学与技术 学 生 姓 名: 李瑞卿 学 号: 1306734005 指 导 教 师(职称):鲁庆宾(副教授) 评 阅 教 师: 完 成 日 期: 2015年6月 南阳理工学院Nanyang Institute of Technology基于单片机的温度控制系统设计 通信工程专业 李瑞卿【摘 要】温度是工业控制中主要的被控参数之一,在日常生活中也经常要用到温度的检测及控制。本文介绍了一种以AT89C51单片机为核心的控制器,以DS18B20为温度传感器的温度控制器。首先,通过对元器件的选择,设计控制器的硬件电路;然后,设计相关应用程序;最后,通过仿真,对整个系统进行调试、分析。最终实现温度采集、显示、控制等功能。仿真结果表明,所设计的控制器能够完成所需功能,并且具有测量精准高、实时性好、使用方便等特点。【关键词】:温度控制;AT89C51;温度显示;DS18B20Based on Single Chip Microcomputer Temperature Control System DesignCommunications Engineering Major Li RuiqingAbstract:Temperature control is charged with one of the main industrial parameters, in everyday life also often use to detect and control the temperature. This paper presents a AT89C51 microcontroller as the core to the controller to DS18B20 temperature sensor temperature controller. First, the choice of components, design of the controller hardware circuit; then, design-related applications; Finally, the simulation of the entire system for debugging and analysis. The ultimate realization of temperature acquisition, display and control functions. Simulation results show that the designed controller to complete the required function, and has high measurement precision, real-time, user-friendly features.Key words: Temperature control; AT89C51; Temperature display; DS18B20目 录1 绪 论11.1课题背景及意义11.2课题研究的内容11.3.温度控制器的选择22. 温度控制器的硬件电路设计32.1 温度传感器的选择32.1.1 数字温度传感器32.1.2 热电阻温度传感器42.1.3 方案选择42.2 温度采集模块电路的设计42.2.1 DS18B20介绍42.2.2 温度传感器工作原理52.2.3 DS18B20工作原理介绍72.2.4 DS18B20使用中的注意事项82.2.5 DS18B20和AT89C51单片机连接电路92.3 显示模块设计102.3.1 LCD液晶显示器简介102.3.2 液晶模块简介112.3.3 液晶显示部分与STC89C51单片机的接口132.4 按键电路的设计142.4.1 单片机检测按键的原理142.4.2 矩阵键盘的设计153. 系统软件设计163.1 主程序的设计163.2 DS18B20初始化程序173.3 LCD初始化程序的设计193.4 继电器控制的程序204. 仿真结果及分析264.1 系统仿真264.2 仿真分析275. 总结28参考文献29附 录30致谢361 绪 论1.1课题背景及意义日常生活中温度控制在各行各业中都起着重要的作用,因此能够检测温度变化的温度检测设备出现在人们的视线中。它能使人们能及时看到温度变化的第一手资料,提示温度变化情况,协助人们及时调整,并有温度报警作用,让温度控制更好的服务于整个社会和人们的生活。21世纪是电子技术飞速发展的时代,人类的生活发生了质的变化,特别是随着大规模集成电路的出现微型计算机应运而生,让人类社会进入了一个新的时代。虽然微机可以完成各种各样的工程控制,但是微机价格高,对于大多数的工业控制来说,并不是最佳选择。于是单片机就出现在了人们的视野中。它是一个简化的微机,将微机的中央处理器,存储单元,I/O接口,定时器/计数器等集成在一片芯片上。和微机比较,单片机价格低廉,适合应用在工业的控制场合以降低成本。另外,单片机可靠性高,性能稳定。可在复杂的工业环境下运行。单片机依靠其高性价比,在工业控制,工业生产,家用电器制造等方面得到了广泛的应用。温度是表征物体冷热程度的物理量,工农业生产过程中温度是一个重要的参数。温度测量在产品生产,工业设计,能源节约中起到了关键性的作用。随着科学技术的进步和生产的需要,温度传感器不断更新丰富起来。温度作为一个模拟量,如果采用合适的技术和元件,将模拟的温度量转化为数字量虽说不难,但电路也很复杂,成本也很高。温度测量中测量温度是重点,本设计中单片机温度测量同样如此。1.2课题研究的内容本设计研究的主要课题是基于单片机的水温控制系统,介绍了对炉内温度的显示、控制和报警,实现了温度的实时显示及控制。其中炉内温度控制中,采用AT89C51单片机、DS18B20、和LCD的硬件电路检测和显示实时水温,采用DS18B20与单片机相接再由硬件与软件电路组合来实现对加热电阻丝的控制和超出规定的上下限温度的报警。1.3.温度控制器的选择 温度控制器选择基于51单片机的温度控制器,图2-1是基于51单片机的温度控制器框图。该控制器由温度采集模块、控制模块、显示模块、报警模块以及电源模块等组成。基于单片机的温度控制器框图如图2-1所示。图1-1 基于单片机温度控制器框图51单片机是控制器的控制核心,因此单片机的选择,对所设计系统的实现以及功能的扩展有着很大的影响。单片机种类很多,在众多51系列单片机中,较为常用的是ATMEL 公司的AT89C51和AT89S52单片机,AT89C51片内4KROM是Flash工艺的,使用专用的编程器自己就可以随时对单片机进行电擦除和改写,片内有128字节的RAM。而AT89S52含有在系统可编程的Flash存储器,片内有8K闪存,RAM的容量也较AT89C51大,为256字节。显然这种单片机优点更多,开发时间也大为缩短。2. 温度控制器的硬件电路设计2.1 温度传感器的选择温度是表征物体冷热程度的物理量,它可以通过物体随温度变化的某些特性(如电阻、电压变化等特性)来间接测量,利用这种物理特性制成的传感器称为温度传感器。常用的温度传感器有热电偶、热敏电阻、热电阻、集成温度传感器及数字式温度传感器等多种温度传感器。2.1.1 数字温度传感器典型的数字温度传感器如DS18B20,该传感器主要特性如下:1.数据线供电是寄生电源方式下的供电方式,电压适应的范围更宽,电压范围:3.05.5V;2.DS18B20在和微处理器的连接仅仅需一条总线即就可以实现DS18B20和微处理器双向的通信,它的单线接口方式十分特殊;3.DS18B20可以支持多个点的组网功能,多个DS18B20可并联的在唯一的总线上,能够实现组网的多点测温;4.转换的电路及全部传感器元件就像一只三极管集成在的集成电路内,DS18B20在使用的时候不需要任何的外围元件;5.在-10+85时精度为±0.5,测温范围55+125;6.可分辨温度依次为0.5、0.25、0.125和0.0625,相对应的可以编程的分辨率是912位,可实现高精度测温;7.12位分辨率时最多在750毫秒内把温度值转换为数字,在9位分辨率时最多在 93.75毫秒内把温度转换为数字,速度更快;8.直接输出数字温度信号的测量结果,可传送CRC校验码,同时以"单总线"串行方式传送给CPU,有极强抗干扰和纠错能力;9.负压特性:接反电源的极性时,芯片不会因发热而烧毁,但不能正常工作。2.1.2 热电阻温度传感器热电阻的测量精度高,性能稳定,使用方便,测量范围宽,在高精度、低温测量中占有重要的地位。热电阻传感器主要用于中低温度(-200+650或850)范围的温度测量。常用的工业标准化热电阻有铂热电阻和铜热电阻。铂电阻传感器是利用金属铂(Pt)的电阻值随温度变化而变化的物理特性而制成的温度传感器。以铂电阻作为测温元件进行温度测量的关键是要能准确地测量出铂电阻传感器的电阻值。铂电阻具有适用范围广、测量范围大、稳定性高、重复性好、价格低廉、使用方便等优点,成为目前工业和实验室中温度测量应用最广泛普遍的传感元件之一,工业中应用较多的热电阻传感器如Pt100。2.1.3 方案选择对比上述两种方案,虽然Pt100的测量温度范围比较大,但是由于其测温原理是电阻值随着温度的改变而改变,需要设计非常优良的温度采集电路,其中应包括测温部分,线性化部分,放大部分,A/D转换部分,这就会使外围的电路更加复杂。DS18B20是数字式温度传感器,只需一根总线就可以与单片机通信,是外围的电路大大简化,测量的精度更准确。因此本控制器的设计中,温度传感器拟选择DS18B20作为温度采集传感器。2.2 温度采集模块电路的设计2.2.1 DS18B20介绍DS18B20引脚图如图2-1所示。图2-1 DS18B20引脚图DALLAS 最新的单线数字温度传感器DS18B20是一种新型“一线器件”,它的体积更小、更适用于多种场合、而且适用电压更宽、也更经济。DALLAS 半导体公司开发的数字化温度传感器DS18B20也是世界上第一片支持“一线总线”接口的数字温度传感器。温度的测量范围为-55+125 摄氏度,能编程为9位12 位转换精度,0.0625摄氏度的测温分辨率,分辨率的设定参数及用户设定的报警温度会存储在EEPROM 中,掉电后依然能保存。用符号扩展的16位数字量方式串行的输出被测温度;采用寄生电源方式产生,其工作的电源既可以远端引入;3 根或2根线上可并联多个DS18B20,CPU只需要一根端口线就能与诸多的DS18B20 通信,较少占用微处理器的端口,可以节省逻辑电路和大量的引线,因而用它来组成的测温系统,具有线路简单,在一根通信线,可挂多个这样的数字温度计,非常的方便。2.2.2 温度传感器工作原理DS18B20的读写时序及测温原理与DS1820是相同的,得到的温度值的位数却会因为分辨率的不同而不同,而且进行温度转换时的延时时间从2s 减为750ms。 DS18B20的测温原理:低温度系数的晶振,它是用以产生固定频率的脉冲信号给计数器1,它的振荡频率受到温度的影响非常的小。高温度系数的晶振,则它的振荡率会随着温度的变化而明显的改变,产生的信号就作为计数器2的脉冲输入。温度寄存器以及计数器1被预先设置在55所对应的一个基数值。对从低温度系数晶振产生的脉冲,将会通过计数器1来进行减法的计数,当计数器1预置的值减到了0的时候,计数器1的预置值将重新装入,这时候温度寄存器的值就加1。计数器1也就重新开始进行计数,如此循环,停止温度寄存器值的累加时计数器2的计数值到0,所测温度就为此时温度寄存器中的数值。DS18B20功能特点:1.采用了总线技术,与单片机的通信只需要一根I/O线,在一根线上可以挂接多个的DS18B20。2.每只DS18B20它是根据序列号来访问相应的器件,具有一个独有的,不可更改的64位的序列号。3.低压供电,电源范围为3-5V,可本地供电,也能直接通过数据线提供电源(即寄生电源2方式)。4.在-10°C至+85°C范围内的可以达到精度为±0.5摄氏度,测温的范围为55+125摄氏度。5.温度超过了的预定值的器件可以用报警搜索命令识别以及寻址。6.用户可以自己设定报警上下限温度。7.它转换12位的温度的最大时间为750毫秒,可编辑的数据位9-12位。8.DS18B20的分辨率由用户通过EEPROM设置为9-12位。9.DS18B20可以将检测到的温度值直接转化为数字量,并且通过串行通信方式。DS18B20有4个主要数据部件:1. 光刻ROM中的64位序列号在出厂之前就已经被光刻好了,它可看作该DS18B20的地址的序列码。64位光刻ROM的排列为:开始的8位 (28H)是产品类型的标号,接着48位是该DS18B20的自身序列号,最后的8位是前面的56位循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是让每一个DS18B20都不相同,这样的话就能够一根总线上可挂接多个的DS18B20。2. DS18B20温度传感器能实现对温度的测量,以12位的转化为例:用16位的符号扩展二进制补码读数的形式提供,以0.0625/LSB的形式表达,其中S是符号位。3. DS18B20温度传感器它的内部存储器包括一个高速暂存RAM以及一个非易失性的、可电擦除的EEPRAM,后者存放高温度和低温度的触发器 TH、TL以及结构寄存器。4.配置寄存器。DS18B20内部结构及功能:DS18B20内部的结构如图3-7所示。主要包括以下部分:电源,温度传感器,64位的ROM单总线接口,用于存放中间数据的高速暂存器RAM,用于存储用户设定温度上下限的TH和TL触发器,控制逻辑,8为循环冗余校验码(CRC)发生器等7部分。DS18B20内部结构如图2-2所示。图2-2 DS18B20内部结构2.2.3 DS18B20工作原理介绍温度的读取:DS18B20出厂时配置为12位,读取温度时共读取16位,所以要把后11位的2进制转化为10进制后再乘以0.0625就是所测的温度,还需判断正负。前5个的数字为符号位,若前5位为1时,读取的温度就为负数;若前5位为0时,读取的温度就为正数。DS18B20写操作:1.数据线首先置低电平“0”。2.延时的时间为15ms。3.再按从低位到高位的顺序发送字节(一次只能发送一位)。4.延时的时间为45ms。5.把数据线拉到高电平。6.重复上(1)到(6)的操作,一直到所有的字节全部都发送完为止。7.最后把数据线拉高。DS18B20读操作:1.把数据线拉高“1”。2.延时2ms。3.数据线拉低“0”。4.延时15ms。5.将据线拉高“1”。6.延时15ms。7.读数据线的状态得到了1个状态位,并且进行数据处理。8.延时30ms。2.2.4 DS18B20使用中的注意事项DS18B20 虽具有连接方便、测温系统简单、占用口线少、测温的精度高等优点,然而在实际的应用中也应该注意以下几方面问题:1.DS18B20 从测温结束直到把温度值转换成为了数字量,需要一些转换时间,这必须保证,不然会出现转换错误现象,从而使温度输出总是显示为85度。2.在实际的使用中,应该使电源电压保持在5V 左右的大小,若是电源的电压过低了,就会降低所测得的温度精度。3.较小的硬件开销就需要比较复杂的软件来进行补偿,因为DS1820和微处理器间数据是串行传送的,所以,对DS1820进行读写编程,就必须严格保证读写时序,否则就不能读取测得的温度值。4.DS18B20的有关资料由于未提及单总线上所挂DS18B20 数量,就使人误认为能够挂任意多个的DS18B20,但在实际的应用中并不是这样的,如果在单总线上所挂载的DS18B20超过了8个,就要解决微处理器的总线驱动问题,在进行多点测温系统设计时必须注意这一点。5.在DS18B20测温程序的设计中,向DS18B20 发出了温度转换命令后,程序总是要等待DS18B20的返回信号,若某个DS18B20 接触不好或这断线,当程序读该DS18B20 时,将会没有返回的信号,程序就进入了死循环,这一点在进行DS18B20硬件连接和软件设计的时候也要给予重视。2.2.5 DS18B20和AT89C51单片机连接电路DS18B20可以有两种供电的方式,一种用的是电源供电的方式,此时DS18B20的1脚接地,3脚接电源,2脚是信号线。另一种是寄生电源供电的一种方式。如图2-3 所示单片机端口接的是单总线,为了在DS18B20有效的时钟周期之内提供的电流足够,对总线的上拉可用一个MOSFET管来完成。当DS18B20处于温度A/D转换操作和写存储器操作时,必须有强的上拉在总线上,上拉的最大开启时间为10微秒。采用寄生电源供电的供电方式时VDD端接地,单线制由于只有一根线,因此发送接口必须是三态的。DS18B20与单片机的接口电路如图2-3所示。图2-3 DS18B20与单片机的接口电路2.3 显示模块设计2.3.1 LCD液晶显示器简介显示器是人和机器交流信息的重要界面,早期的是以显像管(CRT/Cathode Ray Tube)显示器为主,但是随着技术的不断发展,各种各样的显示技术不断诞生,而液晶(LCD)显示器由于具有耗电量较低、短小轻薄、无辐射的危险,平面直角显示,和稳定不闪烁的影像等优势,更是在近年来不断下跌的价格吸引下,逐渐取代了主流的CRT之地位。液晶是一种既有液体的流动性还具光学特性的有机化合物,它的透明程度和呈现颜色受外加电场影响,利用这个特点就可以做成字符显示器。液晶显示器(LCD)英文为Liquid Crystal Display,它是一种采用液晶控制透光度的技术来实现色彩的显示器。和CRT显示器比,LCD的优点是十分明显的。因为通过控制是否透光从而控制亮和暗,当色彩不变化时,液晶也就保持不变,这样就不用考虑刷新率的问题。显示接口用来显示系统的状态,命令和采集的电压数据。本系统的显示部分用的是LCD液晶模块,采用的是一个16×1字符型液晶的显示模块。 点阵图形式的液晶显示器是由 M 行×N 列个显示单元组成的,若LCD 显示屏有64行,每行有 128列,每 8列对应 1 个字节的 8 个位,则每行有 16 字节,共有 16×8=128个点所组成,屏上 64×16 个显示单元和显示 RAM 区 1024 个的字节是相对应的,屏上相应位置的亮暗和每一个字节的内容是对应的。一个字符是由 6×8 或者 8×8一个点阵所组成的,所以要找到和屏上某几个位置相对应显示 RAM区的 8 个字节,而且应该使每一个字节不的同位为1状态,其它的则为0,为1的点亮,为0的点为暗,这样就组成了某一个字符。但是对内部自带字符发生器的控制器来说,字符显示就会比较简单了,可以使控制器在文本方式下工作,根据在每行的列数找出显示RAM对应的地址和LCD开始显示的行列号,设立光标,在此送入该字符的对应代码就可以了。2.3.2 液晶模块简介LM016L结构及功能:LM016L液晶模块采用了HD44780的控制器,hd44780是具有简单而功能较强的指令集,能实现字符移动,闪烁等一些功能,LM016L与单片机MCU通讯可以采用8位或者4位并行传输的两种方式,hd44780控制器是由两个8位的寄存器,地址计数器RAM(AC),和字符发生器ROMA(CGOROM)字符发生器RAM(CGRAM),显示数RAM(DDRAM),及指令寄存器(IR)以及数据寄存器(DR)忙标志(BF)。寄存指令码用IR,只可以写入不可以读出,DR用以寄存数据,数据是暂存从DDRAM和CGRAM读出,或内部操作自动的写入DDRAM和CGRAM的数据,当BF为1时,液晶模块就会处于内部模式,不响应接受数据和外部操作指令,DDTAM用以存储显示字符,能够存储总共80个字符码,CGROM是由5*10点阵字符32种和8位字符码生成的5*7点阵字符160种.CGRAM是专门给用户编写特殊字符而留的,容量只有64个字节,可以自定义4个5*10点阵字符或8个5*7点阵字符,AC可存储CGRAM和DDRAM的地址,若是地址码随指令写入了IR的话,那么IR就自动把地址码装入AC,与此同时,选择DDRAM或者CGRAM5。LM016L晶模块的引脚图如图2-4所示。图2-4 1601引脚图LM016L引脚介绍:Vss(1脚):一般的会接地。Vdd(2脚):一般接电源。Vee(3脚):液晶显示器的对比度调整端,接电源时它的对比度是最弱的,接地时它的对比度却是最高的(如果对比度过高则会产生“鬼影”,使用时可通过一个10K电位器用来调整对比度)。RS(4脚):RS是选择寄存器的引脚,低电平0时选择的是指令寄存器、高电平1时就会选择数据寄存器。R/W(5脚):R/W是读写的信号线,低电平(0)时则进行的是写操作,高电平(1)时进行的是读操作。E(6脚):E(或EN)端是使能(enable)端,也即下降沿使能。DB0(7脚):底4位的三态、 双向数据总线的 0位(最低位)。DB1(8脚):底4位的三态、 双向数据总线 的1位。DB2(9脚):底4位的三态、 双向数据总线的 2位。DB3(10脚):底4位的三态、 双向数据总线的 3位。DB4(11脚):高4位的三态、 双向数据总线 的4位。DB5(12脚):高4位的三态、 双向数据总线的 5位。DB6(13脚):高4位的三态、 双向数据总线的 6位。DB7(14脚):高4位的三态、 双向数据总线 的7位(最高位)(也是busy flag)。寄存器选择控制如表2-5。表2-5寄存器选择控制RSR/W操作说明00写入指令寄存器(清除屏等)01读busy flag(DB7),及读取位址计数器(DB0DB6)值10写入数据寄存器(显示各字型等)11从数据寄存器中读取数据2.3.3 液晶显示部分与STC89C51单片机的接口 如图3-5所示。用89C51的P0口作数据线,用P1.2、P1.1、P1.0分别作LCD的E、R/W、RS。其中,E是下降沿触发片选信号,R/W是读写信号,RS是寄存器选择信号,本模块有如下设计要点:显示模块的初始化:首先要清屏,然后再设置8位接口数据位,显示的行数为1行,字型的为5×7点阵,然后再设置成整体显示,取消光标以及字体的闪烁,最后再设置成正向增量的方式且为不移位。送字符给LCD显示缓冲区,程序采用的是一个显示的字符,2个字符数组,另一则显示电压数据,相应数组中被送入要显示的字符或者数据,完成之后再统一的显示.LCD显示的缓冲区送人一个要显示的字符或者数据,通过软件延时2.5毫秒后,再作个数是否够显示的判断,若不足够则地址加一,取下一个要显示的字符或者数据。液晶与80C51单片机连接电路如图2-6所示。图2-6 液晶与89C51单片机的连接电路2.4 按键电路的设计2.4.1 单片机检测按键的原理单片机的I/O口即可以作为输出也可以作为输入使用,当该检测按键使用的是它的输入功能,我们把按键的其中一端接地,另一段与单片机的I/O口相连,开始时先给I/O口赋一个高电平,然后让单片机一直不断循环检测该I/O口是已经否变为了低电平,若是按键闭合,就相当于此I/O口通过按键接地了,变成低电平,程序如果检测到I/O口变为了低电平就说明该按键已被按下,然后就执行相应的指令和程序。2.4.2 矩阵键盘的设计键盘接口电路是单片机系统设计非常重要的一环,作为人机交互界面里最常用的输入设备。我们可以通过键盘输入数据或命令来实现简单的人机通信。通过4X4的矩阵键盘来可以对温度方便的进行设定,并通过液晶显示器实时显示温度设置的情况。4×4 的矩阵式键盘由4 根列线和4 根行线交叉构成,行列的交叉点上就是按键,这样就有16个按键。其中交叉点的行线和列线不连接,当按键按下,位于交叉点处的列线和行线导通。行线由上拉电阻连接VCC。若是无按键按下,行线为高电平;若是有键按下,行、列线在交点导通,此时,行线电平状态是与此行线相连列线的电平状态关联。这是判断按键是否按下的关键环节。但是,矩阵键盘的每一条行线均和4条列线相连接,位于交点处的按键是否按下均会影响该键所在列线和行线的电平状态,各个按键之间将会相互的影响,按键分析时必须把列线、行线的状态信号配合处理,才能确定闭合键的位置。在本设计中,按键电路原理图如图2-7所示。图2-7 按键电路原理图3. 系统软件设计3.1 主程序的设计整个设计系统功能由软件配合硬件电路来实现,若硬件已经定型,软件的功能也就基本上确定了。从软件的不同功能可为两大类:一类是主程序(监控软件),是整个控制系统的核心,专门用于协调操作者和各执行模块的关系。二类是子程序(执行软件),它用来实现各种实质性的功能,比如测量、计算、显示、通讯等。每一个小的执行软件就是一个小功能执行的模块。在这里一一的列出各执行模块,并为每一个执行模块进行接口和功能的定义。规划好各个执行模块以后,就可以进行监控程序的规划了。首先应根据系统的总体功能选择一种最合适的监控程序的结构,然后再根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。主程序流程图如图3-1所示。图3-1 主程序流程图主程序的C语言程序如下: 主程序main() set(); /开始设置while(1) /设置好后进入死循环 lcd_init(); / 初始化LCDkey(); /键盘扫描error(); /检查是否出错readtemp(); /读取温度值lcd(); /显示子函数relay(); /控制继电器delay(500); /延时3.2 DS18B20初始化程序DS18B20初始化步骤如下:1、高电平“1”状态必须先给数据线。2、然后延时(该时间的要求不严格,但尽可能短一点)。3、把数据线拉低到电平“0”状态。4、再延时750微秒(该时间的范围为480-960ms)。5、把数据线拉高到电平“1”。6、延时等待(初始化已成功,在15-60ms时间之内DS18B20返回一个低电平“0”。根据该状态来确定它是否存在,但不可无限进行等待,否则程序会进入死循环状态,故要有超时控制的操作)。7、CPU如果读到了数据线上“0”状态的低电平,还要再做延时,延时时间由发出高电平开始算起(第(5)步的时间开始算),最少需480ms。8、再次把数据线拉高到高电平“1”后就结束。 DS18B20初始化的C语言程序如下: DS18B20初始化子程序void Init_DS18B20() unsigned char x=0; /定义字符型局域变量DS = 1; /总线拉高tmpDelay(8); /延时,准备与DS18B20通讯DS = 0; /总线拉低tmpDelay(80); /延时,给DS18B20复位信号DS = 1; /总线拉高tmpDelay(14); /延时,等待DS18B20响应x=DS; /读DS18B20响应状态tmpDelay(20); /延时3.3 LCD初始化程序的设计LM016L的读操作时序如图3-2所示。LM016L的写操作时序如图3-3所示。LM016L的初始化的C语言程序如下: LCD初始化子程序lcd_init() lcd_wcmd(0x38); /设置8位字符显示,5*10点阵字符delay(1); /延时lcd_wcmd(0x0c); /开显示、光标和闪烁关闭delay(1); /延时lcd_wcmd(0x06); /读、写操作后,AC增一、画面不动delay(1); /延时lcd_wcmd(0x01); /清除LCD的显示内容delay(1); /延时3.4 继电器控制的程序当测量的环境温度低于设定温度时,启动加热继电器,使系统自动加热,当测量的温度高于设定的温度时,启动降温继电器,使系统自动降温,从而使系统的温度维持在设定的温度。系统继电器控制的C语言程序如下: 继电器控制子程序void relay() if(an=0)flagn=0; /实际温度为0度,实际温度标志位置0 if(as=0)flags=0; /设置温度为0度,设置温度标志位置0 if(flagn=0) /实际温度标志位为0时循环 if(flags=0) /设置温度标志位为0时循环 if(an<as) /若实际温度小于设置温度循环 up=0; /升温继电器闭合 down=1; /降温继电器打开 if(an=as) /若实际温度等于设置温度循环 up=1; /升温继电器打开 down=1; /降温继电器打开 if(an>as) /若实际温度大于设置温度循环 down=0; /降温继电器闭合up=1; /升温继电器打开 if(flags=1) /设置温度标志位为1时循环 up=1; /升温继电器打开 down=0; /降温继电器闭合 if(flagn=1) /实际温度标志位为1时循环 if(flags=1) /设置温度标志位为1时循环 if(an<as) /若实际温度大于设置温度循环 up=1; /升温继电器打开 down=0; /降温继电器闭合if(an=as) /若实际温度等于设置温度循环 up=1; /升温继电器打开 down=1; /降温继电器打开