电加热炉温度控制系统设计
计算机课程设计--基于某数字 PID 的电加热炉温度控制系统设计
计算机控制技术课程设计任务书题目:基于数字 PID 的电加热炉温度控制系统设计设计内容电阻加热炉用于合金钢产品热力特性实验,电加热炉用电炉丝提供功率,使其在预定的时问内将炉内温度稳定到给定的温度值。
在木控制对象电阻加热炉功率为 8Kw ,由 220V 交流电源供电,采用双向可控硅进行控制。
本设计针对一个温区进行温度控制,要求控制温度范困 50-350 ℃ ,保温阶段温度控制精度为土 l ℃ .选择和合适的传感器,计算机输出信号经转换后通过双向可控硅控制器控制加热电阻两端的电压。
其对象温控数学模型为:1)(+=-s T e K s G d sd τ 其中:时间常数T d = 350 秒放大系数 K d = 50滞后时间T d = 10 秒控制算法选用PID 控制。
设计步骤一、总体方案设计二、控制系统的建模和数字控制器设计三、硬件的设计和实现1、选择计算机机型(采用51内核的单片机);2、 设计支持计算机工作的外围电路( EPROM , RAM 、I/O 端口 、键盘、显示接口电路等)3、设计输入信号接口电路;4、设计D/A 转换和电流驱动接口电路;5、其它相关电路的设计或方案(电源、通信等)四、软件设计1、分配系统资源,编写系统初始化和主程序模块框图;2编写A/D 转换和温度检测子程序枢图;3、编写控制程序和 D/A 转换控制子程序模块粗图;4、其它程序模块(显示与键盘等处理程序)枢图。
五、编写课程设计说明书,绘制完整的系统电路图( A3 幅面)。
课程设计说明书要求1 .课程设计说明书应书写认真.字迹工稚,论文格式参考国家正式出版的书籍和论文编排。
2 .论理正确、逻辑性强、文理通顾、层次分明、表达确切,并提出自己的见解和观点。
3 .课程设计说明书应有目录、摘要、序言、主干内容(按章节编写)、主要结论和参考书,附录应有系统方枢图和电路原理图。
4 .课程设计说明书应包括按上述设计步骤进行设计的分析和思考内容和引用的相关知识.摘要单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
基于PLC控制的加热炉温度控制系统设计
基于PLC控制的加热炉温度控制系统设计概述加热炉是工业生产中常见的设备之一,其主要作用是提供高温环境用于加热物体。
为了确保加热炉的稳定性和安全性,需要设计一个可靠的温度控制系统。
本文将介绍一个基于PLC(可编程逻辑控制器)控制的加热炉温度控制系统设计方案。
系统设计原理在加热炉温度控制系统中,PLC作为核心控制器,通过监测温度传感器的输出信号,根据预设的温度设定值和控制策略,控制加热炉的加热功率,从而实现对加热炉温度的稳定控制。
以下是系统设计的主要步骤:1.硬件设备选择:选择适合的温度传感器和控制元件,如热电偶、温度控制继电器等。
2.PLC选型:根据实际需求,选择合适的PLC型号。
PLC需要具备足够的输入输出点数和计算能力。
3.传感器连接:将温度传感器接入PLC的输入端口,读取实时温度数据。
4.温度控制策略设计:根据加热炉的特性和工艺需求,设计合适的温度控制策略。
常见的控制策略包括比例控制、积分控制和微分控制。
5.控制算法实现:根据温度控制策略,编写PLC程序,在每个采样周期内计算控制算法的输出值。
6.加热功率控制:使用控制继电器或可调功率装置,控制加热炉的加热功率。
7.温度反馈控制:通过监测实际加热炉温度和设定值之间的差异,不断修正加热功率控制,使加热炉温度稳定在设定值附近。
系统硬件设计基于PLC控制的加热炉温度控制系统的硬件设计主要包括以下几个方面:1.温度传感器:常用的温度传感器有热电偶和热敏电阻。
根据加热炉的工艺需求和温度范围,选择适合的温度传感器。
2.PLC:选择适合的PLC型号,根据实际需求确定PLC的输入输出点数和计算能力。
3.控制继电器或可调功率装置:用于控制加热炉的加热功率。
根据加热炉的功率需求和控制方式,选择合适的继电器或可调功率装置。
4.运行指示灯和报警器:用于显示系统的运行状态和报警信息。
PLC程序设计PLC程序是基于PLC的加热炉温度控制系统的关键部分,其主要功能是实现温度控制算法。
基于单片机的电加热炉温度控制系统设计
基于单片机的电加热炉温度控制系统设计一、概述电加热炉温度控制系统是一种常见的自动化控制系统。
它通过控制加热元件的加热功率来维持加热炉内的温度,从而实现对加热过程的精确控制。
本文将介绍一种基于单片机的电加热炉温度控制系统的设计。
二、系统设计1. 硬件设计本系统采用单片机作为控制核心,传感器检测加热炉内的温度,并将数据反馈给单片机进行处理。
通过触摸屏交互界面,用户可以设定希望维持的温度值,单片机将控制加热元件的加热功率,以实现温度的稳定控制。
2. 软件设计单片机程序主要分为三个部分:(1)传感器数据采集和处理,通过定时器进行数据的采样,然后通过计算分析实现温度值的读取。
(2)温度控制,设定一个目标温度值后,单片机通过PID算法来控制加热元件的加热功率,保持温度的稳定。
(3)交互界面的设计,实现用户与系统的交互,包括设定目标温度值和实时温度显示等。
三、系统优势相对于传统的手动控制方式,本系统具有以下优势:(1)精度高,通过PID算法,可以实现对温度的精确控制,大大提高了生产效率。
(2)舒适度高,传统的手动控制方式需要人员长时间待在生产车间,而本系统的自动化控制方式,可以让人员远离高温环境。
(3)可靠性高,系统精度高,响应迅速,可以有效减少因为控制失误带来的损失。
四、结论本系统的设计基于单片机实现电加热炉温度的精确控制。
相对于传统的手动控制方式,具有精度高、舒适度高和可靠性高等优势。
在未来的生产过程中,随着物联网的发展,本系统也可以进行联网控制,实现对设备的远程控制和监控,提高设备的效率和安全性。
基于PLC控制的加热炉温度控制系统设计
基于PLC控制的加热炉温度控制系统设计加热炉温度控制系统设计的主要目的是确保加热炉内的温度能够稳定地控制在设定温度范围内,以满足生产工艺的要求。
在该系统中,采用了PLC控制器作为主要控制设备,通过控制加热元件的加热功率,实现温度的控制和稳定。
系统硬件设计部分:1.传感器选择:温度传感器是系统中最重要的硬件部分之一、根据实际需求,可选择热电偶、热敏电阻或红外线无接触温度传感器等。
同时,加热炉的材质和工作温度范围也需要考虑在内,以保证传感器的稳定性和耐高温性能。
2.控制器选择:采用PLC控制器作为主要控制设备,有较好的可编程性和灵活性,可根据实际需求进行编程,实现各种温度控制算法。
此外,PLC还可以通过其输入输出接口与其他设备进行通信,实现数据交换和协同控制。
3.加热元件选择:加热炉中常用的加热元件有电热器和电阻丝。
选择合适的加热元件需要考虑炉内的加热效果、功率调节范围、炉内均匀性等因素,以确保能够满足工艺要求。
系统软件设计部分:1.温度控制算法:根据实际需求,可以选择PID控制算法或者模糊控制算法等。
PID控制算法通过对比实际温度值和设定温度值,计算控制器输出,并通过加热元件的控制来调节温度。
模糊控制算法则根据温度误差和误差变化率的模糊逻辑关系,计算控制器输出。
2.界面设计:PLC控制器通常配备了显示屏或者触摸屏界面,可通过界面对系统进行监控和操作。
界面设计需要直观、简明,并能够实时显示和记录温度的变化情况,以便运维人员进行监测和调整。
3.安全保护功能:在系统设计中应考虑温度过高或过低的情况,设置相应的安全保护功能。
例如,当温度超出设定范围时,系统应自动停止加热元件的供电,并产生警告信号,以避免发生安全事故。
总结:基于PLC控制的加热炉温度控制系统设计需要综合考虑硬件和软件两方面因素。
通过合理选择传感器、控制器和加热元件,并设计合适的温度控制算法和安全保护功能,可以实现对加热炉温度的准确控制和稳定性,提高生产工艺的效率和品质。
电加热炉温度控制系统设计
(发布日期:-6-10)电加热炉随着科学技术旳发展和工业生产水平旳提高,已经在冶金、化工、机械等各类工业控制中得到了广泛应用,并且在国民经济中占有举足轻重旳地位。
对于这样一种具有非线性、大滞后、大惯性、时变性、升温单向性等特点旳控制对象,很难用数学措施建立精确旳数学模型,因此用老式旳控制理论和措施很难达到好旳控制效果。
单片机以其高可靠性、高性能价格比、控制以便简朴和灵活性大等长处,在工业控制系统、智能化仪器仪表等诸多领域得到广泛应用。
采用单片机进行炉温控制,可以提高控制质量和自动化水平。
1 前言在人类旳生活环境中,温度扮演着极其重要旳角色。
温度是工业生产中常用旳工艺参数之一,任何物理变化和化学反映过程都与温度密切有关,因此温度控制是生产自动化旳重要任务。
对于不同生产状况和工艺规定下旳温度控制,所采用旳加热方式,燃料,控制方案也有所不同。
无论你生活在哪里,从事什么工作,无时无刻不在与温度打着交道。
自18世纪工业革命以来,工业发展对与否能掌握温度有着绝对旳联系。
在冶金、钢铁、石化、水泥、玻璃、医药等等行业,可以说几乎80%旳工业部门都不得不考虑着温度旳因素。
在现代化旳工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用旳重要被控参数。
例如:在冶金工业、化工生产、电力工程、造纸行业、机械制造和食品加工等诸多领域中,人们都需要对各类加热炉、热解决炉、反映炉和锅炉中旳温度进行检测和控制。
从市场角度看[1],如果国内旳大中型公司将温度控制系统引入生产,可以减少消耗,控制成本,从而提高生产效率。
嵌入式温度控制系统符合国家提出旳“节能减排”旳要求,符合国家经济发展政策,具有十分广阔旳市场前景。
现今,应用比较成熟旳如电力脱硫设备中,主控制器在主蒸汽温度控制系统中旳应用,已经达到了世界迈进水平。
如今,在微电子行业中。
温度控制系统也越来越重要,如单晶炉、神经网络系统旳控制。
因此。
温度控制系统经济前景非常广泛,国内旳高新精尖行业研究其应用旳意义更是更加重大。
电加热炉温度控制系统设计
电加热炉温度控制系统设计摘要:1.引言电加热炉广泛应用于金属加热、熔化、回火等工艺过程中,其温度控制对产品质量的稳定性和一致性具有重要影响。
因此,设计一套高效可靠的电加热炉温度控制系统对于提高生产效率和节约能源具有重要意义。
2.系统结构设计电加热炉温度控制系统主要由传感器、控制器、执行器和人机界面组成。
传感器用于实时感知电加热炉内部温度变化,控制器根据传感器数据进行温度控制算法的计算,执行器根据控制器输出的控制信号调节电加热炉的供电功率,人机界面用于显示和操作温度控制系统。
3.温度传感器设计温度传感器一般采用热电偶或热电阻器进行测量,其工作原理基于材料的温度和电阻之间的相关性。
在电加热炉温度控制系统中,传感器应具有快速响应、精确稳定的特性,选择合适的传感器材料和安装位置对于准确测量温度值至关重要。
4.控制器设计电加热炉温度控制系统常用的控制器包括PID控制器和模糊控制器。
PID控制器基于比例、积分和微分三个部分的线性组合,能够根据系统的误差进行相应的调节,具有简单可靠的特点。
模糊控制器基于模糊逻辑推理,能够根据模糊规则进行决策,适应性强。
选择合适的控制器取决于电加热炉的温度调节需求和实际使用场景。
5.执行器设计电加热炉的供电功率调节通常通过调整炉内的电阻或使用可调电压/电流源实现。
执行器的设计应考虑到功率调节的精度和响应时间等因素,确保控制系统能够快速准确地调节电加热炉的供电功率,实现温度控制目标。
6.人机界面设计温度控制系统的人机界面一般包括温度显示、参数设置、报警显示和历史数据查询等功能。
界面设计应简洁明了,易于操作,提供必要的温度控制信息和报警提示,方便操作员进行实时监测和调节。
7.系统安全与优化温度控制系统应考虑到系统的安全性和优化性能。
安全性包括对系统故障的检测和处理,例如传感器异常、控制器故障等;优化性能包括对温度变化的快速响应和精确控制,例如减小温度波动、提高温度稳定性等。
8.结论本文基于电加热炉温度控制系统设计原理和方法进行了综合考虑,针对不同的温度控制要求给出了相应的解决方案。
电加热炉温度控制系统设计
电加热炉温度控制系统设计电加热炉是一种广泛应用于工业生产中的设备,用于加热各种材料或工件。
电加热炉的温度控制是保证炉内温度稳定和精确的关键,对于生产质量和设备寿命有重要影响。
本文将介绍电加热炉温度控制系统的设计。
首先,电加热炉温度控制系统的设计需要考虑以下几个方面:1.温度传感器:选择合适的温度传感器用于测量炉内温度,如热电偶或热电阻。
传感器需要能够对温度进行准确测量,并具有较高的可靠性和耐高温性能。
2.控制算法:根据温度传感器的反馈信号,控制算法计算控制信号以调节炉内加热功率。
最常用的控制算法是PID控制算法,它根据温度偏差、偏差变化率和偏差累积进行控制信号计算,以实现温度的稳定控制。
3.控制器:选择合适的控制器用于执行控制算法并输出控制信号。
控制器需要具有快速的计算能力和稳定的控制性能。
常见的控制器类型包括单片机、PLC和工业控制计算机。
4.加热装置:选择合适的加热装置用于向电加热炉提供能量。
常见的加热装置包括电阻丝、电加热器和感应加热器。
加热装置需要能够根据控制信号调节加热功率,并具有可靠的性能。
5.温度控制系统的安全保护:设计温度控制系统需要考虑安全保护措施,以防止温度过高造成设备事故和人身伤害。
常见的安全保护措施包括过温保护、短路保护和漏电保护等。
在电加热炉温度控制系统的设计过程中,需要进行系统建模和参数调节。
系统建模是将电加热炉、加热装置和温度传感器等组成部分抽象为数学模型,以进行控制算法的设计和仿真验证。
参数调节是根据实际工艺要求对控制算法参数进行调整,以达到良好的控制性能。
最后,电加热炉温度控制系统的设计需要考虑实际应用情况和要求。
不同的工艺要求和生产环境可能需要不同的控制精度和性能需求,因此需要根据实际情况进行设计定制。
在总结上述内容后,设计电加热炉温度控制系统需要考虑温度传感器、控制算法、控制器、加热装置和安全保护等方面。
系统建模和参数调节是设计过程中的关键步骤。
根据实际应用情况和要求进行设计定制,以实现温度的稳定和精确控制。
电加热炉温度控制系统模型建立及控制算法
电加热炉温度控制系统模型建立及控制算法一、电加热炉温度控制系统模型建立1.电加热元件电加热元件是实现加热过程的关键组件,通过电流通过电加热元件时会产生热量,从而提高电加热炉的温度。
通常采用的电加热元件有电阻丝或者电加热器。
2.温度传感器温度传感器用于实时检测电加热炉的温度,常见的温度传感器有热电偶、热敏电阻等。
传感器将温度信号转换为电信号并输出给控制器。
3.控制器控制器是温度控制系统的核心部分,通过对电加热元件的控制,实现对炉温的控制。
常见的控制器有PID控制器、模糊控制器、自适应控制器等。
控制器根据输入的温度信号和设定值进行比较并产生控制信号,然后将控制信号送至电加热元件。
4.反馈装置反馈装置用于实时反馈炉温信息给控制器,以便控制器能够根据反馈信息进行调整,从而实现温度的稳定控制。
典型的反馈装置有温度传感器、红外线测温仪等。
二、控制算法1.PID控制算法PID控制器是最常用的控制算法之一,其通过比例、积分和微分三个部分组合来实现对温度的控制。
PID控制器的控制信号计算公式如下:u(t) = Kp * e(t) + Ki * ∑e(t)dt + Kd * de(t)/dt其中,u(t)为控制信号,Kp、Ki、Kd分别为比例、积分和微分系数,e(t)为偏差,de(t)/dt为偏差的变化率。
2.模糊控制算法模糊控制算法通过模糊集合、模糊规则和模糊推理来实现对温度的控制。
基本的模糊控制算法包含模糊化、模糊规则的建立、模糊推理和解模糊化四个步骤。
3.自适应控制算法自适应控制算法通过对系统模型的实时辨识和参数的自动调整,实现对温度的自适应控制。
自适应控制算法常见的有模型参考自适应控制、最小均方自适应控制等。
三、总结电加热炉温度控制系统模型的建立包括电加热元件、温度传感器、控制器和反馈装置四个主要组成部分。
常用的控制算法有PID控制算法、模糊控制算法和自适应控制算法。
通过合理选择控制系统的组成部分和控制算法,并根据实际需求进行参数调整和优化,可以有效实现对电加热炉温度的稳定控制。
课程设计基于PLC的电加热炉温度控制系统设计
第一章绪论1.1选题背景及意义加热炉是利用电能来产生蒸汽或热水的装置。
因为其效率高、无污染、自动化程度高,稳定性好的优点,冶金、机械、化工等各类工业生产过程中广泛使用电加热炉对温度进行控制。
而传统的加热炉普遍采用继电器控制。
由于继电器控制系统中,线路庞杂,故障查找和排除都相对困难,而且花费大量时间,影响工业生产。
随着计算机技术的发展,传统继电器控制系统势必被PLC所取代。
二十世纪七十年代后期,伴随着微电子技术和计算机技术的快速发展,也使得PLC 具有了计算机的功能,成为了一种以电子计算机为核心的工业控制装置,在温度控制领域可以让控制系统变得更高效,稳定且维护方便。
在过去的几十年里至今,PID控制已在工业控制中得到了广泛的应用。
在工业自动化的三大支柱(PLC、工业机器人、CAD/CAM)中位居第一。
由于其原理简单、使用方便、适应能力强,在工业过程控制中95%甚至以上的控制回路都采用了PID结构。
虽然后来也出现了很多不同新的算法,但PID仍旧是最普遍的规律。
1.2国内外研究现状及发展趋势一些先进国家在二十世纪七十年代后期到八十年代初期就开始研发电热锅炉,中国到八十年代中期才开始起步,对电加热炉的生产过程进行计算机控制的研究。
直到九十年代中期,不少企业才开始应用计算机控制的连续加热炉,可以说发展缓慢,而且对于国内的温度控制器,总体发展水平仍不高,不少企业还相当落后。
与欧美、日本,德国等先进国家相比,其差距较大。
目前我国的产品主要以“点位”控制和常规PID为主,只能处理一些简单的温度控制。
对于一些过程复杂的,时变温度系统的场合往往束手无策。
而相对于一些技术领先的国家,他们生产出了一批能够适应于大惯性、大滞后、过程复杂,参数时变的温度控制系统。
并且普遍采用自适应控制、模糊控制及计算机技术。
近年来,伴随着科学技术的不断快速发展,计算机技术的进步和检测设备及性能的不断提升,人工智能理论的实用化。
因此,高精度、智能化、人性化必然是国内外必然的发展趋势。
电加热炉温度控制系统的设计
电加热炉温度控制系统的设计1. 本文概述随着现代工业的快速发展,电加热炉在许多工业生产领域扮演着至关重要的角色。
电加热炉的温度控制系统,作为其核心部分,直接关系到生产效率和产品质量。
本文旨在设计并实现一种高效、精确的电加热炉温度控制系统,以满足现代工业生产中对温度控制精度和稳定性的高要求。
本文首先对电加热炉温度控制系统的需求进行了详细分析,明确了系统设计的目标和性能指标。
接着,本文对现有的温度控制技术进行了全面的综述,包括传统的PID控制方法以及先进的智能控制策略。
在此基础上,本文提出了一种结合PID控制和模糊逻辑控制的新型温度控制策略,以实现更优的控制效果。
本文还详细阐述了系统的硬件设计和软件实现。
在硬件设计方面,本文选择了适合的传感器、执行器和控制器,并设计了相应的电路和保护措施。
在软件实现方面,本文详细描述了控制算法的实现过程,包括数据采集、处理、控制决策和输出控制信号等环节。
本文通过实验验证了所设计温度控制系统的性能。
实验结果表明,本文提出的温度控制系统能够实现快速、准确的温度控制,且具有较好的鲁棒性和稳定性,能够满足实际工业生产的需求。
本文从理论分析到实际设计,全面探讨了一种适用于电加热炉的温度控制系统的设计方法。
通过结合传统和先进的控制技术,本文提出了一种高效、稳定的温度控制策略,为提高电加热炉的温度控制性能提供了新的思路和实践参考。
2. 电加热炉的基本原理与构造电加热炉作为一种高效、清洁且精准的热能产生设备,其工作原理基于电磁感应和电阻加热两种基本方式,而构造则包括电源系统、加热元件、温控系统、隔热保温结构以及安全防护装置等关键组成部分。
电磁感应加热:在特定类型的电加热炉中,尤其是应用于金属工件加热的场合,电磁感应加热原理占据主导地位。
这种加热方式利用高频交流电通过感应线圈产生交变磁场,当金属工件置于该磁场中时,由于电磁感应现象,会在工件内部产生涡电流(又称涡流)。
涡电流在工件内部形成闭合回路,并依据焦耳定律产生热量,即电流通过电阻时产生的热效应。
电加热炉温度自动控制系统
电加热炉温度自动控制系统一、任务设计并制作一个温度自动控制系统,控制电加热炉的温度在某一温度范围。
系统的示意图如图1所示。
电加热炉顶部置入深度不一的两温度传感器,用于检测加热炉内的温度,炉内温度取其平均值;单片机通过键盘对加热炉的温度进行设定。
根据炉内温度与设定温度值的差别程度,有不同的提示信号。
炉内的温度和当前设定温度通过显示设备实时显示。
图1 温度自动控制系统示意图二、要求⒈基本要求(1)温度可调节范围为60℃~200℃,最小设定分度为1℃。
(2)温度显示功能,分辨率为0.1℃。
(3)当温度达到某一设定值并稳定后,炉内温度的波动控制在±2℃以内。
要求温度调控未达到和达到稳定状态,均给出声或光提示信号。
(4)当设定的调节温差为15℃时, 要求达到稳定状态的调节时间小于等于2分钟,稳定状态下的温度波动在±2℃以内。
⒉发挥部分(1)当温度达到某一设定值并稳定后,、炉内温度的波动控制在±1℃以内。
(2)当设定的调节温差为15℃时, 尽量减少达到稳定状态的调节时间,并要求超调量不超过3℃,稳定状态下的温度波动在±1℃以内。
(3)能记录并实时显示温度调节过程的曲线, 显示的误差绝对值小于2℃。
(4)其他。
三、说明(1)炉内温度检测采用具有温度测量功能的数字万用表(测评时自带)。
(2)当温度达到稳定状态的提示信号出现后立即检测调控的温度值,每次检测时间延续60s,以记录温度波动的最大值。
(3)设计报告正文中应包括系统总体框图、核心电路原理图、主要流程图、主要的测试结果。
完整的电路原理图、重要的源程序用附件给出。
(C3)智能窗系统一、任务对下雨等情况进行自我监测,并自动控制窗户关闭。
当室内烟雾、可燃性气体超过指标时可自动开启窗户,通风换气。
二、要求⒈基本要求1)防盗报警功能如果有人要强行从窗户进入室内,智能窗便会用喇叭播放“捉贼啦,在*单元*号”,连续播放5分钟。
2)防毒报警功能室内的煤气、天然气等可燃气体或烟雾的浓度超标时,智能窗便会报警,并开启窗户,启动排风扇,让有毒气体散发到室外,可有效防止中毒或火灾事故的发生,确保室内空气清新,身体不受伤害。
电加热炉温度控制系统设计方案
电加热炉温度控制系统设计方案1.系统概述2.系统组成2.1温度传感器:用于实时感知炉内温度,并将温度信号转换成电信号进行采集。
2.2控制器:负责对温度信号进行处理和判断,并生成相应的控制信号。
2.3加热功率调节器:根据控制信号调整电加热炉的加热功率。
2.4人机界面:为操作人员提供温度设定、显示和报警等功能。
2.5电源和电路保护装置:为电加热炉提供稳定的电源和安全的电路保护。
3.控制原理电加热炉温度控制系统采用了闭环控制的原理,即通过与实际温度进行比较,调整加热功率来实现温度的控制。
控制器根据实际温度和设定温度之间的偏差,产生相应的控制信号,通过加热功率调节器对电加热炉的加热功率进行调整,使实际温度逐渐接近设定温度,并保持在一定范围内。
4.系统算法4.1温度传感器采集到的温度信号经过模数转换,转换成数字信号输入到控制器。
4.2控制器对传感器采集到的温度信号进行处理和判断,计算出温度偏差。
4.3控制器根据温度偏差通过PID控制算法产生相应的控制信号,控制信号的大小决定了加热功率的调整幅度。
4.4控制信号经过加热功率调节器进行放大和整流,并驱动电加热炉进行相应的加热功率调整。
4.5加热功率调整会导致炉内温度变化,温度变化会反过来影响温度传感器采集到的温度信号,形成一个闭环控制的循环过程。
5.人机界面5.1人机界面通过触摸屏或按钮等形式,提供温度设定、显示和报警等功能。
5.2操作人员可以通过人机界面设置所需的温度设定值。
5.3人机界面会显示当前的实际温度,并根据温度偏差的大小显示相应的报警信号。
5.4人机界面可以设定温度上下限,当温度超出设定范围时自动报警。
6.电源和电路保护装置6.1在电加热炉温度控制系统中,电源提供稳定的电压和电流给电路运行。
6.2为了确保系统的安全运行,在电路中设置过流保护、过压保护、欠压保护等电路保护装置。
6.3当发生过流、过压或欠压等异常情况时,电路保护装置会立即切断电源,以保护电路和设备的安全。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖南理工学院南湖学院课程设计题目:电加热炉温度控制系统设计专业:机械电子工程组名:第三组班级:机电班组成员:彭江林、谢超、薛文熙目录1 意义与要求 (2)1.1 实际意义 (2)1.2 技术要求 (2)2 设计内容及步骤 (2)2.1 方案设计 (2)2.2 详细设计 (3)2.2.1 主要硬件介绍 (3)2.2.2 电路设计方法 (4)2.2.3 绘制流程图 (7)2.2.4 程序设计 (8)2.3 调试和仿真 (8)3 结果分析 (9)4 课程设计心得体会 (10)参考文献 (10)附录............................................................ 10-271 意义与要求1.1 实际意义在现实生活当中,很多场合需要对温度进行智能控制,日常生活中最常见的要算空调和冰箱了,他们都能根据环境实时情况,结合人为的设定,对温度进行智能控制。
工业生产中的电加热炉温度监控系统和培养基的温度监控系统都是计算机控制系统的典型应用。
通过这次课程设计,我们将自己动手设计一个小型的计算机控制系统,目的在于将理论结合实践以加深我们对课本知识的理解。
1.2 技术要求要求利用所学过的知识设计一个温度控制系统,并用软件仿真。
功能要求如下:(1)能够利用温度传感器检测环境中的实时温度;(2)能对所要求的温度进行设定;(3)将传感器检测到得实时温度与设定值相比较,当环境中的温度高于或低于所设定的温度时,系统会自动做出相应的动作来改变这一状况,使系统温度始终保持在设定的温度值。
2 设计内容及步骤2.1 方案设计要想达到技术要求的内容,少不了以下几种器件:单片机、温度传感器、LCD显示屏、直流电动机等。
其中单片机用作主控制器,控制其他器件的工作和处理数据;温度传感器用来检测环境中的实时温度,并将检测值送到单片机中进行数值对比;LCD显示屏用来显示温度、时间的数字值;直流电动机用来表示电加热炉的工作情况,转动表示电加热炉通电加热,停止转动表示电加热炉断电停止加热。
整体思路是这样的:首先我们通过按键设定所需要的温度值,然后利用温度传感器检测电加热炉的实时加热温度,并送至单片机与设定值进行比较。
若检测值小于设定值,则无任何动作,电加热炉继续导通加热;若检测值大于设定值,则单片机控制光电耦合器导通,继电器动作,电加热炉断电停止加热。
一旦炉温低于设定值,单片机又控制光电耦合器断开,继电器开关分离,电加热炉开始导通加热。
这个过程中所设定的温度值和传感器检测到得温度值都要在LCD显示屏上显示出来,以方便操作人员观察。
另外,还可以加上时钟模块,以方便计时。
这个设计思路相对比较简单,利用所学过的知识容易实现,加上光电耦合器用于隔离强电和弱电,比较安全,正好符合我们自动化专业用弱电控制强电的目的,正所谓学以致用。
2.2 详细设计2.2.1 主要硬件介绍1.单片机这里选用AT89C51单片机作为控制系统的处理器。
AT89C51是一种带4K字节闪存可编程可擦除只读存储器的低电压、高性能CMOS 8位微处理器。
2.温度传感器温度传感器有很多种型号,这里我选用DS18B20温度传感器。
数字温度传感器DS18B20具有独特的单总线接口方式,支持多节点,使分布式温度传感器设计大为简化。
测温时无需任何外围原件,可以通过数据线直接供电,具有超低功耗工作方式。
测温范围为-55到+125摄氏度,可直接将温度转换值以16位二进制数字码的方式串行输出,因此特别适合单线多点温度测量系统。
由于传输的是串行数据,可以不需要放大器和A/D转换器,因而这种测温方式大大提高了各种温度测控系统的可靠性,降低了成本,缩小了体积。
3.开关器件由于单片机与电动机之间需要用开关器件连接,并且前者用弱电控制,后者由强电控制,这就尤其需要注意安全问题。
于是我想到了在课本中学过的高性能安全开关器件光电耦合器。
光电耦合器是由一个发光器件和和一个光电转换器件组成,这里所用的光电耦合器OPTOCOUPLER-NPN是由一个发光二极管和一个光敏晶体管所组成。
当发光二极管发光,就会使得光敏晶体管导通,继电器通电动作,将开关吸合,电动机回路断开。
2.2.2 电路设计方法1.显示部分电路显示电路截图如下图所示。
图2.1 显示部分电路图这里我选用LCDLM016L液晶显示屏作为系统的显示器件,如图所示,LCDLM016L采用标准的16脚接口,仿真时隐藏了背光正极和背光负极两个引脚。
它通过D0-D78位数据端来与单片机进行数据和指令传输,这里我们将它与单片机的P0口连接。
在显示屏上显示的内容包括设定的温度值SET、传感器检测到的环境温度SA以及时钟,这个时钟是可以调整的,这样方便工作人员在对系统进行操作时有一个时间概念。
2.温度检测电路温度传感器与单片机的连接情况如下图所示。
图2.2 温度检测电路图温度传感器18B20将检测到的环境实时温度进行A/D转换和放大,然后串行送入单片机P1.7口,便于单片机将此数值与设定的温度值进行比较,然后先做出相应反应。
在仿真时,我们只能通过按18B20上的加减按钮来调节实时温度,是一个模拟的过程。
3.键盘电路键盘电路如下图所示。
图2.3 键盘电路图这里减排设计得比较简单,“MS”键是切换调整对象的,调整对象包括时、分、温度设定值三项,“+”键是向上加调整对象的值,“—”键是向下减调整对象的值,“ON/OFF”键是打开和关闭系统自动调节功能的开关键。
4.电气开关及工作电路电器开关及工作电路如下图所示。
图2.4 电气开关及工作电路图如图所示,光电耦合器1脚接电源,2脚接单片机P3.7脚。
工作过程用以下三个阶段来描述:(1)单片机将温度传感器送入的值与设定值进行比较,若送入值小于设定值,则P3.7脚保持高电平,这样发光二极管不发光,光敏晶体管保持高阻态,继电器也不会工作,电动机和灯泡维持导通,相当于电炉继续加热,指示灯亮;(2)一旦送入值比设定值大,单片机将会控制P3.7脚变为低电平,发光二极管导通发光,光敏晶体管受光照影响导通,继而继电器工作,电磁铁将单刀双掷开关吸向左端,使电动机和灯泡同时停止工作,这就相当于电炉断电,停止加热;(3)电炉短路一段时间后,必然导致炉温降低,而温度传感器DS18B20在不间断地检测炉温,当检测值低于设定值后,单片机又控制P3.7脚恢复高电平,光电耦合器恢复高阻态,继电器断电,单刀双掷开关被弹回右端,电动机和灯泡又开始工作,这相当于电炉从新开始加热。
由于整个程序工程量比较大,我采用模块化设计方法来设计这个程序。
首先定义在后面将会用到的变量,不可能一次定义准确,所以边定义边补充。
然后编写子函数,包括LCM初始化子函数、显示指定坐标的一个字符子函数、ds18b20初始化函数、ds18b20延迟子函数、读取ds18b20当前温度子函数、液晶显示子函数、键盘扫描子函数、设定工作模式子函数、按键加法子函数、按键减法子函数、24C02读写驱动程序、定时器t0中断子函数等子程序,最后是主函数。
2.3 调试和仿真在Keil软件中编写完程序后,编译生成.Hex文件,单片机可以执行.Hex 文件。
在Protues软件中,给单片机加载所生成的.Hex文件,按下运行按钮,系统开始仿真。
系统仿真截图如下图所示。
图2.5系统仿真图(一)上一张是当温度采样值小于设定值,电热炉处于工作状态时的仿真截图。
以下这张是当温度采样值高于设定值后,系统自动做出反应,使电热炉断电停止工作的仿真截图。
图2.6系统仿真图(二)3 结果分析由以上仿真结果可以知道,此次的设计基本成功。
当采样温度低于设定值的时候,系统不会对电热炉做出相应动作,电热炉保持加热。
一旦采样温度高于设定值,系统就会做出反应,使电加热炉断电停止加热。
当温度降下来后,系统又会自动控制电加热炉重新开始加热。
系统的反应速度也是十分精确的,会在很短的时间内作出相应动作。
另外,由于在电路中加入了EPROM24C02,使得该系统具有掉电保护功能,来电后自动恢复正常工作。
除此之外,该系统还有一个比较实用的小功能—电子钟,这样的话工作人员可以利用它准确掌握系统已经工作的时间,也就是说可以把它当做一个定时器来用。
在安全保护方面,该系统也有相当不错的表现,由于使用了光电耦合器和就电磁继电器,将强电部分和弱电部分充分隔离,十分安全。
综合以上分析,该系统的设计十分成功。
4 课程设计心得体会一学期很快就过去了,大学四年的学习也差不多结束了,但对机械电子的学习没有结束,而是才刚刚开始。
说到电加热炉,我们都比较熟悉,在日常生活中我们经常用到,特别是冬天用它来煮火锅。
我们也会发现这样一个问题,一般的电加热炉是没有温度自动控制的,当温度上升到我们需要的程度时,它仍然继续加热,这不仅会影响到加热效果,还会造成电能的浪费。
那么就有必要设计一种能自动调节炉温的系统,把它应用到日常生活中,将会给人们带来极大的方便。
在设计的过程中,我也遇到一些麻烦,比如说怎样来实现电动机回路的自动通断调节、怎样来实现时钟的调整等等,这些问题都令我十分棘手。
通过去图书馆查阅相关资料和上网搜索各硬件的原理以及应用,我最终都一一解决了这些问题。
由于我们是三个同学做同一个题目,在设计过程中,我们遇到困难的时候也经常相互讨论,相互请教,最终一起解决问题,在此也感谢我的“战友”们。
总的来说,此次课程设计的过程比较轻松,从拿到问题到彻底解决问题,这是一个令人振奋并享受的过程。
经过去图书馆大量的查阅书籍,我也学到了很多在课本上没有的知识,收获颇丰。
这段过程让我懂得了一个道理,那就是学生要学的绝对不该仅仅是课本上的东西,有些东西只有走进图书馆,你才可能学习到。
也只有这样,我们才能成为一个见多识广、渊博的人。
参考文献[1] 于海生.微型计算机控制技术.清华大学出版社,2004[2] 谭浩强.C程序设计(第三版). 清华大学出版社,2006[3] 戴焯. 传感与检测技术. 武汉理工大学出版社,2006[4] 张毅刚. 单片机原理及应用. 高等教育出版社,2003[5] 柯节成. 简明电子元件器件手册. 高等教育出版社,2005附录系统的完整程序如下:/***********************************************************电加热炉温度控制系统问题描述:当温控开关打开时,若测得环境温度大于设定温度,则继电器吸合,电加热炉停止工作;若测得环境温度小于设定温度,则继电器释放,电加热炉继续工作。
***********************************************************/#include<reg51.h>#include<intrins.h>#include <absacc.h>#define uchar unsigned char#define uint unsigned int#define BUSY 0x80 //lcd忙检测标志#define DATAPORT P0 //定义P0口为LCD通讯端口#define PLAYE_ADDR XBYTE[0XBFFF] //语音报警地址sbit RED_ALARM=P1^0; //红色指示灯sbit WRITE_ALARM=P1^1; //白色指示灯sbit GREEN_ALARM=P1^2; //绿色指示灯sbit BLUE_ALARM=P1^3;sbit P1_4=P1^4; //时钟调整sbit P1_5=P1^5; //时钟加sbit P1_6=P1^6; //时钟减sbit DQ = P1^7; //定义ds18b20通信端口sbit LCM_RS=P2^0; //数据/命令端sbit LCM_RW=P2^1; //读/写选择端sbit LCM_EN=P2^2;sbit sda=P2^3; //IO口定义sbit scl=P2^4; //LCD使能信号sbit ad_busy=P3^2; //adc中断方式接口sbit RECLED_EOC=P3^5; //ISD1420放音结束查询标志sbit OUT=P3^7;uchar ad_data; //ad采样值存储uchar seconde; //定义并初始化时钟变量uchar minite;uchar hour;uchar mstcnt=0;uchar temp1,temp2,temp; //温度显示变量uchar t,set;uchar K;bit ON_OFF=0;bit outflag;bit write=0;uchar code str0[]={"--- : : --- "};uchar code str1[]={"SET: C SA: . C"};void delay_LCM(uint); //LCD延时子程序void initLCM( void); //LCD初始化子程序void lcd_wait(void); //LCD检测忙子程序void WriteCommandLCM(uchar WCLCM,uchar BusyC); //写指令到ICM子函数void WriteDataLCM(uchar WDLCM); //写数据到LCM子函数void DisplayOneChar(uchar X,uchar Y,uchar DData) //显示指定坐标的一个字符子函数void DisplayListChar(uchar X,uchar Y,uchar code *DData);//显示指定坐标的一串字符子函数void init_timer0(void); //定时器初始化void displayfun1(void);void displayfun2(void);void displayfun3(void);void displayfun4(void);void keyscan(void ); //键盘扫描子程序void set_adj(void);void inc_key(void);void dec_key(void);void delay_18B20(unsigned int i);void Init_DS18B20(void) ;uchar ReadOneChar(void);void WriteOneChar(unsigned char dat);void ReadTemperature(void);void ad0809(void);void playalarm(void);/*********延时K*1ms,12.000mhz**********/void delay_LCM(uint k){uint i,j;for(i=0;i<k;i++){for(j=0;j<60;j++){;}}}/**********写指令到LCM子函数************/void WriteCommandLCM(uchar WCLCM,uchar BusyC){if(BusyC)lcd_wait();DATAPORT=WCLCM;LCM_RS=0; // 选中指令寄存器 LCM_RW=0; // 写模式LCM_EN=1;_nop_();_nop_();_nop_();LCM_EN=0;}/**********写数据到LCM子函数************/void WriteDataLCM(uchar WDLCM){lcd_wait( ); //检测忙信号DATAPORT=WDLCM;LCM_RS=1; // 选中数据寄存器LCM_RW=0; // 写模式LCM_EN=1;_nop_();_nop_();_nop_();LCM_EN=0;}/***********lcm内部等待函数*************/void lcd_wait(void){DATAPORT=0xff;LCM_EN=1;LCM_RS=0;LCM_RW=1;_nop_();while(DATAPORT&BUSY){ LCM_EN=0;_nop_();_nop_();LCM_EN=1;_nop_();_nop_();}LCM_EN=0;}/**********LCM初始化子函数***********/void initLCM( ){DATAPORT=0;delay_LCM(15);WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号delay_LCM(5);WriteCommandLCM(0x38,0);delay_LCM(5);WriteCommandLCM(0x38,0);delay_LCM(5);WriteCommandLCM(0x38,1);//8bit数据传送,2行显示,5*7字型,检测忙信号 WriteCommandLCM(0x08,1); //关闭显示,检测忙信号WriteCommandLCM(0x01,1); //清屏,检测忙信号WriteCommandLCM(0x06,1); //显示光标右移设置,检测忙信号WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号}/****************显示指定坐标的一个字符子函数*************/void DisplayOneChar(uchar X,uchar Y,uchar DData){Y&=1;X&=15;if(Y)X|=0x40; //若y为1(显示第二行),地址码+0X40X|=0x80; //指令码为地址码+0X80WriteCommandLCM(X,0);WriteDataLCM(DData);}/***********显示指定坐标的一串字符子函数***********/void DisplayListChar(uchar X,uchar Y,uchar code *DData){uchar ListLength=0;Y&=0x01;X&=0x0f;while(X<16){DisplayOneChar(X,Y,DData[ListLength]);ListLength++;X++;}}/***********ds18b20延迟子函数(晶振12MHz )*******/void delay_18B20(unsigned int i){while(i--);}/**********ds18b20初始化函数**********************/void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay_18B20(8); //稍做延时DQ = 0; //单片机将DQ拉低delay_18B20(80); //精确延时大于 480usDQ = 1; //拉高总线delay_18B20(14);x=DQ; //稍做延时后如果x=0则初始化成功 x=1则初始化失败 delay_18B20(20);}/***********ds18b20读一个字节**************/unsigned char ReadOneChar(void){uchar i=0;uchar dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay_18B20(4);}return(dat);}/*************ds18b20写一个字节****************/void WriteOneChar(uchar dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay_18B20(5);DQ = 1;dat>>=1;}}/**************读取ds18b20当前温度************/void ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay_18B20(100); // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度delay_18B20(100);a=ReadOneChar(); //读取温度值低位b=ReadOneChar(); //读取温度值高位temp1=b<<4;temp1+=(a&0xf0)>>4;temp2=a&0x0f;temp=((b*256+a)>>4); //当前采集温度值除16得实际温度值}/***************液晶显示子函数1正常显示*****************/void displayfun1(void){WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);DisplayOneChar(3,0,hour/10+0x30); //液晶上显示小时DisplayOneChar(4,0,hour%10+0x30);DisplayOneChar(6,0,minite/10+0x30); //液晶上显示分DisplayOneChar(7,0,minite%10+0x30);DisplayOneChar(9,0,seconde/10+0x30); //液晶上显示秒DisplayOneChar(10,0,seconde%10+0x30);DisplayOneChar(4,1,K/10+0x30); //液晶上显示设定的温度DisplayOneChar(5,1,K%10+0x30);DisplayOneChar(11,1,temp1/10+0x30); //液晶上显示测得的温度DisplayOneChar(12,1,temp1%10+0x30);DisplayOneChar(14,1,temp2/10+0x30);if(ON_OFF==0) //若温控标志为0{DisplayOneChar(14,0,0x4f); // 液晶上显示不控温的标志DisplayOneChar(15,0,0x46);}else{DisplayOneChar(14,0,0x4f); // 液晶上显示控温的标志DisplayOneChar(15,0,0x4e);if(outflag==1)DisplayOneChar(0,0,0x7c);elseDisplayOneChar(0,0,0xef);}}/************液晶显示子函数2***************/void displayfun2(void){WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);DisplayOneChar(6,0,minite/10+0x30);DisplayOneChar(7,0,minite%10+0x30);DisplayOneChar(9,0,seconde/10+0x30);DisplayOneChar(10,0,seconde%10+0x30);DisplayOneChar(4,1,K/10+0x30);DisplayOneChar(5,1,K%10+0x30);DisplayOneChar(11,1,temp1/10+0x30);DisplayOneChar(12,1,temp1%10+0x30);DisplayOneChar(14,1,temp2/10+0x30);WriteCommandLCM(0x0f,1); //显示屏打开,光标显示,闪烁,检测忙信号DisplayOneChar(3,0,hour/10+0x30);DisplayOneChar(4,0,hour%10+0x30);}/**************液晶显示子函数3*****************/void displayfun3(void){WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);DisplayOneChar(3,0,hour/10+0x30);DisplayOneChar(4,0,hour%10+0x30);DisplayOneChar(9,0,seconde/10+0x30);DisplayOneChar(10,0,seconde%10+0x30);DisplayOneChar(4,1,K/10+0x30);DisplayOneChar(5,1,K%10+0x30);DisplayOneChar(11,1,temp1/10+0x30);DisplayOneChar(12,1,temp1%10+0x30);DisplayOneChar(14,1,temp2/10+0x30);WriteCommandLCM(0x0f,1); //显示屏打开,光标显示,闪烁,检测忙信号DisplayOneChar(6,0,minite/10+0x30);DisplayOneChar(7,0,minite%10+0x30);}/**************液晶显示子函数4 *****************/void displayfun4(void){WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);DisplayOneChar(3,0,hour/10+0x30);DisplayOneChar(4,0,hour%10+0x30);DisplayOneChar(6,0,minite/10+0x30);DisplayOneChar(7,0,minite%10+0x30);DisplayOneChar(9,0,seconde/10+0x30);DisplayOneChar(10,0,seconde%10+0x30);DisplayOneChar(11,1,temp1/10+0x30);DisplayOneChar(12,1,temp1%10+0x30);DisplayOneChar(14,1,temp2/10+0x30);WriteCommandLCM(0x0f,1); //显示屏打开,光标显示,闪烁,检测忙信号DisplayOneChar(4,1,K/10+0x30);DisplayOneChar(5,1,K%10+0x30);}/**************键盘扫描子函数******************/void keyscan(void){uchar xx; //局部变量P1=0xff;if(P1!=0xff){delay_LCM(50);if(P1!=0xff){xx=P1;switch(xx) // 根据按键状态,调用不同的子函数{case 0xfe:set_adj(); break;case 0xfd:inc_key(); break;case 0xfb:dec_key(); break;case0xf7:{delay_LCM(150);ON_OFF=!ON_OFF;while(!BLUE_ALARM);} break;default:break;}}}}/**************设定工作模式子函数****************/void set_adj(void){delay_LCM(100);set++;if(set>=4)set=0;while(!RED_ALARM);}/****************按键加法子函数******************/void inc_key(void){delay_LCM(150);switch(set){case 0:if(P1==0xf7){delay_LCM(150);ON_OFF=!ON_OFF;} break;case 1:hour++; if(hour>=23)hour=23; break;case 2:minite++; if(minite>=59)minite=59;break;case 3:K++;if(K>=99)K=99; break;default:break;}while(!WRITE_ALARM);}/****************按键减法子函数*****************/void dec_key(void){delay_LCM(150);switch(set){case 0:if(P1==0xf7){delay_LCM(150);ON_OFF=!ON_OFF;} break;case 1:hour--; if(hour<=0)hour=0; break;case 2:minite--;if(minite<=0)minite=0;break;case 3:K--;if(K<=1)K=1; break;default:break;}while(!GREEN_ALARM);}/************24C02读写驱动程序**************/void delay1(uchar x){uint i;for(i=0;i<x;i++);}void flash(){ ; ; }void x24c02_init() //24c02初始化子程序{scl=1;flash();sda=1;flash();}void start() //启动I2C总线{sda=1;flash();scl=1;flash();sda=0;flash();scl=0;flash();}void stop() //停止I2C总线{sda=0;flash();scl=1;flash();sda=1;flash();}void writex(uchar j) //写一个字节{uchar i,temp;temp=j;for (i=0;i<8;i++){temp=temp<<1;scl=0;flash();sda=CY;flash();scl=1;flash();}scl=0;flash();sda=1;flash();}uchar readx() //读一个字节{uchar i,j,k=0;scl=0;flash();sda=1;for (i=0;i<8;i++){flash();scl=1;flash();if (sda==1) j=1;else j=0;k=(k<<1)|j;scl=0;}flash();return(k);}void clock() //I2C总线时钟{uchar i=0;scl=1;flash();while ((sda==1)&&(i<255))i++;scl=0;flash();}////////从24c02的地址address中读取一个字节数据///// uchar x24c02_read(uchar address){uchar i;start();writex(0xa0);clock();writex(address);clock();start();writex(0xa1);clock();i=readx();stop();delay1(10);return(i);}//////向24c02的address地址中写入一字节数据info///// void x24c02_write(uchar address,uchar info){EA=0;start();writex(0xa0);clock();writex(address);clock();writex(info);clock();stop();EA=1;delay1(50);}/***************定时器t0初始化*******************/ void init_timer0(void){TMOD=0x01; //time0为定时器,方式1 TH0=0x3c; //预置计数初值TL0=0xb0;EA=1;ET0=1;TR0=1;}/***********定时器t0中断子函数**************/void timer0(void) interrupt 1 using 0 //定时器0方式1,50ms中断一次{TH0=0x3c;TL0=0xb0;mstcnt++;if(mstcnt>=20 ) {seconde++; write=1; mstcnt=0; }if(seconde>=60) {minite++; seconde=0;}if(minite>=60 ) {hour++; minite=0; }if(hour>=24 ) {hour=0;}keyscan( ); //按键扫描}/***********the main funtion*************/void main(void){P1=0xff; //初始化p1口,全设为1 x24c02_init(); //初始化24C02K=x24c02_read(2); //读出保存的数据赋于K seconde=x24c02_read(4);minite=x24c02_read(6);hour=x24c02_read(8);delay_LCM(500); //延时500ms启动initLCM( ); //LCD初始化init_timer0( ); //时钟定时器0初始化Init_DS18B20( ) ; //DS18B20初始化DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);while (1){keyscan(); //按键扫描ReadTemperature(); //温度采集switch(set) //LCD根据工作模式显示{case 0:displayfun1();delay_LCM(1000);break; //正常工作显示case 1:displayfun2();delay_LCM(1000);break; //调整时显示case 2:displayfun3();delay_LCM(1000);break; //调整分显示case 3:displayfun4();delay_LCM(1000);break; //温度设定default:break;}keyscan( ); //相当于延时if(ON_OFF==1) //若温控标志位1,控制LAMP动作{if(temp1>=K+1){outflag=1;OUT=0;}if(temp1<K){delay_LCM(1000);if(temp1<K){outflag=0;OUT=1;}}}else{outflag=0;OUT=1;}if(write==1) //判断计时器是否计时一秒{write=0; //清零x24c02_write(8,hour); //在24c02的地址2中写入数据hour delay_LCM(11);x24c02_write(6,minite);delay_LCM(11);x24c02_write(4,seconde);delay_LCM(11);x24c02_write(2,K);}}}。