毕业论文-基于PID的液体温度控制器设计与实现_第1页
毕业论文-基于PID的液体温度控制器设计与实现_第2页
毕业论文-基于PID的液体温度控制器设计与实现_第3页
毕业论文-基于PID的液体温度控制器设计与实现_第4页
毕业论文-基于PID的液体温度控制器设计与实现_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

大连东软信息学院毕业设计(论文) 摘要I基于PID的液体温度控制器设计与实现摘要本文从硬件到软件两方面具体的介绍了单片机温度控制系统的,简单明了的说明了如何利用单片机实现对温度控制的方法,并且对硬件电路原理和软件程序的框架进行了叙述。还说明了在设计控温过系统中的一些主要技术环节。温度控制系统是基于工业过程的物理模拟对象,系统以89C52单片机作为核心,用液晶LCD1602作为显示,以18b20作为温度传感器,用晶闸管进行可控整流。关键词:单片机,温度传感器,温度检测,温度控制,PID算法BasedontheliquidtemperatureofthePIDcontrollerdesignandimplementationAbstractThe

design

of

single-chip’s

temperature

control

system

is

introduced

from

hardware

and

software,

and

simply

explains

how

to

actualize

the

temperature

control.

The

hardware

principle

and

software

case

fig

are

described.

Some

important

techniques

in

a

design

scheme

of

the

hardware

and

the

software

of

the

temperature

control

by

single-chip

microcomputer

are

introduced.Keywords:Single—Chip

Microcomputer,Temperature

sensor,Temperature

collecting,Temperature

controlling,PID

