版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于单片机的温度及压力智能限制系统设计摘要本文设计了以AT89C51单片机为核心的温度和压力限制系统的工作原理以及设计方法。温度信号由温度传感器PT100采集,再由变送器将信号变换为0-5V的信号给PCF8591芯片。单片机最终通过IIC总线将模拟量信号读回来或者发送出去。压力信号也是由压力传感器采集回来,再由变送器变换为0-5V的电压信号给PCF8591芯片。PCF8591芯片是支持4路模拟量输入,1路模拟量输出的8位芯片,并且支持IIC总线,最大可以同时接8个同样的芯片。单片机将采集回来的信号经过计算与处理后将温度和压力值显示在LCD1602液晶上,设计中介绍了限制系统的硬件电路,包括:温度、压力检测电路、温度限制电路、压力限制电路、电源电路、报警电路、显示电路、单片机最小系统电路、按键电路和其他一些单片机的接口电路。本设计中还介绍了软件程序编写部分,都采纳模块化的结构编程。软件程序部分主要包括:主程序、显示程序、温度和压力采集子程序、按键子程序、限制输出子程序等。关键词:A/D转换;单片机;温度及压力采集;智能限制AbstractInthispaper,thedesignoftheworkingprincipleanddesigningmethodofAT89C51microcontrollerasthecoretothetemperatureandpressurecontrolsystem.TemperaturesignalfromthetemperaturesensorPT100acquisition,andthenbythetransmittersignalintothe0-5VsignaltothePCF8591chip.SCMthroughIICbustoanalogsignalsreadbackorsendout.Thepressuresignalisreturnedfromthepressuresensor,thetransmitterisconvertedtothe0-5VvoltagesignaltothePCF8591chip.ThePCF8591chipissupportedby4analoginput,8bitchip1analogoutput,andsupportforIICbus,themaximumcanconnect8ofthesamechip.SCMwillthecollectedsignalsthroughthecalculationandprocessingafterthetemperatureandpressurevaluesaredisplayedintheLCD1602crystal,thedesignintroducesthehardwarecircuit,controlsystemincludes:temperature,pressuredetectingcircuit,temperaturecontrolcircuit,pressurecontrolcircuit,powersupplycircuit,alarmcircuit,displaycircuit,MCUminimumsystemcircuit,akeycircuitandsomeothermcu.Thisdesignalsodescribesthesoftwareprogramming,theprogrammingmodularstructure.Thesoftwareincludes:mainprogram,displayprogram,temperatureandpressureacquisitionsubroutine,subroutinekeys,controloutputsubroutine.Keywords:A/Dtransformationtemperatureandpressureacquisitionintelligentcontrol;目录1绪论1.1探讨背景及现状单片机自从20世纪70年头产生以来,已经广泛地应用在工业自动化限制、自动检测、机电一体化设备、智能仪器仪表、家用电器、汽车电子等各个方面。单片机具有功能齐全,抗干扰实力强,应用牢靠,前景广袤,简洁便利等优点。此外,单片机还具有体积小、应用敏捷性强、性能价格比高等特点,在嵌入式微限制系统中具有特别重要的地位。从工业自动化、智能仪器仪表、自动限制、消费类电子产品等方面直到国防尖端技术领域,单片机都起着特别重要的作用。近些年来,随着微机的发展,单片机的应用在人们的日常生活和工作中显得越来越重要。工业过程限制也是它的一个重要应用领域。由单片机而构成的嵌入式系统越来越受到世人的关注。因此,可以毫不夸张的说,没有单片机的仪器不能算是先进的仪器,没有单片机的过程限制系统不能称做是智能限制系统。温度限制是与人们日常生活休戚相关的,在各个领域温度的限制都有不同的意义。许多限制领域中都有大量的用电来加热的设备,比如用于热处理的电加热炉,用于溶化金属的电阻炉以及温度限制箱等。运用单片机来对它们进行限制不仅具有限制便利、敏捷性大、简洁等一些特点,而且还可以大大提高产品的质量,通常单片机将采集到的温度数据与设定的温度上、下限进行比较,并由此作出推断是否启动继电器来开启加热设备,在设计中通常还加入常用的LCD液晶显示或者LED显示等常用的显示电路,使得整个设计更加敏捷、完全。国内外的温度限制系统发展都特别快速,并在智能化、参数自整定、自适应等方面取得了不同的成果。目前的温度限制大多都是采纳智能调整器,国产调整器的精度和辨别率比较国外的较低,温度的限制效果也不是很志向但价格特别便宜,国外的调整器精度和辨别率都比较高,价格较贵。德国、美国、日本、瑞典等技术领先,都生产出了商品化的,性能优异的温度限制器以及仪器仪表,并在各个行业已经广泛应用。压力的测量对于实时监测以及平安生产都具有特别重要的意义。在工业应用中,为了高效并且平安的生产,就必须要有效的限制生产过程中的一些重要数比诸如压力、温度、流量等主要参数。因为压力的限制在一般生产过程中都起着确定性的平安作用,因此更有必要精确的测量压力。为了测得不同位置的压力数据,本设计的压力测量系统。通过压力传感器将须要测量的压力信号转变为电信号,再由变送器最终转换为0-5V的电压信号给PCF8591AD-DA芯片。单片机通过IIC总线将模拟数据读回来再依据变换公式做数据处理,最终将温度和压力值显示在LCd1602上。芯片转换时间受IIC总线速率影响,可以最大支持8个相同的PCF8591芯片,即最大支持32路模拟量输入,8路模拟量输出。键盘输入是单片机限制系统常用的实现人际对话的输入设备。通过键盘,向单片机限制系统输入各种数据或者吩咐,也可以通过键盘,设置单片机限制系统工作于预定的模式。1.2实现温度及压力智能限制的意义温度、压力都是过程生产中特别重要的参数,它们是生产过程中推断设备是否正常运行的关键因素。在生产过程中对于温度和压力的限制也就显的极为重要。比如在化工生产过程中,压力能影响物料平衡,也能影响化学的反应速度,是标记着生产过程是否可以正常进行的极为重要的参数。从平安生产的角度,压力的检测也是很重要的。如:保证压力容器内的压力值要在平安的指标之内,确保易燃易爆等介质的压力不能超标等等。总之,温度与压力的检测是通常是生产过程中不行缺少的环节,只有严格依据生产工艺的要求来保持温度及压力的稳定,才能保证生产的正常进行。因此温度及压力精确测量与限制在现实生活中是特别重要的。
2系统方案设计及论证2.1温度、压力采集方案选择2.1.1温度采集方案比较1.运用DS18B20模块本方案的优点是:采集温度精度较高,接线简洁;缺点:单总线方式,当系统须要扩容时要另外占用单片机管脚资源。并且远距离传输时,因为是单总线方式,不能传到太远。2.一般热敏电阻优点:价格低廉缺点:电路设计相对较为困难些,精度低。3.PT100铂电阻方式优点:精度高,运用便利,协作专用的变送器能远距离传输。缺点:价格较为低廉2.1.2压力采集方案1.压力传感器协作变送器方式优点:价格相对低廉,牢靠性高,能较远距离传输,精度较高缺点:相对带通信功能的压力模块,扩容是须要占用AD通道2.压力采集带通信专用模块优点:采集精度高,更智能,扩容时不须要占用任何硬件资源缺点:造价高。本设计中温度采集选用PT100铂电阻的测温方式,PT100铂电阻传感器会依据温度的不同,自身阻值也会有相应的变更,专用的变送器只须要街上PT100铂电阻及电源就可以输出标准的4-20mA或者是0-20mA信号,本设计选用输出0-20mA信号,选用电流信号是因为当较远距离传输时变送器相当于恒流源输出,减小线路阻值带来的误差,当接到本设计中的限制板时,再通过串接250欧姆的电阻来将电流信号转换为0-5V的电压信号。压力采集方案选用压力传感器协作变送器方式,压力采集原理也是如此,不同的是前端传感器不是PT100而是压力传感器。接线示意图如图2-1所示。设计温度限制输出采纳开关量的输出方式,限制原理为当温度实际值大于等于温度上限值时停止加热,当温度实际值小于等于下限值时,起先加热。压力限制方式采纳外接变频器限制电机,进而限制管道压力的方式,原理为当压力实际值小于等于下限值时,限制板将电机的供电,并给变频器输入相应的限制值,限制算法采纳建议的模糊限制算法,即在肯定的时间内检测到前后两次的压力值变更的大小,假如变更很小,说明给出的值小了,须要加大此值,假如变更一般,说明给出的值合适,假如变更很大,说明给出的值大了,须要减小此值。本设计默认分为6档推断。即压力差值的6个档位分别为小于等于0.05MPa;大于0.05MPa并且小于等于0.1MPa;大于0.1MPa并且小于等于0.15MPa;大于0.15MPa并且小于等于0.2MPa;大于0.2MPa并且小于等于0.25MPa;大于0.25MPa并且小于等于0.3MPa;图2-1接线示意图2.2系统结构总框图本限制系统的主控部分由单片机AT89C51构成。通过按键电路可以进行温度及压力的上、下限值的设定,温度及压力的实际值通过PCF8591AD-DA芯片采集,模拟量的输出也是通过PCF8591芯片输出的。当压力超过报警限值时,有蜂鸣器报警。显示部分用的主要期间是LCD1602液晶屏。按键部分采纳四按键的方式进行设定,温度及压力的开关量输出方式运用继电器。电源须要外接+5V的干净电源。图2-2系统结构总框图2.3单片机的选择单片机AT89C51是美国的ATMEL公司生产的一款低电压、高性能的CMOS的8位单片机,芯片内部含有4K字节的可擦写的只读程序存储区以及128个字节的数据存储器,该芯片是采纳高密度和非易失性存储技术生产的,兼容了以往标准的MCS-51产品的指令系统,单片机片内含有通用的8位中心处理器,AT89C51单片机具有不错的性价比以及牢靠性和应用性,此单片机可以敏捷的应用在各种限制领域之中。AT89C51芯片供应以下一些标准的功能:(1).4K字节的闪存 (2).128字节的内部数据存储区(3).32个I/O口线,可以输入或者输出(4).两个16位定时或者计数器(5).一个5向量两级的中断结构(6).有一个全双工的串行口单片机(AT89C51)的工作可以降至0HZ的静态的逻辑操作,并且还支持两种可以通过软件来选择节约电能的工作模式:(1).空闲工作方式:停止单片机的工作,但是允许数据存储器(RAM)、定时或者计数器、通信口以及中断程序的工作。(2).掉电的方式:保存数据存储器(RAM)中的内容,但是单片机的晶振电路停止工作并且禁止其它全部部件的工作始终到下一个硬件复位。AT89C51引脚图如图2-3所示。图2-3AT89C51单片机引脚图引脚功能说明:Vcc:电源电压正GND:电源电压负P0口:P0口是8位的漏极开路型的双向I/O口,即地址或者数据总线的复位口。假如P0口作为输出端口时,每个端口能驱动8个逻辑门电路,假如对端口写“1”时,可以作为高阻抗输入端口来运用。假如在访问外部数据存储器或者程序存储器的时候,这组口线分时转换地址(低8位)和数据总线复用,此时的P0端口激活内部的上拉电阻。P1口:P1端口是带有内部上拉电阻的8位的双向口。P1端口的输出可以驱动(输入或输出)4个TTL逻辑门电路。假如对端口写“1”时,通过内部的上拉电阻把端口拉到高电平,此时可以当作输入端口运用。因为内部存在上拉电阻,假如某个引脚被外部信号拉低时会输出一个电流。P2口:P2端口是带有内部上拉电阻的8位的双向口,P2端口可以驱动(输入或输出电流)4个TTL逻辑门电路。假如对端口写“1”,通过内部的上拉电阻把P2端口拉到高电平,此时P2端口可以作为输入口。P3口:P3端口是带有内部上拉电阻的8位的双向口。P3端口输出缓冲级可以驱动(输入或输出)4个TTL逻辑门电路。假如P3端口写入“1”时,他们被内部上拉电阻拉高并可作为输入口。此时,被外部拉低的P3端口将用上拉电阻输出电流。P3端口还接收一些用于闪存编程和程序校验的限制信号。RST:复位。当单片机工作时,复位引脚假如有两个机器周期以上的高电平信号就可以让单片机复位。XTAL1、XTAL2:振荡器输入端。2.4温度传感器pt100是铂热电阻,铂电阻的阻值会随着温度的不同而变更。PT字符后的100即表示此电阻在0℃时的阻值为100欧姆,当它在100℃时它的阻值大约为138.5欧姆。工作原理:当PT100铂电阻在0℃的时候它的阻值大约为100欧姆,它的阻值会随着温度上升而近似匀速的增长。但是它们之间的关系却并不是简洁的正比的直线关系,而是更趋近于一条抛物线。铂电阻阻值随温度变更的计算公式如下:-200<t<0℃Rt=R0[1+At+Bt*t+C(t-100)t*t*t](1)0≤t<850℃Rt=R0(1+At+Bt2)(2)Rt为当t℃时的铂电阻的电阻值,R0为当0℃时的铂电阻的阻值。公式中的A,B,系数都是试验测定的。标准的DINIEC751系数:A=3.9083E-3、B=-5.775E-7、C=-4.183E-12。依据韦达公式求得阻值大于等于100欧姆的Rt-〉t的换算公式:0≤t<850℃t=(sqrt((A*R0)^2-4*B*R0*(R0-Rt))-A*R0)/2/B/R0PT100铂电阻温度传感器器是一种以白金(Pt)作成的电阻式的温度检测器,属于正阻系数,它的电阻和温度变更的关系式如下:R=Ro(1+αT)式中α=0.00392,Ro为100Ω(在0℃的电阻值),T为摄氏温度<br>因此白金作成的电阻式温度检测器,又称为PT100。2.5压力传感器液压压力传感器是工业中最为常见的一种压力传感器,它广泛应用于各种工业自控的环境中,涉及石油管道、铁路交通、水利水电、生产自控、智能建筑、航空航天、石化、军工、电力、油井、船舶、管道送风、机床、锅炉负压等等众多的行业。工作原理:液压压力传感器的工作原理为压力干脆作用在传感器的薄膜片上,使膜片产生与介质压力成正比的微小位移,让传感器的电阻发生了变更,再用电子线路检测这一变更,并且转换输出一个对应于这个压力的标准的电信号。常见参数:全密封、平膜型不锈钢焊接结构、高灵敏度、小体积、零点满度可调整。应用领域:液压、中心空调系统、压铸、恒压供水、机械、机车制动系统轻工、冶金、环保、石化、空压机等其他自动限制系统。实物图如图2-4所示。图2-4平模传感器量程:-0.1~0~1~1000(MPa)输出信号:4~20mA(二线制)、0~5V、1~5V、0~10V(三线制)综合精度:0.1%FS、0.25%FS、0.5%FS供电电压:24DCV(9~36DCV)介质温度:-20~85~150℃环境温度:常温(-20~85℃)量程温度漂移:≤±0.05%FS℃零点温漂移:≤±0.05%FS℃补偿温度:0~70℃平安过载:150%FS极限过载:200%FS响应时间:5mS(上升到90%FS)绝缘电阻:大于2000MΩ(100VDC)负载电阻:电流输出型:最大800Ω;电压输出型:大于5KΩ密封等级:IP65长期稳定性能:0.1%FS/年振动影响:在机械振动频率20Hz~1000Hz内,输出变更小于0.1%FS机械连接(螺纹接口):M20×1.5等,其它螺纹可依据客户要求设计电气接口(信号接口):紧线螺母+四芯屏蔽线2.6A/D-D/A转换器PCF8591芯片是一个单片集成、低功耗、单独供电、8-bitCMOS数据获得器件。PCF8591具有4个模拟量输入、1个模拟量输出以及1个串行I²C总线接口。PCF8591芯片的3个地址引脚A0、A1和A2可以用于硬件地址编程,允许在同个I²C总线上最多接入8个PCF8591器件,而不须要额外的硬件。在PCF8591芯片上输入输出的地址和限制和数据信号都是通过双线双向I²C总线以串行的方式进行传输的。PCF8591的功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit数模转换。PCF8591的最大转化速率由I²C总线的最大速率确定。AIN0~AIN3:模拟信号的输入端。A0~A3:引脚的地址端。VDD、VSS:电源端。(2.5~6V)SDA、SCL:IIC总线的数据线、时钟线。OSC:外部时钟的输入端,内部时钟的输出端。EXT:内、外部时钟选择线,运用内部时钟时EXT要接地。AGND:模拟信号接地端。图2-5PCF8591引脚图2.7液晶LCD1602LCD1602字符型的液晶显示模块是一种特地用于显示字母、符号、数字等点阵式的LCD,目前常用的有16*1、16*2、20*2以及40*2行等样式的模块。下面以长沙太阳人电子有限公司的生产的LCD1602字符型液晶显示器为例,来做简洁的介绍。一般的LCD1602字符型液晶显示器实物如图2-6所示:图2-6LCD1602液晶实物图
3锅炉温度和压力限制系统硬件电路的设计3.1最小单片机系统单片机的最小系统,是指用最少的元器件组成的并可以正常工作的单片机系统,对本设计来说,单片机最小系统应当包括:单片机,晶振电路以以及复位电路。3.1.1晶振电路典型的晶振值一般取11.0592MHz(因为可以精确地计算得到9600波特率和19200波特率,常用用于有串口通讯的场合)/12MHz。在图3-1中,晶振Y2与电容C8、C9构成了单片机的晶体振荡电路。本设计当中的晶振选用的是无源晶振,晶振为11.0592MHz。起振电容选用的是两个22pF的小电容。图3-1晶振电路3.1.2复位电路在图3-2中,S2、C6及R18构成了复位电路。此单片机是高电平复位,即当按键S1按下时,单片机的RST引脚被拉高,单片机被复位;当按键S1松开后,单片机的RST引脚被下拉电阻R18拉低,单片机起先执行用户程序。电容C6是滤波电容,防止按键S1按下的瞬间,单片机的RST引脚电平信号抖动,影响单片机的工作。图3-2复位电路刚上电的时候或者触动按钮后C6两端的电压为0,这时RST为高电平,而它高电平保持的时间是由电阻R18和电容C6的时间常数确定,由公式(3-1)可知,电容C6充电的时间常数τ等于0.22ms,远远大于2μs,即使复位管脚RST高电平的时间保持2μs以上,保证了单片机正常复位。τ=R*C(3-1)3.2温度及压力采集电路设计如图3-3所示,PCF8591芯片是一个带4路模拟量输入,1路模拟量输出以及IIC总线的芯片。此IIC总线上最多可以挂8片PCF8591芯片。温度采集占用第一路模拟量采集通道即AN0,压力采集占用模拟量采集通道其次路即AN1。模拟量输出接AOUT即J6。此处的信号电平都是0-5V的电平信号。图3-3模拟量采集模块3.3温度及压力限制输出电路设计温度及压力限制输出电路如图3-4所示。图中限制原理石油PNP三极管限制继电器,从而限制外界强电。Q1部分电路为温度限制电路,Q2部分电路为压力限制电路。以Q1部分电路举例来说明此部分电路的工作原理,Q1与Q2部分的电路原理是一样的。D2是指示灯,R3是限流电阻,当P3.0为高电平常,Q1截至,继电器不吸合,当P3.1为低电平常Q1导通,继电器吸合。当继电器吸合时,指示灯亮,继电器不吸合时,指示灯灭。图3-4温度及压力限制输出电路3.4键盘及显示电路显示器件用LCD1602,如图3-5所示。排阻Rp2为P0口的上拉电阻。单片机管脚P2.4、P2.5、P2.6、P2.7分别对应按键S3、S4、S6、S7。按键S3为菜单(确定)键,S4为设置高位按键,S6为设置中位按键,S7为设置低位按键。高、中、低位按键都是每按一次相应位置数据加一。设置好后按S3确定键。设置依次分别为设置温度上限,压力上限,温度下限,压力下限。最终设置完后按确定键S3则退出设置环境。图中的D8为模拟量采集指示灯。正常运行时D8会每隔几秒就闪耀一次。图3-5键盘及显示电路3.6报警电路设计本系统采纳蜂鸣器报警的方式来发出报警信息。图3-6中U5为蜂鸣器,三极管Q3为驱动三极管,R5为限流电阻,当单片机管脚P3.3为高电平常,三极管Q3截至,蜂鸣器不发声;当单片机管脚P3.3为低电平常,三极管Q3导通,蜂鸣器发出声音。来达到报警提示的功能。本设计只设计了压力报警提示,当压力实际值超过设定的报警限值时,蜂鸣器会发出声音报警,当压力实际值在正常范围内时,蜂鸣器停止发声。图3-6报警电路3.7电源电路设计 在图3-7中D9为电源指示灯,R6为限流电阻,电容C10与C11都为滤波电容。本设计选用外界直流5V电源的方式供电。图3-7电源电路
4系统软件设计4.1系统总流程图设计系统程序的流程图如图4-1所示。图4-1系统程序流程图上电后,系统首先初始化,初始化完成后起先采集模拟量值,推断按键程序,之后再推断各值是否在正常范围内,假如不在范围内做出相应的操作。最终输出限制逻辑。4.2部分程序说明程序部分大致分为主程序、LCD显示程序、模拟量采集程序、模拟量输出程序、按键设置程序、自动限制程序等部分。4.2.1主程序main(){LCD_Initialise(); //LCD初始化AD_CHANNEL=0;T_OUT=1;//关闭温度输出alarm_OUT=1;//关闭报警输出while(1){ISendByte(PCF8591,0x41); D[0]=IRcvByte(PCF8591);//ADC0模数转换1Delay_1ms(5);Convert_To_Voltage(D[0],0); //求温度 LCD_Line_1[2]=Voltage[2]; LCD_Line_1[3]=Voltage[1]; LCD_Line_1[5]=Voltage[0];ISendByte(PCF8591,0x40); D[1]=IRcvByte(PCF8591);//ADC0模数转换1Delay_1ms(5);Convert_To_Voltage(D[1],1);//求压力 LCD_Line_2[2]=Voltage[2]; LCD_Line_2[4]=Voltage[1]; LCD_Line_2[5]=Voltage[0]; P_time= P_time+1;//时间计数/*ISendByte(PCF8591,0x42);D[2]=IRcvByte(PCF8591);//ADC2 模数转换3ISendByte(PCF8591,0x43);D[3]=IRcvByte(PCF8591);//ADC3模数转换4*/while(menu_bit==1){key_read();//按键读取函数P0=0X0e;//显示开,光标开,闪耀lcd_enable(); if((set_bit==0)||(set_bit==2)) {key_set();//按键设置 } else if((set_bit==1)||(set_bit==3)) { key_set1();//按键设置 } if((set_bit==0)||(set_bit==1)) {P0=0X80;//设置第1行显示地址 } elseif((set_bit==2)||(set_bit==3)) { P0=0XC0;//设置第2行显示地址 }lcd_enable();//调用LCD显示设置函数 if((set_bit==0)||(set_bit==1)) {write_h();// } elseif((set_bit==2)||(set_bit==3)) { write_l();// }} key_read();//按键读取函数RC4、RC5、RC6、RC7分别为四个按键,按下瞬间,Trg值分别为16,,3,64,128if(Trg==16)//菜单键按下时{ bai=TH/100; shi=TH%100/10; ge=TH%10;menu_bit=1;//菜单键标记} auto_t_p();//自动控温及控压子程序 Delay_1ms(5); DACconversion(PCF8591,0x40,D[2]);//DAC 数模转换 LCD_Display_A_Line(0x00,LCD_Line_1); LCD_Display_A_Line(0x40,LCD_Line_2); }}4.2.2LCD显示程序bitLCD_Busy_Check() //LCD忙检测{ bitResult; //结果标记位 LCD_RS=0; LCD_RW=1; LCD_EN=1; Delay4us(); //延时4us Result=(bit)(P0&0x80); LCD_EN=0; returnResult;//输出结果标记位}voidLCD_Write_Command(ucharcmd) //LCD限制吩咐{ while(LCD_Busy_Check());//while循环 LCD_RS=0; LCD_RW=0; LCD_EN=0; _nop_();//短延时 _nop_(); P0=cmd; Delay4us(); //延时4us LCD_EN=1; Delay4us(); LCD_EN=0;}voidLCD_Write_Data(uchardat) //LCD写数据{ while(LCD_Busy_Check()); //while循环 LCD_RS=1; LCD_RW=0; LCD_EN=0; P0=dat; Delay4us(); LCD_EN=1; Delay4us(); LCD_EN=0; }voidLCD_Initialise() //LCD初始化{ LCD_Write_Command(0x38);Delay_1ms(5); LCD_Write_Command(0x0c);Delay_1ms(5); LCD_Write_Command(0x06);Delay_1ms(5); LCD_Write_Command(0x01);Delay_1ms(5); }voidLCD_Set_Position(ucharpos)//LCD设置显示位置{ LCD_Write_Command(pos|0x80); }voidLCD_Display_A_Line(ucharLine_Addr,uchars[])//LCD显示行设置{ uchari; LCD_Set_Position(Line_Addr); for(i=0;i<16;i++) { LCD_Write_Data(s[i]); }}4.2.3模拟量采集程序voidConvert_To_Voltage(unsignedlongintval,uchara) //数据转换,转换到电压值{if(a==0)//求温度{ val=100*val/26; //数据转换 Voltage[2]=val/100+'0'; Voltage[1]=val%100/10+'0'; Voltage[0]=val%10+'0'; T_R=(Voltage[2]-'0')*100+(Voltage[1]-'0')*10+(Voltage[0]-'0');//温度实际值}else //求压力{ val=100*val/255; //数据转换 Voltage[2]=val/100+'0'; Voltage[1]=val%100/10+'0'; Voltage[0]=val%10+'0'; P_R=(Voltage[2]-'0')*100+(Voltage[1]-'0')*10+(Voltage[0]-'0');//压力实际值 }}/*******************************************************************DAC变换,转化函数*******************************************************************/bitDACconversion(unsignedcharsla,unsignedcharc,unsignedcharVal){Start_I2c();//启动总线SendByte(sla);//发送器件地址if(ack==0)return(0);SendByte(c);//发送限制字节if(ack==0)return(0);SendByte(Val);//发送DAC的数值if(ack==0)return(0);Stop_I2c();//结束总线return(1);}/*******************************************************************ADC发送字节[吩咐]数据函数*******************************************************************/bitISendByte(unsignedcharsla,unsignedcharc){Start_I2c();//启动总线SendByte(sla);//发送器件地址if(ack==0)return(0);SendByte(c);//发送数据if(ack==0)return(0);Stop_I2c();//结束总线return(1);}/*******************************************************************ADC读字节数据函数*******************************************************************/unsignedcharIRcvByte(unsignedcharsla){unsignedcharc;Start_I2c();//启动总线SendByte(sla+1);//发送器件地址if(ack==0)return(0);c=RcvByte();//读取数据0 Ack_I2c(1);//发送非就答位Stop_I2c();//结束总线return(c);}4.2.4按键设置程序/*********按键设置函数*********************/********************************************************************************函数名:key()*函数功能 :按键函数 1.无按键按下时,P1=0xff;ReadData=0;Trg=0;Cont=0;2.P1.0按下时,P1.0=0;ReadData=0x01;Trg=0x01(Trg只会在这个时候对应位的值为1,其它时候都为0);Cont=0x01;3.P1.0长按住时,P1.0=0;ReadData=0x01;Trg=0x00;Cont=0x01;假如是P1.1按键那么Trg,Cont对应值都为2;假如是P1.2按键那么Trg,Cont对应值都为4;是P1.3按键那么Trg,Cont对应值都为8*输入:无*输出 :无*******************************************************************************/voidkey_read()//按键读取函数{ unsignedchartemp=P2|0x0f;//将临时变量temp的低高四位置一,高四位不变unsignedcharReadData=temp^0xff;//1Trg=ReadData&(ReadData^Cont);//2Cont=ReadData;}//--------------------------------------//延时函数voiddelay(){inti;for(i=0;i<0x100;i++);}//--------------------------------------//LCD显示设置函数voidlcd_enable(){LCD_RS=0;//该字节数据为吩咐,而不是数据LCD_RW=0;//此次操作为写,而不是读LCD_EN=0;//拉低使能信号delay();//保持使能信号为低一段时间LCD_EN=1;//拉高使能信号,建立LCD操作所须要的上升沿}//----------按键设置子程序----------voidkey_set(){if(Trg==32)//设置百位键按下{bai++;if(bai>9){bai=0;}}elseif(Trg==64)//设置十位键按下{shi++;if(shi>9){shi=0;}}elseif(Trg==128)//设置个位键按下{ge++;if(ge>9){ge=0;}}elseif(Trg==16)//设置菜单键按下{set_bit=set_bit+1;result=bai*100+shi*10+ge;P0=0X0C;//显示开,光标关lcd_enable(); if(set_bit==1) { TH=result; bai1=PH/100; shi1=PH%100/10; ge1=PH%10; } elseif(set_bit==3) { TL=result; bai1=PL/100; shi1=PL%100/10; ge1=PL%10; } if(set_bit>=4) {menu_bit=0;//标记清零 set_bit=0; }}}4.2.5自动限制子程序voidauto_t_p()//自动控温及控压子程序{if(T_R<=TL)//假如实际温度小于等于设定下限温度{ T_OUT=0;//加热 }elseif(T_R>=TH)//假如实际温度大于等于设定上限温度{ T_OUT=1;//停止加热 }if(P_R<=PL)//假如实际温度小于等于设定下限温度{ P_OUT=0;//升压 P_ctrl();//升压限制 alarm_OUT=0;//报警输出 }elseif(P_R>=PH)//假如实际温度大于等于设定上限温度{ P_OUT=1;//停止升压 D[2]=0;//升压系数输出清零 alarm_OUT=0;//报警输出 } elseif((P_R>=PL)&&(P_R<=PH))//在正常值范围内{ alarm_OUT=1;//关闭报警输出 }}5仿真运行本设计通过proteus7.8仿真已经完全没有问题。仿真如图5-1所示。单片机的管脚P2.4、P2.5、P2.6、P2.7接的按键分别为菜单(确定)按键、设置高位数据按键、设置中位数据按键、设置低位数据按键。P3.0、P3.1、P3.2、P3.3管脚接的LED分别代表温度限制开关量输出、压力开关量限制输出、模拟量采集指示及报警输出指示。LCD1602上显示的“T-25.3C”,表示当前实际温度为25.3℃。“P-0.70MPa”表示当前压力值为0.70MPa。调整温度或者压力可以通过前端的可调电阻来调整。PCF8591芯片的AN0通道接入的可调电阻代表温度模拟量输入;PCF8591芯片的AN1通道接入的可调电阻代表压力模拟量输入。输出仿真用电压表指示。本设计采纳模糊限制,当在定长的时间段内,检测前后两次采集到的压力值,推断此压力的差值在模糊表中的哪个区间,对应给出相应的输出。图5-1proteus7.8仿真效果图温度低于下限时如图5-2所示。当温度低于下限时,P3.0端限制输出加热,当温度在正常范围内温度限制输出端状态不变,当温度高于上限时,温度限制输出端停止加热。图5-2温度低于下限图压力低于下限是如图5-3所示。当压力低于下限时起先升压,升压的大小依据前后两次采集的压力差值及建立的模糊表限制,即当此差值很大时,限
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人风采设计
- 《卫星通信和光纤通信》课件
- 数学减法教学设计方案
- 慢性阻塞性肺疾病急性加重期应对指南
- 外部空间设计核心要素与实施路径
- 比赛简短自我介绍
- 耳鼻喉科慢性鼻窦炎饮食指导手册
- TLS证书管理优化设计课程设计
- 整合传播规划方案范本
- 保险杆的课程设计
- 人教部编版道德与法治八年级下册道德与法治期末测试检测试题(解析版)
- 2024年北京中考语文试题及答案
- 新青岛版-二年级下册数学-口算题
- 周志华-机器学习-Chap01绪论-课件
- X矿业企业120万t选矿厂投标文件技术标
- 汉语写作与百科知识样题
- 提高喷射混凝土施工一次验收合格率QC成果
- 美丽中国(支教项目)
- 题型01 长句表达题的规范答题(课件) 高考生物二轮复习 (新教材专用)
- GB/T 17467-2020高压/低压预装式变电站
- 新通用设备经济寿命参考年限表
评论
0/150
提交评论