单片机温度控制系统的设计毕业论文设计.doc
毕业论文设计单片机温度控制系统的设计中文摘要随着微机测量和控制技术的迅速发展与广泛应用,以单片机为核心的温度采集与控制系统的研发与应用在很大程度上提高了生产生活中对温度的控制水平。本设计论述了一种以STC89C52单片机为主控制单元,以DS18B20为温度传感器的温度控制系统。该控制系统可以实时存储相关的温度数据并记录当前的时间。系统设计了相关的硬件电路和相关应用程序。硬件电路主要包括STC89C52单片机最小系统,测温电路、实时时钟电路、LCD液晶显示电路以及通讯模块电路等。系统程序主要包括主程序,读出温度子程序,计算温度子程序、按键处理程序、LCD显示程序以及数据存储程序等。关键词 STC89C52单片机;DS18B20;显示电路Based on single chip microcomputer temperature control system designAbstractAlong with the computer measurement and control technology of the rapid development and wide application, based on singlechip temperature gathering and control system development and application greatly improve the production of temperature in life level of control. This design STC89C52 describes a kind of mainly by MCU control unit, for temperature sensor DS18B20 temperature control system. The control system can real-time storage temperature data and record related to the current time. System design related hardware circuit and related applications. STC89C52 microcontroller hardware circuit include temperature detection circuit smallest system, and real-time clock circuit, LCD display circuit, communication module circuit, etc. System programming mainly include main program, read temperature subroutine, the calculation of temperature subroutines, key processing procedures, LCD display procedures and data storage procedures, etc. Keywords STC89C52 microcontroller;DS18B20;display circuit目 录一、引言4(一)课题研究的背景4(二)课题研究的目的和意义4二、硬件电路的设计4(一)系统设计的框架4(二)单片机最小系统电路5(三)单片机的选型61.STC89C52单片机简介62.STC89C52单片机时序63.STC89C52单片机引脚介绍6(四)温度传感器电路9(五)LCD显示电路10(六)按键接口电路10(七)升温降温电路11(八)报警电路11三、系统软件设计12(一)温度采集子程序12图10 温度采集流程图13(二)按键扫描子程序13图11 按键扫描子程序14(二)温度控制子程序14四、结束语15参考文献16附件1:系统原理图17附件2:源程序18一、引言(一)课题研究的背景工业控制是计算机的一个重要应用领域,计算机控制系统正是为了适应这一领域的需要而发展起来的一门专业技术,它主要研究如何将计算机技术、通过信息技术和自动控制理论应用于工业生产过程,并设计出所需要的计算机控制系统。随着微机测量和控制技术的迅速发展与广泛应用,以单片机为核心的温度采集与控制系统的研发与应用在很大程度上提高了生产生活中对温度的控制水平。本设计就是基于单片机STC89C52温度控制系统的设计,通过本次课程实践,我们更加的明确了单片机的广泛用途和使用方法,以及其工作的原理。(二)课题研究的目的和意义随着社会的发展,温度的测量及控制变得越来越重要。本文采用单片机STC89C52设计了温度实时测量及控制系统。单片机STC89C52 能够根据温度传感器DS18B20 所采集的温度在液晶屏上实时显示,通过控制从而把温度控制在设定的范围之内。所有温度数据均通过液晶显示器LCD显示出来。系统可以根据时钟存储相关的数据。通过该课程的学习使我们对计算机控制系统有一个全面的了解、掌握常规控制算法的使用方法、掌握简单微型计算机应用系统软硬的设计方法,进一步锻炼同学们在微型计算机应用方面的实际工作能力。二、硬件电路的设计(一)系统设计的框架本课题设计的是一种以STC89C52单片机为主控制单元,以DS18B20为温度传感器的温度控制系统。该控制系统可以实时存储相关的温度数据并记录当前的时间。其主要包括:电源模块、温度采集模块、按键处理模块、实时时钟模块、数据存储模块、LCD显示模块、通讯模块以及单片机最小系统。图1 系统设计框架(二)单片机最小系统电路在课题设计的温度控制系统设计中,控制核心是STC89C52单片机,该单片机为51系列增强型8位单片机,它有32个I/O口,片内含4K FLASH工艺的程序存储器,便于用电的方式瞬间擦除和改写,而且价格便宜,其外部晶振为12MHz,一个指令周期为1S。使用该单片机完全可以完成设计任务,其最小系统主要包括:复位电路、震荡电路以及存储器选择模式(EA脚的高低电平选择),电路如下图2所示:图2 单片机最小系统(三)单片机的选型本课题设计的温度控制系统主控制芯片选型为STC89C52单片机,其特点如下:1.STC89C52单片机简介目前,51系列单片机在工业检测领域中得到了广泛的应用,因此我们可以在许多单片机应用领域中,配接各种类型的语音接口,构成具有合成语音输出能力的综合应用系统,以增强人机对话的功能。STC89C52单片机是深圳宏晶科技有限公司生产的一种单片机,在一小块芯片上集成了一个微型计算机的各个组成部分。每一个单片机包括:一个8位的微型处理器CPU;一个512K的片内数据存储器RAM;4K片内程序存储器;四个8位并行的I/O接口P0-P3,每个接口既可以输入,也可以输出;两个定时器/记数器;五个中断源的中断控制系统;一个全双工UART的串行I/O口;片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接。最高允许振荡频率是12MHZ。以上各个部分通过内部总线相连接。2.STC89C52单片机时序 STC89C52单片机的一个执器周期由6个状态(s1s6)组成,每个状态又持续2个震荡周期,分为P1和P2两个节拍。这样,一个机器周期由12个振荡周期组成。若采用12MHz的晶体振荡器,则每个机器周期为1us,每个状态周期为16us;在一数情况下,算术和逻辑操作发生在N期间,而内部寄存器到寄存器的传输发生在P2期间。对于单周期指令,当指令操作码读人指令寄存器时,使从S1P2开始执行指令。如果是双字节指令,则在同一机器周期的s4读人第二字节。若为单字节指令,则在51期间仍进行读,但所读入的字节操作码被忽略,且程序计数据也不加1。在加结束时完成指令操作。多数STC89C52指令周期为12个机器周期,只有乘法和除法指令需要两个以上机器周期的指令,它们需4个机器周期。 对于双字节单机器指令,通常是在一个机器周期内从程序存储器中读人两个字节,但Movx指令例外,Movx指令是访问外部数据存储器的单字节双机器周期指令,在执行Movx指令期间,外部数据存储器被访问且被选通时跳过两次取指操作。3.STC89C52单片机引脚介绍STC89C52单片机的40个引脚中有2个专用于主电源引脚,2个外接晶振的引脚,4个控制或与其它电源复用的引脚,以及32条输入输出I/O引脚。下面按引脚功能分为4个部分叙述个引脚的功能。(1)电源引脚Vcc和VssVcc(40脚):接+5V电源正端;Vss(20脚):接+5V电源正端。(2)外接晶振引脚XTAL1和XTAL2XTAL1(19脚):接外部石英晶体的一端。在单片机内部,它是一个反相放大器的输入端,这个放大器构成采用外部时钟时,对于HMOS单片机,该引脚接地;对于CHOMS单片机,该引脚作为外部振荡信号的输入端。XTAL2(18脚):接外部晶体的另一端。在单片机内部,接至片内振荡器的反相放大器的输出端。当采用外部时钟时,对于HMOS单片机,该引脚作为外部振荡信号的输入端。对于CHMOS芯片,该引脚悬空不接。(3)控制信号或与其它电源复用引脚 控制信号或与其它电源复用引脚有RST/VPD、ALE/P、PSEN和EA/VPP等4种形式。(A)RST/VPD(9脚):RST即为RESET,VPD为备用电源,所以该引脚为单片机的上电复位或掉电保护端。当单片机振荡器工作时,该引脚上出现持续两个机器周期的高电平,就可实现复位操作,使单片机复位到初始状态。当VCC发生故障,降低到低电平规定值或掉电时,该引脚可接上备用电源VPD(+5V)为内部RAM供电,以保证RAM中的数据不丢失。(B)ALE/ P (30脚):当访问外部存储器时,ALE(允许地址锁存信号)以每机器周期两次的信号输出,用于锁存出现在P0口的低(C)PSEN(29脚):片外程序存储器读选通输出端,低电平有效。当从外部程序存储器读取指令或常数期间,每个机器周期PESN两次有效,以通过数据总线口读回指令或常数。当访问外部数据存储器期间,PESN信号将不出现。(D)EA/Vpp(31脚):EA为访问外部程序储器控制信号,低电平有效。当EA端保持高电平时,单片机访问片内程序存储器4KB(MS52子系列为8KB)。若超出该范围时,自动转去执行外部程序存储器的程序。当EA端保持低电平时,无论片内有无程序存储器,均只访问外部程序存储器。对于片内含有EPROM的单片机,在EPROM编程期间,该引脚用于接21V的编程电源Vpp。 (4)输入/输出(I/O)引脚P0口、P1口、P2口及P3口(A).P0口(39脚22脚):P0.0P0.7统称为P0口。当不接外部存储器与不扩展I/O接口时,它可作为准双向8位输入/输出接口。当接有外部程序存储器或扩展I/O口时,P0口为地址/数据分时复用口。它分时提供8位双向数据总线。对于片内含有EPROM的单片机,当EPROM编程时,从P0口输入指令字节,而当检验程序时,则输出指令字节。(B).P1口(1脚8脚):P1.0P1.7统称为P1口,可作为准双向I/O接口使用。对于MCS52子系列单片机,P1.0和P1.1还有第2功能:P1.0口用作定时器/计数器2的计数脉冲输入端T2;P1.1用作定时器/计数器2的外部控制端T2EX。对于EPROM编程和进行程序校验时,P0口接收输入的低8位地址。(C).P2口(21脚28脚):P2.0P2.7统称为P2口,一般可作为准双向I/O接口。当接有外部程序存储器或扩展I/O接口且寻址范围超过256个字节时,P2口用于高8位地址总线送出高8位地址。对于EPROM编程和进行程序校验时,P2口接收输入的8位地址。(D).P3口(10脚17脚):P3.0P3.7统称为P3口。它为双功能口,可以作为一般的准双向I/O接口,也可以将每1位用于第2功能,而且P3口的每一条引脚均可独立定义为第1功能的输入输出或第2功能。P3口的第2功能见下表 表1 单片机P3.0管脚含义引脚第2功能P3.0RXD(串行口输入端0)P3.1TXD(串行口输出端)P3.2INT0(部中断0请求输入端,低电平有效)P3.3INT1(中断1请求输入端,低电平有效)P3.4T0(时器/计数器0计数脉冲端)P3.5T1(时器/计数器1数脉冲端)P3.6WR(部数据存储器写选通信号输出端,低电平有效)P3.7RD(部数据存储器读选通信号输出端,低电平有效)综上所述,MCS51系列单片机的引脚作用可归纳为以下两点:1).单片机功能多,引脚数少,因而许多引脚具有第2功能;2).单片机对外呈3总线形式,由P2、P0口组成16位地址总线;由P0口分时复用作为数据总线。(四)温度传感器电路采用一线制数字温度传感器DS18B20来作为本课题的温度传感器。传感器输出信号进4.7K的上拉电阻直接接到单片机的P1.0引脚上。DS18B20温度传感器是美国达拉斯(DALLAS)半导体公司推出的应用单总线技术的数字温度传感器。该器件将半导体温敏器件、A/D转换器、存储器等做在一个很小的集成电路芯片上。本设计中温度传感器之所以选择单线数字器件DS18B20,是在经过多方面比较和考虑后决定的,主要有以下几方面的原因:(1)系统的特性:测温范围为-55+125 ,测温精度为士0.5;温度转换精度912位可变,能够直接将温度转换值以16位二进制数码的方式串行输出;12位精度转换的最大时间为750ms;可以通过数据线供电,具有超低功耗工作方式。(2)系统成本:由于计算机技术和微电子技术的发展,新型大规模集成电路功能越来越强大,体积越来越小,而价格也越来越低。一支DS18B20的体积与普通三极管相差无几,价格只有十元人民币左右。(3)系统复杂度:由于DS18B20是单总线器件,微处理器与其接口时仅需占用1个I/O端口且一条总线上可以挂接几十个DS18B20,测温时无需任何外部元件,因此,与模拟传感器相比,可以大大减少接线的数量,降低系统的复杂度,减少工程的施工量。(4)系统的调试和维护:由于引线的减少,使得系统接口大为简化,给系统的调试带来方便。同时因为DS18B20是全数字元器件,故障率很低,抗干扰性强,因此,减少了系统的日常维护工作。DS18B20温度传感器只有三根外引线:单线数据传输总线端口DQ ,外供电源线VDD,共用地线GND。DS18B20有两种供电方式:一种为数据线供电方式,此时VDD接地,它是通过内部电容在空闲时从数据线获取能量,来完成温度转换,相应的完成温度转换的时间较长。这种情况下,用单片机的一个I/O口来完成对DS18B20总线的上拉。另一种是外部供电方式(VDD接+5V),相应的完成温度测量的时间较短。在本设计中采用外部供电方式实现DS18B20传感器与单片机的连接,其接口电路如图4所示。图3 温度传感器接口 (五)LCD显示电路本课题设计的温度控制系统是采用液晶屏128*64作为显示模块,其接口原理图如下图6所示:图4液晶显示接口电路 (六)按键接口电路本课题设计采用的键盘模块,其接口原理图如下图8所示:图6 键盘模块电路(七)升温降温电路本设计采用了光电耦合器控制三极管,再进一步控制继电器线圈,这样做的好处:信号单向传输,输入端与输出端完全实现了电气隔离,输出信号对输入端无影响,抗干扰能力强,工作稳定,无触点,使用寿命长,传输效率高。如下图所示。图7 升降温模块电路(八)报警电路本设计采用蜂鸣音报警电路。连接图如图3-6所示,当输出高电平“1”时,晶体三极管导通,压电蜂鸣器两端获得约+5V电压而鸣叫;当输出低电平“0”时,三极管截止,蜂鸣器停止发声。 图8 三极管驱动的蜂鸣音报警电路报警电路与单片机的P1.7口相连,当单片机输出一个低电平时,蜂鸣器就会发出报警信号,说明温度已经超过规定的上下限值,外部输出设备应该启动进行相应的措施。只用在人按下复位按钮或温度在允许的范围内报警电路就不会触动。三、系统软件设计系统的软件主要是采用C语言,对单片机进行变成实现各项功能。主程序对模块进行初始化,而后调用读温度、处理温度、显示、键盘等模块。用的是循环查询方式,来显示和控制温度,主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值并负责调用各子程序,其程序流程如图10系统程序流程图。图9系统程序流程图(一)温度采集子程序 温度采集就是把温度传感器采集到的数据传输给单片机,供显示器显示和温度控制部分的判定。程序流程框图如图12所示。图10 温度采集流程图 (二)按键扫描子程序按键扫描就是通过按键调节设定温度的上下限的值和控制单片机的复位。按键扫描程序流程图如图14。图11 按键扫描子程序(二)温度控制子程序温度控制就是通过采集到的温度预设定的温度比较,当温度高于设定的温度上限时,并通过光电耦合器和继电器的动作,继而启动通风散热设备,使棚内的温度降低;当温度低于设定的温度下限时,并通过光电耦合器和继电器的动作,继而启动加热设备,是棚内的温度升高。温度控制程序流程图如下图所示。图12 温度控制子程序四、结束语本设计是一个温度自动控制系统。系统温度可以在一定范围内由人工设定,并能在环境温度降低时实现自动通风降温,在环境温度升高时实现自动升温,以保持温度在设定的范围内。通过此次毕业论文的课题设计,我们学会了怎样把所学的书本知识应用于实践中去,并学会了如何去思考整个控制系统的软硬件设计。参考文献1 李广弟,朱月秀,王秀山.单片机基础北京航空航天大学出版社,2001(07).2 蔡美琴,张为民等.MCS-51系列单片机系统及其应用高等教育出版社,2004(06).3 张毅刚,等.MCS-51单片机应用设计M.哈尔滨工业大学出版社,1997.4 刘瑞星,胡健等.Protel DXP 实用教程机械工业出版社,2003(04).5 于海生. 计算机控制技术 机械工业出版社 2007(05).6 谭浩强. C程序设计 清华大学出版社.7 康华光. 电子技术基础 模拟部分 高等教育出版社 1998(08).8 余锡存. 单片机原理与接口技术 西安电子科技大学出版社,2003.附件1:系统原理图附件2:源程序#include<reg52.h>#include<stdio.h>#define uchar unsigned char#define uint unsigned intsbit leden=P22;sbit ledrs=P20;sbit ds=P27;sbit led0=P36;/加热端口sbit Fan=P37; /风扇端口sbit key1=P10;/按一下,温度上限加1sbit key2=P12; /按一下,温度上限减1sbit key3=P14; /按一下,温度下限加1sbit key4=P16; /按一下,温度下限减1sbit Tru=P17;uint temp;float f_temp; uchar TFLAG;uint num=280; /温度上限uint num2=150; /温度下限unsigned char disdata4;void delay(uint z) /延时uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void delayms(uint xms) /延时 uint i,j; for(i=xms;i>0;i-) for(j=10;j>0;j-);void write_com(uchar com) /lcd1602写指令ledrs=0;P0=com;delay(5);leden=1;delay(5);leden=0;void write_date(uchar date) /lcd1602写数据ledrs=1;P0=date;delay(5);leden=1;delay(5);leden=0;void init() /lcd1602初始化leden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);void dsreset(void) /ds18b20初始化uint i;ds=0;i=103;while(i>0)i-;ds=1;i=4;while(i>0)i-;bit tempreadbit(void) /ds18b20读字节uint i;bit dat;ds=0;i+;ds=1;i+;i+;dat=ds;i=8;while(i>0)i-;return(dat);uchar tempread(void) /ds18b20读字uchar i,j,dat;dat=0;for(i=1;i<=8;i+)j=tempreadbit();dat=(j<<7)|(dat>>1);return(dat);void tempwritebyte(uchar dat) /ds18b20写字uint i;uchar j;bit testb;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-; elseds=0;i=8;while(i>0)i-;ds=1;i+;i+;void tempchange(void) dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0x44); /ds18b20温度转换指令uint get_temp() /ds18b20温度转换uchar a,b;dsreset();delay(1);tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread();b=tempread();temp=b;temp<<=8;temp=temp|a;if(temp<0x0800)f_temp=temp*0.0625;TFLAG=0;elsef_temp=(temp)+1;f_temp=f_temp*0.0625;TFLAG=1;temp=f_temp*10;return temp; void warn() /闪烁报警led0=1;delay(100);led0=0;void warn1() /蜂鸣器报警Tru=1;delay(100);Tru=0; void motor() / 马达转动 Fan=1;delay(100);Fan=0;void deal(uint t) /数据处理if(t>num)|(t<num2)warn1();elseTru=0;if(t>num)motor();elseFan=0; if(t<num2)warn();elseled0=0;void keyscan() /按键扫描if(key1=0)delayms(1);if(key1=0)num=num+10;while(!key1);if(key2=0)delayms(1);if(key2=0)num=num-10;while(!key2);if(key3=0)delayms(1);if(key3=0)num2=num2+10;while(!key3);if(key4=0)delayms(1);if(key4=0)num2=num2-10;while(!key4);void display(uint j) /显示 uchar FLAGDAT; disdata0=j/1000+0x30; disdata1=j%1000/100+0x30; disdata2=j%100/10+0x30; disdata3=j%10+0x30; if(TFLAG=0) FLAGDAT=0x20; else FLAGDAT=0x2d; if(disdata0=0x30) disdata0=0x20; if(disdata1=0x30) disdata1=0x20; write_com(0x81);write_date(0x48); /Hwrite_com(0x82);write_date(num/100+0x30); /温度上限第一位write_com(0x83);write_date(num%100/10+0x30); /温度上限第二位write_com(0x84);write_date(0x20); /空格write_com(0x85);write_date(0x4c); /Lwrite_com(0x86);write_date(num2/100+0x30); /温度下限第一位write_com(0x87);write_date(num2%100/10+0x30);/温度下限第二位write_com(0x40+0x82); write_date(FLAGDAT); /温度大于零不显示,温度小于零显示负号- write_com(0x40+0x83); write_date(disdata0); /温度第一位 write_com(0x40+0x84); write_date(disdata1); /温度第二位 write_com(0x40+0x85);write_date(disdata2); /温度第三位 write_com(0x40+0x86); write_date(0x2E); /小数点 write_com(0x40+0x87); write_date(disdata3); /温度第四位void main() /主程序init();dsreset(); while(1) tempchange(); keyscan(); deal(get_temp(); display(get_temp(); 第 27 页 共 27 页