锅炉液位控制设计 源程序
- 格式:doc
- 大小:87.00 KB
- 文档页数:8
第一章 绪论汽包水位是锅炉安全运行的指标之一,锅炉汽包水位的测量、控制和保护系统的合理配置是保证锅炉安全运行的重要措施。
过高的水位会影响汽水分离装置的汽水分离效果,使锅炉出口的饱和蒸汽的湿度增大,含盐量增多,造成过热器和汽轮机通流部分结垢,从而引起过热器管壁超温甚至爆管。
当水位严重过高时,还将使汽轮机产生水冲击, 引起破坏性事故。
水位过低,会影响锅炉的水循环安全,造成局部水冷壁管过热,严重缺水时造成锅炉爆炸。
因此,准确测量和保持汽包水位在规定的范围内有其重要意义。
我在本设计中,将通过单片机的控制,使锅炉汽包水位,维持在正常的标准下,在水位超过上限或下限的时候,能够及时报警并采取相应措施。
在水位超过上限或下限的时候,能够及时报警并采取相应措施。
第二章 工作原理与方案论证2.1工作原理 图2.1所示即为锅炉汽包水位自动控制系统示意图。
当系统受到扰动后,被控变量(液位)发生变化,通过检测仪表得到其测量值h 。
在自动控制装置(液位控制器LC )中,将h与设定值h 0比较,得到偏差,经过运算后,发出控制信号算后,发出控制信号,这一信号作用于执行器(在此为控制阀,)改变给水量,给水量,以克服扰动的影响,以克服扰动的影响,以克服扰动的影响,使被控使被控变量回到设定值。
这样就完成了所要求的控制任务。
这些自动控制装置和被控工艺对象组成了一个自动控制系统。
被控工艺对象组成了一个自动控制系统。
2.2方案论证单冲量水位控制系统直接用水位信号与给定值信号相比较,控制器根据该偏差的正负与大小,与大小,输出开关给水调节阀门的信号,输出开关给水调节阀门的信号,输出开关给水调节阀门的信号,但这种系统具有严重的弊病:但这种系统具有严重的弊病:但这种系统具有严重的弊病:在蒸汽流量忽在蒸汽流量忽然增加时,因给水流量小于蒸发量,水位应当下降。
但是由于炉筒内的贮汽减少,内部压力忽降,从而使水面下的炉筒容积扩大,并加速汽化,由于水面下容积扩大,使水位不但不下降,反而迅速上升,产生“虚假水位”现象。
工控网实习:液位控制系统设计设计题目:液位控制系统。
1.控制要求:1)整个系统设置两个带限位的电动阀门,一个控制进水管进水,一个控制出水管出水。
2)每个阀门的操作方式均为手动与自动两种。
由实验箱中的开关作为转换开关来决定操作方式。
转换开关选择到手动模式时,由实验箱来操作阀门,设开阀/关阀/停止/故障复位按钮,阀门的限位信号由实验箱的开关模拟,阀门的正向/反向运行指示以及故障指示由实验箱中的LED灯模拟。
转换开关选择到自动模式时,由程序根据液位的高度来自动控制。
3)控制过程:开启进水阀门进水,液位增加,关闭进水阀门停止进水。
开启出水阀门出水,液位减少,关闭出水阀门停止出水。
液位高度的变化由实验箱上电位器调节电压来模拟,电压0~5V模拟液位高度0~5M。
液位设置上限值4M及下限值1M,超过4M进行上限报警,并需要关闭进水阀门同时打开出水阀门,确保液位能保持为正常的高度;低于4M进行下限报警,并需要关闭出水阀门同时打开进水阀门,确保液位能保持为正常的高度。
报警指示由实验箱中的LED灯来显示,设置报警确认按钮,出现上限或下限报警,报警指示灯以1Hz的频率闪烁,直至报警确认按钮按下,按下报警确认按钮后,根据液位的实际高度进行显示,若依旧处于报警状态,则对应的指示灯常亮,若故障已经消除,则对应的指示灯熄灭。
4)(选作)设计上位监控界面,通过HMI界面监控整个液位控制系统,并设置液位高度的趋势图及报警状态的记录。
2.硬件选型:1)采用西门子S7-300系列PLC2)电源模块:PS 307 5A(序列号:6ES7 307-1EA00-0AA0)3)CPU模块:CPU 315-2DP (序列号:6ES7 315-2AG10-0AB0,版本号:V2.6)4)以太网通讯模块:CP 343-1(序列号:6GK7 343-1EX30-0XE0,版本号:V2.0)5)DI模块:16点24V DI模块(序列号:6ES7 321-1BH02-0AA0)6)DO模块:16点24V DO模块(序列号:6ES7 322-1BH01-0AA0)7)AI/AO模块:4点AI/2点AO模块(序列号:6ES7 334-0CE01-0AA0)3.网络要求:1)若有以太网通讯模块,S7-300 PLC与上位监控计算机采用以太网连接,PLC的IP地址为:192.168.0.102)S7-300 PLC作为主站连接至Profibus-DP网络中,网络地址为2,DP网络的传输速率为1.5Mbps。
锅炉液位控制系统一.锅炉液位控制系统原理概述锅炉是电厂和化工厂里常见的生产蒸汽的设备。
为了保证锅炉的正常运行,需要维持锅炉液位为正常标准值。
锅炉液位过低,易烧干锅而发生严重事故;锅炉液位过高,则易使蒸汽带水并有溢出危险。
因此,必须通过调节器严格控制锅炉液位的高低,以保证锅炉正常安全的运行。
常见的锅炉液位控制系统示意图如图1-1所示。
图1-1锅炉液位控制系统示意图当蒸汽的耗气量与锅炉进水量相等时,液位保持为正常标准值。
当锅炉的给水量不变,而蒸汽负荷突然增加或减少时,引起锅炉液位发生变化。
不论出现哪种情况,只要实际液位高度与正常给定液位之间出现了偏差,调节器均应立即进行控制,去开打或关小给水阀门,使液位恢复到给定值。
二.一阶单回路控制系统分析单回路系统是由四个基本环节组成,即被控对象(或被控过程)、测量变送装置、调节器和执行机构(本系统为调节阀)。
有时为了分析方便起见,往往把执行机构、被控对象和测量变送装置合在一起,称之为广义对象。
这样系统就归结为调节器和广义对象两部分。
然而,一般来说,还是把系统看成上述四个基本环节所组成。
假定有如3-3图所示的水槽,流入量和流出量分别为q1和q2,我们的任务是维持水槽的液位不变。
为了控制液位,就要选择相应的变送器、控制器、和控制阀,并按图3-4所示的原理图构成单回路控制系统。
图3-3 水槽示意图图3-4水槽液位控制系统上图中表示变送器,LC表示液位控制器,sp代表控制器的给定值。
由图3-4我们可以得出单回路控制系统方块图(原理图)如图3-5所示:图3-5单回路控制系统方块图图3-5是锅炉液位控制系统的方框图。
图中,锅炉为被控对象,其输出为被控参数液位,作用于锅炉上的扰动是指给水压力变化的产生的内外扰动;测量变送器为差压变送器,用来测量锅炉液位,并转变为一定的信号输至调节器;调节器是锅炉液位控制系统中的调节器,有电动,气动等形式,在调节器内将测量液位与给定液位进行比较,得出偏差值,然后根据偏差情况按一定的控制律[如比例(P),比例-积分(PI),比例-积分-微分(PID)等]发出相应的输出信号去推动调节阀动作;调节阀在控制系统中执行元件作用,根据控制信号对锅炉的进水量进行调节,阀门的运动取决于阀门的特性,有的阀门与输入信号成正比关系,有的阀门与输入信号成某种曲线关系变化。
过程控制仪表课程设计题目锅炉汽包水位控制系统指导教师高飞燕班级自动化071学号20074460107学生姓名丁滔滔2011年1月5号附录:仪表配接图 (20)锅炉汽包水位控制系统1.系统简介:控制系统一般由以下几部分组成图1 自动控制系统简易图锅炉水位系统如下图:图2 单冲量控制系统原理图及方框图其单位阶跃响应图如下:图3 蒸汽流量干扰下水位阶跃曲线通过电容式液位计将检测来的液位信号变送给成标准信号,再输送给控制器,调节器再通过执行机构和阀来控制进水量,从而达到自动控制锅炉水位。
2.锅炉控制系统:2.1锅炉:锅炉是火力发电厂中主要设备之一。
它的作用是使燃料在炉膛中燃烧放热,井将热量传给工质,以产生一定压力和温度的蒸汽,供汽轮发电机组发电。
电厂锅炉与其他行业所用锅炉相比,具有容量大、参数高、结构复杂、自动化程度高等特点。
2.2过热器和再热器:蒸汽过热器是锅炉的重要组成部分,它的作用是将饱和蒸汽加热成为具有一定温度的过热蒸汽,并要求在锅炉负荷或其他工况变动时,保证过热气温的波动处在允许范围内。
提高蒸汽初压和初温可提高电厂循环热效率,但蒸汽初温的进一步提高受到金属材料耐热性能的限制。
蒸汽初压的提高随可提高循环热效率,但过热蒸汽压力的进一步提高受到汽轮机排气湿度的限制,因此为了提高循环热效率及降低排气湿度,可采用再热器。
通常,再热蒸汽压力为过热蒸汽压力的20%左右,再热蒸汽温度与过热蒸汽温度相近。
过热器和再热器内流动的为高温蒸汽,其传热性能差,而且过热器和再热器又位于高烟温区,所以管壁温度较高。
如何使过热器和再热器管能长期安全工作是过热器和再热器设计和运行中的重要问题。
在过热器和再热器的设计及运行中,应注意下列问题:⑴运行中应保持汽温的稳定,汽温波动不应超过±(5~10)℃。
⑵过热器和再热器要有可靠的调温手段,使运行工况在一定范围内变化时能维持额定的汽温。
⑶尽量防止和减少平行管子之间的偏差。
2.3省煤器和空气预热器:省煤器和空气预热器通常布置在锅炉对流烟道的尾部,进入这些受热面的烟气温度已较低,因此常把这两个受热面称为尾部受热面或低温受热面。
课前准备:多媒体课件制作、演示实验设备调试、以4人/小组进行分组。
一、课程导引——控制系统调试的意义过程控制系统在投运前的一项重要工作就是系统调试,经过调试使控制器的PID参数得到整定,从而使控制系统在稳、准、快的三方面综合指标得到优化。
系统调试方法有多种,并且因系统结构的不同、工艺条件不同而使调试方法也有较大差别,这就要求我们认真学会基本的调试原则,同时还需多实践,不断积累经验,达到熟能生巧。
二、调试知识——控制系统品质指标和调试方法(35分钟)(一)控制系统品质指标要对控制系统实施调试,首先得清楚控制系统的品质指标评价方法,而闭环控制系统的品质指标主要由过渡过程性能反映。
1、闭环控制系统的过渡过程一个处于平衡状态的自动控制系统在受到扰动作用后,被控变量发生变化;与此同时。
控制系统的控制作用将被控变量重新稳定下来,并力图使其回到设定值或设定值附近。
一个控制系统在外界干扰或给定干扰作用下,从原有稳定状态过渡到新的稳定状态的整个过程,称为控制系统的过渡过程。
控制系统的过渡过程是衡量控制系统品质优劣的重要依据。
在阶跃干扰作用下,控制系统的过渡过程有如图1所示的几种形式。
图1 (b)为发散振荡过程,它表明这个控制系统在受到阶跃干扰作用后,非但不能使被控变量回到设定值,反而使它越来越剧烈地振荡起来。
显然,这类过渡过程的控制系统是不能满足生产要求的。
图1 (c)为等幅振荡过程,它表示系统受到阶跃干扰后,被控变量将作振幅恒定的振荡而不能稳下来。
因此,除了简单的位式控制外,这类过渡过程一般也是不允许的。
图1 (d)所示为衰减振荡过程,它表明被控变量经过一段时间的衰减振荡后,最终能重新稳定下来。
图1 (e)所示为非周期衰减过程,它表明被控变量最终也能稳定下来,但由于被控变量达到新的稳定值的过程太缓慢,而且被控变量长期偏离设定值一边,一般情况下工艺上也是不允许的,而只有工艺允许被控变量不能振荡时才采用。
2、过渡过程的质量指标从以上几种过渡过程情况可知,一个合格的、稳定的控制系统,当受到外界干扰以后,被控变量的变化应是一条衰减的曲线。
基于单片机的锅炉液位控制系统设计摘要:介绍了用单片机进行锅炉液位控制工作原理、硬件设计和软件设计。
装置主要由80C51、四片电位器式传感器、逐次逼近式A/D转换器ADC0809、双向可控硅驱动电路MOC3041和双向可控硅TLC336A等组成;能够可靠地完成锅炉液位自动控制。
关键词:液位传感器单片机可控硅驱动电路Abstract: In this paper, the principles and design of hardware and software of controlling automatically liquid level of boiler by the Single-Chip Microcomputer 80C51 are described. It chiefly consists of the Single-Chip Microcomputer 80C51, four pieces of electric potential trasducer, analog/digital converter of successive approach, two-way SCR TLC336A and two-way SCR drive circuit MOC3041.This apparatus can accomplish reliably the controlling automatically liquid level of boiler.Key word: Liquid Level trasducer Single-ChipMicrocomputerSCR(Silicon Control Rectifier) SCR drive circuit1 引言锅炉液位控制的稳定与否,是关系到生产安全的重要因素之一。
液位太高,易使供出的蒸汽带水,高温高速的蒸汽水珠会损坏后工段的工艺设备;而液位太低,有造成锅炉烧干的危险。
过程控制系统实验报告专业 xxxxxx班级 xxxxxxxxx学生姓名 xxxxxx学号 xxxxxxxx锅炉汽包水位控制系统设计一、控制要求设计一个汽包水位控制系统,使汽包水位维持在90CM,稳态误差±0,5CM,以满足生产要求。
二、完成的主要任务1.掌控锅炉生产蒸汽工及其工作流程2.对被控对象进行特性分析,画出汽包水位控制系统方框图和流程图3.选择被控参数和被控变量,说明其选择依据4.设计控制系统方案,如何选择检测仪表,说明其选择原则和仪表性能指标5.说明单回路控制系统4个环节的工作形式对控制过程6.对控制进行PID控制说明其参数整定理论7.对锅炉汽包水位进行simulink仿真,对参数进行整定,其仿真图要满足动态性能指标8.总结实验课程设计的经验和收获过程控制系统实验报告............................... - 0 -第一章锅炉汽包水位控制系统的组成原理............ - 3 -1.1 概述............................................ - 3 -1.2 锅炉生产蒸汽工艺简述 ............................ - 4 -1.3 锅炉生产蒸汽工作流程 ............................ - 4 - 第二章锅炉汽包水位控制系统的方案设计............... - 5 -2.1 对被控对象进行特性分析 ............................ - 5 -2.2汽包水位控制系统方框图和流程图..................... - 6 -2.2.1 液位控制系统的方框图.................................. - 6 -2.2.2 液位控制系统的方案图.................................. - 6 -2.3选择被控参数和被控变量............................. - 7 -2.4选择检测仪表,说明其选择原则和仪表性能指标 ......... - 7 -2.4.1传感器、变送器选择 ..................................... - 8 -2.4.2执行器的选择........................................... - 8 -2.4.3关于给水调节阀的气开气关的选择。
锅炉液位控制完整系统原理概述一、引言锅炉液位控制是锅炉运行中非常重要的一个环节,液位控制的稳定与否直接影响到锅炉的安全运行和能效。
本文将对锅炉液位控制的完整系统原理进行概述,包括液位测量、液位控制、液位保护等方面的内容。
二、液位测量液位测量是锅炉液位控制的基础,常用的液位测量方法有以下几种:1. 磁翻板液位计:通过浮子的上下浮动来实现液位的测量,浮子上的磁性翻板会随着液位的变化而翻转,通过磁力作用在指示器上显示液位高低。
2. 高频电容液位计:利用电容的原理来测量液位,通过电容传感器和电容变送器将液位信号转化为标准的电流或电压信号。
3. 微波液位计:采用微波的传输特性来测量液位,通过发射器和接收器之间的微波信号的传播时间来确定液位高低。
三、液位控制液位控制是为了保持锅炉液位在设定范围内,常用的液位控制方法有以下几种:1. 水位比例控制:根据锅炉负荷的变化,通过调节给水阀的开度来控制锅炉液位,使其保持在设定的比例范围内。
2. 水位偏差控制:通过调节给水阀的开度,使锅炉液位与设定值之间的偏差保持在一定范围内,以实现液位的控制。
3. 水位PID控制:采用PID控制算法,通过对液位偏差、变化率和积分值进行综合调节,实现锅炉液位的精确控制。
四、液位保护液位保护是为了防止锅炉液位过低或过高而导致的安全事故,常用的液位保护方法有以下几种:1. 低液位保护:当锅炉液位低于设定值时,自动停止给水,避免锅炉缺水运行,同时发出警报信号。
2. 高液位保护:当锅炉液位高于设定值时,自动停止给水,避免锅炉溢水运行,同时发出警报信号。
3. 过低液位保护:当锅炉液位过低时,自动停止燃烧器的工作,避免燃烧器在缺水状态下继续燃烧,造成锅炉事故。
4. 过高液位保护:当锅炉液位过高时,自动停止给水和燃烧器的工作,避免锅炉溢水和燃烧器在过高液位下继续燃烧,造成锅炉事故。
五、总结锅炉液位控制完整系统的原理概述了液位测量、液位控制和液位保护等方面的内容。
基于PLC的锅炉控制系统的设计本文介绍基于PLC的锅炉控制系统的设计的背景和目的。
锅炉控制系统是基于PLC(可编程逻辑控制器)的设计,采用了分布式控制策略。
整体架构包括以下几个组成部分:1.控制器控制器是锅炉控制系统的核心部分,由PLC实现。
PLC具备高速计算能力和强大的输入输出功能,可以对各个设备进行监控和控制。
它接收来自传感器的输入信号,并根据预设的逻辑和算法进行实时处理,向执行器发送输出信号以控制设备运行。
2.传感器传感器负责将锅炉系统的各个参数转化为电信号,并传输给PLC进行处理。
常见的传感器包括温度传感器、压力传感器、流量传感器等。
3.执行器执行器根据PLC的控制信号来执行相应的操作,如调节燃料供给、控制排放阀等。
它们与PLC之间通过信号线或总线进行连接。
4.人机界面人机界面提供给操作员与锅炉控制系统进行交互的界面。
它可以是触摸屏、计算机软件等形式,用于监视系统运行状态、设定参数以及显示报警信息等。
5.通信模块通信模块用于实现锅炉控制系统与外部设备的数据传输和通信。
它可以连接到局域网或远程服务器,实现与其他系统或监控中心的数据交互。
6.电源供应为了保证锅炉控制系统的稳定运行,需要提供可靠的电源供应。
这可以通过备用电源或UPS(不间断电源)来实现。
综上所述,基于PLC的锅炉控制系统采用分布式控制策略,通过控制器、传感器、执行器、人机界面、通信模块和电源供应等组成部分协同工作,实现对锅炉设备的监控和控制。
本文介绍基于PLC的锅炉控制系统所采用的控制策略和算法。
控制策略是指通过采取不同的控制方法和算法,在锅炉运行中实现温度、压力、流量等参数的稳定控制。
基于PLC的锅炉控制系统采用了以下主要的控制策略:PID控制:PID(比例、积分、微分)控制是一种常用的控制方法。
它通过根据控制对象的偏差来调节控制器的输出,使得偏差逐渐趋向于零,从而实现控制目标。
在锅炉控制系统中,PID控制常用于调节温度、压力和流量等参数。
1.控制要求控制系统可以根据生产的需要将液位分为多段来设定,并分段显示,当液位为最低限时自动启动料泵加液,液位到达设定值时发出声光报警,并停泵;操作人员可通过确认按钮解除音响报警信号,闪烁灯光转平光;系统具有手动/自动两种控制方式,并设有试验功能。
2.PLC选型目前在国内市场上有从美国、德国、日本等国引进的多种系列PLC,国内也有许多厂家组装、开发数十种PLC,故PLC系列标准不一,功能参差不齐,价格悬殊。
在此情况下,PLC的选择应着重考虑PLC的性能价格比,选择可靠性高,功能相当,负载能力合适,经济实惠的PLC。
本文介绍以四段液位控制对象为例,据对多种因素的分析比较及监控系统输入、输出点数的要求,选用日本立石(OMRON)公司C20P型PLC。
3.系统硬件配置为实现液位的手动/自动控制,需要输入口12点,输出口8点,选用C20P 20点I/O单元的PLC,输入光电隔离,输出继电器隔离,负载能力强;液位检测采用干簧管传感器,手动/自动转换、运行/试验转换和液位设定采用双位旋钮,手动启泵、停泵和确认、试验采用常开按钮;输出选用电子音响报警器和24V直流指示灯、继电器。
参见图一系统硬件配置图。
图一系统硬件配置图为节省输入口数量,节省投资,本系统运行/试验功能的转换采用了对I/O模块接线的优化,使PLC输入模块中1个输入节点起到2个输入节点的作用,完成PLC工作在两种方式下的I/O功能。
参见图二I/O模块接线的优化。
图二I/O模块接线的优化来4.系统软件设计4.1 控制程序流程图图三系统流程图4.2 编程说明①本系统为液位的双位控制系统。
液位可分四段设定和显示,在最低液位时自动启泵,当液位到达设定值时自动停泵。
②采用IL/ILC分支指令,通过0008旋钮实现手动/自动两种功能的选择,当0008旋钮闭合时,自动指示灯亮,系统执行IL/ILC分支内程序,完成自动监控;当0008旋钮打开时,手动指示灯亮,系统执行分支外程序,通过0010、0011旋钮实现手动启泵、停泵。
# include # define uchar unsigned char # define uint unsigned int # define LED_ON 0x01 sbit dsio=P1^7; sbit temp_add=P1^0; sbit temp_sub=P1^1; sbit up1_temp=P1^2; sbit down_temp=P1^3; sbit tenbit=P1^5; sbit sigbit=P1^6; uchar temp_value,temp1_value; uchar aa,bb,cc,flag; uchar code table[]= { 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, 0xbf,0x86,0xdb,0xcf,0xe6, 0xed,0xfd,0x87,0xff,0xef, }; uint tempr=25; void delay_18b20(uchar j) { while (j--); } bit readbit() { uchar i; bit dat; dsio=0;i++; dsio=1;i++;i++; dat=dsio; delay_18b20(8); return dat; } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } uchar output() { uchar i,j,dat=0; for(i=8;i>0;i--) { j=readbit(); dat=(j<<7)|(dat>>1); } return dat; }
void reset_18b20() { dsio=0; delay_18b20(90); dsio=1; delay_18b20(4); } void tmpre(void) { while(dsio); while(~dsio); delay_18b20(4); }
/***********主程序*************/ void Tdelay(uint t) { uint i; while(t--) { for(i=0;i<125;i++); } }
void input(uchar dat) { uint i,j; bit testb; for(i=8;i>0;i--) { testb=dat&0x01; dat=dat>>1; if(testb) { dsio=0; j++;j++; dsio=1; delay_18b20(4); } else { dsio=0; delay_18b20(4); dsio=1; j++;j++; } } } uchar read_Temp() { uchar a=0,b=0,y1,y2,y3; reset_18b20(); tmpre(); delay_18b20(10); input(0xcc); input(0xbe); delay_18b20(10); a=output(); b=output(); temp_value=a&0x0f; if((b&0x80)==0x80) { b=~b;a=~a+1; y1=a>>4; y2=b<<4; y3=y1|y2; flag=0; } else { y1=a>>4; y2=b<<4; y3=y1|y2; flag=1; } return y3; } void display_18b20() { uchar a,b; aa=read_Temp()/10; bb=read_Temp()%10; cc=temp_value*625/1000%10; if(flag==0) { P2=0xbf; P0=0x40; Tdelay(1); P2=0xff; } else if(flag==1) { P2=0xbf; P0=0x00; Tdelay(1); P2=0xff; } P2=0x7f; P0=table[aa]; Tdelay(1); P2=0xff; P3=0xfe; P0=table[bb+10]; Tdelay(1); P3=0xff; P3=0xfd; P0=table[cc]; Tdelay(1); P3=0xff; P3=0xfb; P0=0x39; Tdelay(1); P3=0xff; if(tempr>aa*10+bb) { down_temp=0x00; up1_temp=0x00; } else if(tempr{ down_temp=0x00; up1_temp=0x01; } else { down_temp=0x01; up1_temp=0x01; } a=tempr/10; b=tempr%10; tenbit=0; sigbit=0; P0=table[a]; Tdelay(1); tenbit=0; sigbit=1; P0=table[b]; Tdelay(1); tenbit=1; sigbit=1; }
void tmstart() { reset_18b20(); tmpre(); Tdelay(1); input(0xcc); input(0x44); } void init() { EA=1; tmstart(); delay(450); } void process(void) { if(temp_add==0&&temp_sub==1&&tempr<99) { display_18b20(); display_18b20(); display_18b20(); display_18b20(); display_18b20(); if(temp_add==0) tempr++; } if(temp_add==1&&temp_sub==0&&tempr>0) { display_18b20(); display_18b20(); display_18b20(); display_18b20(); display_18b20(); if(temp_sub==0) tempr--; } } void main() { init(); while(1) { tmstart(); Tdelay(1); display_18b20(); process(); } }# include # define uchar unsigned char # define uint unsigned int # define LED_ON 0x01 sbit dsio=P1^7; sbit temp_add=P1^0; sbit temp_sub=P1^1; sbit up1_temp=P1^2; sbit down_temp=P1^3; sbit tenbit=P1^5; sbit sigbit=P1^6; uchar temp_value,temp1_value; uchar aa,bb,cc,flag; uchar code table[]= { 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, 0xbf,0x86,0xdb,0xcf,0xe6, 0xed,0xfd,0x87,0xff,0xef, }; uint tempr=25; void delay_18b20(uchar j) { while (j--); } bit readbit() { uchar i; bit dat; dsio=0;i++; dsio=1;i++;i++; dat=dsio; delay_18b20(8); return dat; } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }
uchar output() { uchar i,j,dat=0; for(i=8;i>0;i--) { j=readbit(); dat=(j<<7)|(dat>>1); } return dat; } void reset_18b20() { dsio=0; delay_18b20(90); dsio=1; delay_18b20(4); } void tmpre(void) { while(dsio); while(~dsio); delay_18b20(4); } /***********主程序*************/ void Tdelay(uint t) { uint i; while(t--) { for(i=0;i<125;i++); } } void input(uchar dat) { uint i,j; bit testb; for(i=8;i>0;i--) { testb=dat&0x01; dat=dat>>1; if(testb) { dsio=0; j++;j++; dsio=1; delay_18b20(4); } else { dsio=0; delay_18b20(4); dsio=1; j++;j++; } } }
uchar read_Temp() { uchar a=0,b=0,y1,y2,y3; reset_18b20(); tmpre(); delay_18b20(10); input(0xcc); input(0xbe); delay_18b20(10); a=output(); b=output(); temp_value=a&0x0f; if((b&0x80)==0x80) { b=~b;a=~a+1; y1=a>>4; y2=b<<4; y3=y1|y2; flag=0; } else { y1=a>>4; y2=b<<4; y3=y1|y2; flag=1; } return y3; } void display_18b20() { uchar a,b; aa=read_Temp()/10; bb=read_Temp()%10; cc=temp_value*625/1000%10; if(flag==0) { P2=0xbf; P0=0x40; Tdelay(1); P2=0xff; } else if(flag==1) { P2=0xbf;