algorithm.大连东软信息学院毕业设计(论文)目录目录TOC\o"1-3"\u摘要 IAbstract II第1章绪论 11.1PID的应用和发展 11.2液体温度控制系统研究的意义 11.3液体温度控制系统简介和其控制对象 2第2章液体温度控制系统结构 32.1物理器件 32.2物理结构 32.3开发环境 42.3.1硬件系统框图 52.3.2原理图设计 52.4软件设计 6第3章PID控制算法研究 73.1算法简要介绍 73.2增量式PID算法 8第4章项目成果 114.1硬件成果物 114.1.1线路连接图 114.1.2展示图 114.2软件成果物 124.3主要程序 124.4软件实现过程 13第5章结论 15参考文献 16致谢 17附录 18大连东软信息学院毕业设计(论文)-第1章绪论1.1PID的应用和发展工业化自动生产过程中,人们相对于之前,在工业自动化控制的要求也越来越高,在控制精度、系统适应力、响应速度以及系统的稳定性等方面的要求也是越来越高。控制理论的发展也经过了古典控制体系、现代控制体系和智能控制体系三阶段。在工业控制发展的历史长河中,PID算法控制属于历史比较悠久、而且运用最广泛的控制原理。现在各种各样的基于PID开发的控制器或者仪表已经很多,产品已在实际生活中得到了更为广泛的应用,现在更是有很多优秀的PID控制器产品问世,各大公司均开发出了具有PID参数自整定功能的调节器,其中PID控制器参数的自动调整是通过智能化调整或自校正、自适应算法来实现。随着工业化的飞速发展,人们对于在生产过程中可产生错误的概率也要求的越来越低,而对产品质量要求越来越高。每一个先进且实用的控制系统都对工厂生产活动起到不可或缺的推动作用。在这里,PID控制在工业生产控制中起到了比较重要的作用,一些PID控制器也成为工业控制中最常用的运用在生产第一线的设备,PID适用于需要进行高精度测量控制的系统,甚至可以根据测量对象的不同而给出不同的PID测量参数,以便于更好的结合实际,进行测量演算。1.2液体温度控制系统研究的意义PID的优点很多:应用原理简单易懂,算法使用比较方便;适应性比起其他要强;对于PID控制稳定来说,对于它直接控制对象的变化不大敏感,所以适合用于环境相对恶劣的各种工业生产现场中;PID算法自有一套属于自己的完整的参数与设计方法,便于被各方面技术人员使用;许多工业生产中对控制的相对速度和控制精度要求并不是那么高,而更重视控制系统的稳定性和可靠性时,使用运用了PID算法的控制系统能获得较高的性价比;在工业生产过程中,对PID算法的某些缺陷可以稍加改良,使其更贴近需要其运用的方向。然而,当前的学术研究与实际生产技能的运用并不是同步的,通常情况下都是实际生产中大规模运用到的生产技术要比实验室研究的理想模型滞后不少,也就是说许多先进的学术研究成果根本运用不到实际的生产生活中,形成这样状况的根源在于实验室中的理论研究缺乏实际生产数据作为参考依据,由于这个原因研究出来的成果一旦投入到实际生产中就会遇到各种各样的非理想化可追其原因的问题。所以,在研究成果和实际生产不能协调的今天,开发经济适用且具有对象典型性特征的实验装置将会是一条把研究成果和实际生产相结合的最好方法。1.3液体温度控制系统简介和其控制对象在一些特殊的工业生产中,对液体温度的控制有着特殊的要求,对温度控制的精度和准度更是有着高标准的要求,本文在液体温度控制系统中进一步研究PID控制的精度和准度。这次我们做的是可模拟生产过程中需要进行温度控制的简易装置,便于我们对生产中存在的问题得到更好的解决方法。系统由储水容器、检测组件和驱动组成。我们采用的是比较简单的实验工具,方便大众的使用,而得到的数据较为精准,不排除各地区因素导致的误差不同。第2章液体温度控制系统结构2.1物理器件温度控制系统是基于工业过程的物理模拟对象,系统以89C52单片机作为核心,用液晶LCD1602作为显示,以18b20作为温度传感器,用晶闸管进行可控整流。我们的温度系统是专门控制温度控制的系统,所以选择单片机为控制芯片。单片机具有高集成度、高可靠性、体积小的特点。它将各功能部件集成在一块芯片上面,单片机的集成性很高,所以体积是同等芯片里面最小的。单片机为了满足对控制对象的控制要求,所以他的指令系统具有分支的愿意能力强,对于IO口的逻辑操作及位处理能力的要求,一般较为适用于专门的控制系统。液晶LCD1602可以显示16x02即为32个字符,对比度可调,体积小、微功耗、显示内容丰富,因为我们的温控系统是袖珍式低功耗应用系统,所以选择了LCD1602.再来说DS18B20,它功能较为简单,只需要一个端口即可完成通信,在实际的操作中,也可以不连接外部设置,直接进行工作,比较方便,它的电压在3.0V到5.5V之间,分辨率为9位~12位之间。它的温度测量范围为零下55℃~零上125℃之间,DS18B20具有直接读出被测温度值的功能。而且采用三端口与我们的单片机相连,减少了外部硬件电路,优化了电路设计,具有低成本和易使用的特点。晶闸管具有寿命较长,效率高,体积小,使用起来方便等等的优点。它属于大功率的管子,把半导体器件的应用引入了强电领域,同时灵敏性、耐压性、效率也不错。多用于整流、逆变和调压等大功率电子电路中。我们在这里用到晶闸管便是因为它在整流方面的突出功能。以上元器件都有体积小,使用方便但功能毫不逊色的特点,我们做的是较为方便的简易实验装置,综上,选用了这几个主要的元器件。2.2物理结构液体温度控制系统由水箱主体(试验时水箱需密闭,这样误差较小,大约在1℃左右)、检测器件、温度调节设备和单片机控制部分组成,其总体结构如图2.2展示。图2.2系统物理模型USB接口连接电源上电给单片机,再将加热设备的电路连接在继电器上并将加热装置放入水箱中,将入水式18B20放入水箱中,用来检测水温。将热水器接好电源,按下开关便可以进行工作。我们的原理就是用DS18B20检测水温,然后反馈给单片机,单片机中程序会用运增量式PID计算公式来实时地控制加热设备的加热,从而达到一个恒温的目的。值得注意的是,实验装置每次进行试验时,由于水的比热容的因素,第一次试验实验结果会与实际相差较大,有3~4℃的温度差,暂时不可避免,所以我们一般选取第二次之后的实验结果进行记录。2.3开发环境基于89C52单片机进行开发设计,运用Keil进行编程,用PROTEL来绘制电路,主要开发工作在PC上完成。单片机开发中除必要的硬件外,同样离不开软件。KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。PROTEL是Altium公司在80年代末推出的EDA软件,在电子行业的CAD软件中,它当之无愧地排在众多EDA软件的前面,是电子设计者的首选软件,它相比较同种软件,是在我国运用最早,普及率最高的一款软件。Protel99SE共分5个模块,分别是原理图设计、PCB设计、原理图混合信号仿真、自动布线器、PLD设计。Protel99系统针对WindowsNT4/9X作了纯32位代码优化,使得Protel99设计系统运行稳定而且高效。PCB自动布线规则条件的复合选项极大的方便了布线规则的设计。继承的PCB自动布线系统最新的使用了人工智能技术,如人工神经网络、模糊专家系统、模糊理论和模糊神经网络等技术,即使对于很复杂的电路板其布线结果也能达到专家级的水平。Protel99新增加了自动布局规则设计功能,Placement标签页是在Protel99中新增加的,用来设置自动布局规则。综上所述,我们的系统开发用这两种软件。2.3.1硬件系统框图根据对系统的测试,我们将系统运行过程绘制成以下图2.3.1。图2.3.1系统体系结构按下开关,系统初始化,液晶屏开始显示,我们用主板上的按键来设置实验要求的温度,设置好后,实验装置开始工作。当18B20检测到的水温大于设定值时,单片机就会发出指令,加热器就会停止工作,直到恢复到我们需要的温度。当温度降到设置温度以下,便又开始工作,直到水温达到要求。2.3.2原理图设计原理图我们采用方便布线的ProtelDXP进行绘制,如图2.3.2展示。图2.3.2原理图2.4软件设计根据对系统的测试,我们将软件流程绘制成以下图2.4。图2.4软件流程图由于系统具有比较大的惯性和滞后性,所以我们选择了PWM控制中较为常用的单周期控制法。每一个周期都由“通”和“断”构成,“通”即为继电器接受到了高电平,电路可以正常导通开始工作,“断”即为继电器接收到了低电平,电路便中断,停止工作。控制系统的基本工作如下介绍:PC把经过增量式PID算法得到的控制量通过采集卡的数字量输出通道传送给继电器,即电路开关,假如输出的是高电平,则继电器开关为“开”的状态,就电路导通;反之,如果输出的是低电平,则继电器开关状态为“关”,电路不能工作,所以我们可以通过固态继电器的“通”与“断”去控制电路是否导通工作。第3章PID控制算法研究3.1算法简要介绍PID控制是应用最广泛的一种控制规律。在实际应用生产中,PID调节器的实现分模拟和数字两种方法。模拟法就是利用硬件电路实现PID调节规律。数字法就是对经典的模拟PID进行了数字模拟,用数字调节器来代替模拟调节器。在采样周期较小时,数字模拟PID控制算法是一种较理想的控制算法。数字PID控制在智能检测与控制系统中是一种普遍采用的控制方法,本章介绍数字PID控制的基本原理、参数的整定及本系统中PID算法的软件实现过程。工程生产实际中,最为广泛的应用调节器控制规律为比例(P)、积分(I)、微分控制(D),通常称为PID控制,又被叫做PID调节,它通过控制过程中产生的偏差值的比例、积分以及微分运算后,用得出的数值来控制被控对象。图3.1是PID基本控制结构图。图中R是设定的期望值,y为控制变量,S是实际输出值,c为控制偏差。图3.1PID算法体系结构PID控制问世已经70余年,因为其结构简单、稳定性比之其他调节更为之高、调整起来更加方便等等优点,从而成为了现代工业生产中重要技术之一。当我们掌握的被控对象的数据不完整和,或者没有精确的模拟模型时,其他的控制理论难以运用到实际中,这时候PID控制理论就显现出它的独特之处。就是说当我们不能掌握足够的控制对象的资料,也不能利用手动测量时,最适合的莫过于PID控制技术。比例(P)控制比例控制是一种较为简单的控制方式,它控制的是输出和输入误差的比例关系,控制规律为(1)式y=K*e+x………………(1)K为比例系数,x是偏差,e是零时输出值。图2是比例控制的输入输出关系示意图。积分(I)控制在积分控制中,由控制器输入和输出决定的误差信号积分成正比关系,对于一个自动控制系统来说,在进去稳态之后存在稳态误差,则称这个系统为有差系统。为了消除这种稳态误差,则必须在系统中引入“积分项”。这种积分项则是随着时间的变化而变化,时间增加则积分项增大。在这样的情况下,即便误差非常小,积分项也会增大,它就会使控制器的输出增大进而使稳态误差进一步的减小,直到等于0。微分(D)控制而微分控制,则是控制器的输入信号和输出信号的误差的微分的正比关系。自控系统在克服误差从而进行的过程中可能会出现震荡甚至失去稳定状态。究其原因则是存在惯性较大的环节,而它的变化总是落后于误差的变化。解决的办法就是在控制系统中引入微分,“积分项”在这时候已经是远远不够用了的,我们则需要“微分项”,“微分项”能预测误差变化的走向也就是趋势,这样对有滞后或者较大惯性的控制对象来说,比例加微分(PD)则可以改变调节中的动态变化。在PID中:积分控制是只要有余差的存在,积分控制就会依照程序逐渐增加控制在过程中起到的作用,直到余差消失,我们可以看到的是积分控制在过程中执行的比较慢。而对微分控制来说,当实际测量值比预计设定的值要低,在过程中快速上扬的趋势则需要尽快的得到控制,这时候微分控制便会出来大展身手。作为其本的控制,微分控制看的则是趋势而不是具体的设定数值,只用微分控制进行基本控制的话,我们需要把实际数值稳定下来,但是在生产过程中,数值不可能一成不变。比例控制就没有这些问题,它反应快,稳定性高,但是对控制过程起不到增强的作用。综上,只单独取某一种控制方法来进行基础控制都是不可行的,需要把他们结合起来才能进行更好的控制。3.2增量式PID算法我们所研究的温度控制系统具有时变性、滞后性和非线性的特点,所以想要建立该系统的精准数学模型是不可行的,如果想使用较为常规的线性理论,又想控制结果比较满意,真的很困难。众所周知,工程上常用的PID控制器理论已经达到了相当成熟的程度,随着PID控制理论与计算机技术不断发展,控制的应用PID已经相当广泛。我们这里运用的是增量式PID算法进行运算作业,将比例、积分、微分通过线性组合构成控制量u(t),然后去控制被控对象,具体参见(2)式:…………(2)式中:KP为比例系数,T1为积分时间常数,TP为微分时间常数。增量式PID也可以用流程框图3.2.2来说明过程:图3.2.2PID算法流程框图上图表示出了增量式PID算法的流程图,增量式PID算法尽管只是在算法上做出了一点点改动,却给使用者们带来了不少优点。由于一般计算机输出的是增量,所以误动作对输出的影响不大,必要的时候可以使用逻辑判断来进行消除,算式中也不需要对误差进行累加。所以,我们也可以将上述公式(2)改为以下面的公式(3):…………(3)综上所述,当执行机构需要的控制量不是绝对值,而是控制量的增量,我们便需要增量式PID算法。而我们所讨论的温控系统具有一定的滞后,所以使用常规的PID算法也很难控制这种滞后,所以我们运用上述这种算法。再将以上两个式子进行离散化处理,我们便得到了一个新的PID表达式(4):…………(4)其中T为采样周期,K是采样序号并逐渐增长。有了上面的公式,我们便可以根据递推原理得到公式(5):…………(5)再用(4)式减去(5)式,则得到公式(6):…………(6)其中A、B、C都是与比例系数、积分常量和微分常量有关的系数。此算式中控制器输出的控制量的增量与采样周期、比例系数、积分时间常数和微分时间常数有关,上述最后一个公式称为数字PID的增量式算法。由于一般计算机控制系统采用恒定的采样周期,一旦确定了比例、微分和积分,只要使用前后3次测量值的偏差,即可求出控制增量。大连东软信息学院毕业设计(论文)第4章项目成果4.1硬件成果物4.1.1线路连接图电热器连接图:将电热器连接线安正负极接到主板继电器上,展示如图4.1.1:图4.1.1电热器连接图温度传感器连接图:将入水式温度传感器接到主板上,如图4.1.2展示:图4.1.2温度传感器连接图4.1.2展示图展示图4.1.3为正在工作的实验装置,按下开关键上电成功,实验装置开始工作,液晶屏第一行显示设置温度,也就是要求温度;第二行为实际18B20检测到的水温。图4.1.3实物图4.2软件成果物图4.2软件成果图图4.2从左上开始为时钟电路、复位电路、电源指示灯、电源电路、液晶显示电路、18b20连接方法、按键电路以及51单片机和加热器的连接电路。4.3主要程序系统运用了增量式PID算法,所以以此算法为核心,讲一下主要程序。图4.3主要程序图4.3为我们程序中比较核心的加热控制函数。先引入PID算法,请求新的占空比,然后运用公式计算出偏差和增量,设置好系数,开始计算。当我们实验装置检测到的温度大于设定值,则输出高电平,加热器停止工作。当小于设定值,我们便调整新的脉宽定时,即新的占空比,然后控制加热器的工作与否。具体参见附录。4.4软件实现过程//加热控制函数//voiddeal(uintt) { if(zhouqi==1) { zhouqi=0; ek=set_temp-t; u_k=kp*(ek-ek1)+ki*ek+kd*(ek-2*ek1+ek2); uk=uk1+u_k;zkc=100*uk/uc; if(zkc>=90) zkc=90;}if(t>=(set_temp)) shuchu=1; else { ZKB=(int)zkc; if(click<=ZKB) shuchu=0; else shuchu=1; } uk1=uk;ek2=ek1;ek1=ek;}//中断程序//voidtimer0(void)interrupt1 { TH0=0x4c;TL0=0x00; click++;flag1++; if(click>=100) {click=0;zhouqi=1;} }//温度控制系统主程序//voidmain(){ write_com(0x01); tempchange(); get_temp(); get_temp(); delay(5000); tempchange(); get_temp(); init(); initlcd(); while(1) { keyscan1(); if(flag3==0) { tempchange(); if(Start_Flag==1) deal(get_temp()); elseshuchu=1; b=get_temp(); display(); } } }第5章结论在如今经济结构的转型和过程控制的智能化的要求,智能化的控制系统越来越受到人们的亲睐,它在节省人力和物力的同时又安全可靠。单片机作为可编程的控制器在小型的自动控制系统和检测中发挥出越来越来大的作用。温度作为系统经常需要测量、保持、和控制的一个量,在化工、冶炼、电力,以至于日常生活中的空调机和电压力锅等,都需要对温度进行检测和控制。但生产过程中经常遇到的温度控制系统具有大的滞后性,单纯采用PID算法校正的温度控制系统具有高频扰动大、调整时间长、PID参数整定困难、有较大超调量等弊端。但以单片机为核心的温度控制系统,设计成一个简单实用的温度控制系统。该系统具有控制参数整定方便、控制精度高、稳定性好、结构简单、价格低廉等优点。克服了传统控制的系统复杂、精度小、成本大的缺点。适于普遍性生产和应用,对人们的生活和生产效力的提高有很大作用。参考文献[1]王蕾,宋文忠.PID控制[J],自动化仪表,2004,25(4)[2]胡俊达,胡慧黄,望军.自适应PID[J],中华纸业,2005,26(2):48-51[3]吴洪鑫,沈少萍.PID控制的应用与理论依据[J],控制工程,2003,10(1):37-42[4]杨巨庆,黄健.段丽华.PID控制技术与应用[J],哈尔滨师范大学自然报,2004,20(2):76-78[5]金奇,邓志杰.PID控制原理及参数整定方法[J],重庆工学院学报,2008,22(5):92-94[6]严晓照,张兴国.基增量式PID控制在温控系统中的应用[J],南通大学学报,2006,5(4):48-51[7]王威,杨平.智能PID控制方法的研究现状及应用展望[J],自动化仪表,2008,29(10)[8]孙林军.智能PID控制研究[D],浙江工业大学信息工程学院,2003[9]马建伟.基多指标满意PID控制设计研究[D],南京理工大学,2005[10]JohnA.Shaw.ThePIDControlAlgorithm[M],ProcessControlSolutions,2003[11]KrishnaPrasadDasari,A.M.PrasadME,V.SaiKrishna.WaterTemperatureandFlowcontrolMeasurementforThermalDischargeModelusingPIDcontroller[J],InternationalJournalofEngineeringResearchandApplications,2012,2(4):2198-2202大连东软信息学院毕业设计(论文)致谢历时将近半年的时间终于将这篇论文完成,真的很高兴,大学三年要画上句号,也很不舍。从论文选题到收集材料,从开题报告到论文的完成,也经历的喜悦和痛苦,刚刚开始写论文时也有很复杂的心情,但是当这篇论文完成时,不可否认的是,自己的喜悦感。在论文的写作过程中也遭遇了无数的困难和障碍,庆幸的是都在老师的帮助下战胜了这些困难。尤其要感谢的是我的指导老师肖乐老师,他为人勤恳,不厌其烦的对我进行帮助,对我的论文的修改和改进。另外,每当需要去图书馆查资料的时候,图书馆的老师也会给我很大的便利和帮助。在此向帮助和指导过我的各位老师表示最中心的感谢!非常感谢这篇论文所提及的学者们,如果没有你们的研究成果在先,也就没有这篇论文在后。同时也感谢我的同学们,在我完成论文这段时间里,给与我很大的帮助与支持。由于学识有限,所以论文难免不足,希望给老师同学指正。-附录#include<reg52.h>//#define uchar unsigned char//#define uint unsigned intsbit rs = P2^5;sbit wr = P2^6;sbit e = P2^7; //LCD的RS,WR,E的端口sbit key_up = P3^2;sbit key_down = P3^3;//数字加按键,数字减按键sbitkey_set = P3^4; //SETUP键sbitkey_enter = P3^5;sbit ds=P1^0; //温度传感器信号线sbit shuchu=P2^0; //继电器控制输出bitStart_Flag=0;uint ZKB;float zkc; //定义占空比初始值float kp=1;float ki=0.1;float kd=10; //定义PID初始值,浮点型数据float ek,u_k,uk,uk1, ek1,ek2;uchar click; //中断次数计数器变量uint b,n,set_temp=30,flag,flag1,flag2,temp,zhouqi,uc=1000;uchar inq,inb,ins,ing,num,temp1,yi,er,san,si,s1,s2,s3,s4,s5,s6,s7,s8; float f_temp,send; //定义浮点型的温度数据charcomm_data1=0;charflag3=0;void write_com(uchar com);void write_data(uchardat);//初始化程序//void init(){ TMOD=0x01; //定时器初始化,T0方式1,T1方式2TH0=0x4c; TL0=0x00; //定时器0初值设置 ET0=1; EA=1; TR0=1;}void delay(uintu){ intx,y; for(x=u;x>0;x--) for(y=110;y>0;y--);}void delay1(ucharu){ uint x,y; for(x=u;x>0;x--) for(y=50;y>0;y--);}//温度子程序//voiddsreset(void) //DS18B20复位,初始化函数{ uinti;ds=0;i=103; while(i>0)i--; ds=1;i=4; while(i>0)i--;}bittempreadbit(void) //读1位数据函数{ uinti;bitdat; ds=0;i++; //i++起到延时作用 ds=1;i++;i++;dat=ds; i=8;while(i>0)i--; return(dat);}uchartempread(void) //读1个字节数据函数{ uchari,j,dat; dat=0; for(i=1;i<=8;i++) { j=tempreadbit(); dat=(j<<7)|(dat>>1); } //读出的数据最低位在最前面,一个字节里 return(dat); }voidtempwritebyte(uchardat) //向DS18B20写一个字节数据函数{ uinti;ucharj;bittestb; for(j=1;j<=8;j++) { testb=dat&0x01;dat=dat>>1; if(testb) { ds=0;i++;i++;ds=1;i=8;while(i>0)i--;} //写1 else { ds=0;i=8;while(i>0)i--;ds=1;i++;i++;} }} voidtempchange(void) //DS18B20开始获取温度并转换{ dsreset();delay(1); tempwritebyte(0xcc); //写跳过读ROM指令 tempwritebyte(0x44); //写温度转换指令 tempwritebyte(0x3f); //设置温度分辨率为10位} uintget_temp() //读取寄存器中存储的温度数据{ uchara,b; dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0xbe); a=tempread(); //读低8位 b=tempread(); //读高8位 temp=b;temp<<=8; //两个字节组合为1个字节 temp=temp|a;f_temp=temp*0.0625; //获取实际温度 temp=f_temp*100; //乘以100表示小数点后面只取2位 returntemp; //temp是整型的}//独立键盘扫描程序//voidkeyscan1() //键盘扫描{ if(key_set==0) //SET键按下{ delay(1); //延时消除按键抖动 while(!key_set); Start_Flag=0; flag3++; if(flag3==1) { write_com(0x89); write_com(0x0f); } if(flag3==2) { write_com(0x8a); write_com(0x0f); } if(flag3==3)flag3=1;} if(key_enter==0) //OK键按下{ delay(1); //延时消除按键抖动 if(key_enter==0) //确认数字加按键按下 { write_com(0x0c); flag3=0; set_temp=yi*1000+er*100; Start_Flag=!Start_Flag; //确认键按下才执行PID控制 } while(!key_enter); }if(flag3!=0) { if(key_up==0) //数字加按键按下{ delay(1); //延时消除按键抖动 if(key_up==0) //确认数字加按键按下 { if(flag3==1){yi++;if(yi>9)yi=0;write_com(0x89);write_data(yi+'0');write_com(0x89);}//温度初始值加10度 if(flag3==2){er++;if(er>9)er=0;write_com(0x8a);write_data(er+'0');write_com(0x8a);} //温度初始值加1度 } //设置最大温度99.99度 while(!key_up); } if(key_down==0) //数字减按键按下 { delay(1); //延时消除按键抖动 if(key_down==0) //确认数字减按键按下 { if(flag3==1){if(yi<=0)yi=10;yi--;write_com(0x89);write_data(yi+'0');write_com(0x89);}//温度初始值减10度 if(flag3==2){if(er<=0)er=10;er--;write_com(0x8a);write_data(er+'0');write_com(0x8a);} //温度初始值减去1度 } //设置最小温度0度 while(!key_down); }}}//LCD1602显示程序//void write_com(uchar com) //写命令{rs=0;wr=0;P0=com;delay(5);e=1;delay(5);e=0; }void write_data(uchardat) //写数据{rs=1;wr=0;P0=dat;delay1(5);e=1;delay1(5);e=0;}void initlcd() //初始化{rs=0;wr=0;e=0;write_com(0x38); write_com(0x0c); //显示开,光标不显示,字符不闪烁 write_com(0x06); write_com(0x01);//write_com(0x80); //清屏,显示地址}void write_ser(uchar *ser) //写字符串{ uint i; for(i=0;ser[i]!='\0';i++) { write_data(ser[i]); delay(5);} }void display() //显示{ write_com(0x80); //第一行首地址 write_ser("SET_TEMP:"); //字符串 write_data(yi+'0');write_data(er+'0');write_data('.'); write_data(san+'0');write_data(si+'0');write_com(0x8e); write_data(0xdf);write_data('C'); write_com(0xc0); //第二行首地址 write_ser("CUR_TEMP:"); //字符串b=get_temp(); //测量的温度write_data(b/1000+'0'); write_data(b%1000/100+'0'); //十位,个位write_data('.'); //小数点write_data(b%100/10+'0');write_data(b%10+'0'); //0.1,0.01write_data(0xdf);write_data('C'); }

温馨提示

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

评论

0/150

提交评论