基于AT89S52温度测温.doc_第1页
基于AT89S52温度测温.doc_第2页
基于AT89S52温度测温.doc_第3页
基于AT89S52温度测温.doc_第4页
基于AT89S52温度测温.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

基于单片机AT89S52的测温系统摘要:本文介绍以单片机AT89S52为核心的温度显示报警系统。本系统采用DS18B20采集现场温度,用LED数码管显示温度值,并可根据需要设置控制温度的上限,系统具有超过设置上限自动报警的功能。关键词:测温 AT89S52 DS18B20 报警0 引言 温度与人们的生活环境息息相关,所以温度测量常被关注,研究温度测量方法和装置显得尤为重要。采用单片机对温度进行控制,不仅电路简单,控制方便,更重要的是采集数据更为准确,很好的满足了生活中的许多要求。 本文设计了基于AT89S52单片机与DS18B20的温度测量系统。其中以AT89S52单片机为控制内核,采用DS18B20温度传感器采集现场温度,通过利用AT89S52单片机,硬件电路的设计,测温控制系统直接将数字量输出到单片机通过LED显示出来,无须经过变换电路。并且系统具有温度报警的功能,当温度超过所设定的温度上限时,蜂鸣器则发出鸣叫。 1 硬件电路设计 1.1 基于AT89S52的温度测量系统的系统框图 本系统硬件主要包括单片机的最小系统,温度采集电路,驱动电路,复位电路,键盘控制,报警电路,显示电路。系统总框图如图所示 AT89S52DS18B20温度传感器LED显示电路 键盘控制蜂鸣器报警电路 晶体振荡电路 复位电路 电源电路 图1 系统总框图1.2 系统原理分析 系统总原理图如图2所示(1) AT89S52单片机AT89S52是一种低功耗、高性能CMOS8位微控制器,片内具有8K字节的EPROM和26字节RAM。具有ISP(在系统可编程)功能。利用AT89S52的在线编程功能,不需要将CPU从电路板上取下来,也不需要专用的编程器,只需要从电脑中将编好的程序烧写到单片机中,调试修改都很方便。AT89S52是整个系统的核心处理器,本系统不仅可以利用十进制实时显示温度值,还可根据需要设置控制温度的上限,当温度超过设定值时,系统自动产生报警系统。 图2 测温系统总原理图 图3 电源部分(2)电源部分 电源部分由外部电源输入口,为+5V,输入接口采用通用接口。外部电源接入系统后,接一个开关控制,接一个发光二极管以及1K的电阻,经过电容10uf的铝电解电容和15pf的瓷片电容的滤波后接入整个系统。接好电源部分后立即插电调试,观看开关以及发光二极管是否正常工作。电源部分原理电路图如图3(3)温度传感器DS18B20 温度传感器是本系统设计的关键,设计中采用的温度传感器是DS18B20。DS18B20是一种改进型智能温度传感器,全部传感器件及转换电路集成在形如三极管的集成电路中,可以满足-55摄氏度到+125摄氏度范围的温度测量,且测量精确,可以在一秒内把温度转化成数字,测得的温度值储存在两个八位的RAM中,单片机可以直接从中读出数据并且转换成十进制温度值,大大提高了系统的抗干扰性,适合恶劣的环境的现场测温。其温度检测电路图如图原理中所示。 DS18B20管脚1VCC接地,管脚2 DQ为数字信号输入/输出端,接到AT89S52的P2.4端,4.7K的电阻R425为信号和5V电源之间的上拉电阻,管脚3GND接地中间接0.1uF的瓷片电容C407。 (4)晶体振荡电路 单片机内由反相放大器所构成的时钟振荡电路,XATL1和XATL2分别为振荡电路的输入端和输出端。本系统采用内部方式,XATL1和XATL2引脚上外接定时元件。采用11.0592MHz的石英晶体和两个15pF瓷片电容C42和C43组成的并联谐振回路,内部振荡电路就产生自激振荡,产生一定的时钟信号送到单片机内部的各个单元。电路中两个电容 C42,C43的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。 (5)复位电路 系统的复位电路如原理图中所示,在RESET输入端出现高电平时实现复位和初始化。在振荡器运行的情况下,实现复位操作,必须使RST引脚至少保持两个机器周期的高电平。CPU在第二个周期内执行内部复位操作,以后每一个周期重复一次,直至RST端电平变低。复位器件不产生ALE及PSEN信号。当RST引脚返回低电平后,CPU从0地址开始执行程序。本设计采用开关复位电路,使用方便,当开关S100按下时,温度复位。这样就不用再重启单片机电源就可以实现复位。 (6)键盘控制 控制键盘由四个独立按键S101,S102,S104,S103,一端分别与单片机的P3.3,P2.2, P2.1,P2.0以及1K的上拉电阻相连,另一端接地。按键S101是中断按键,当S101按下时,系统进入报警温度设置状态,S103和S104分别是报警温度值增加,减少的键,可以根据需要设定自己想要的报警温度值。按下S102则退出报警温度设置状态,显示当前温度值。(7)报警电路 本设计采用蜂鸣器报警电路,由3904三极管和蜂鸣器组成,三极管作蜂鸣器的驱动电流,蜂鸣器的控制接到单片机的P3.4口。在三极管与单片机中接1K的上拉电阻。(8)显示模块 在本设计中我们采用动态显示方式驱动LED数码管工作,由于数码管的驱动电流较大,所以在设计时利用三极管3904做为位码驱动,电路结构简单,并且可以实现单片机I/O口的并用,显示效果直观,明亮,调试容易,成本较低。2 硬件电路焊接和调试在分析设计好电路原理之后就开始进行焊接工作了。首先焊接的是电源部分,在焊好电源后便进行上电调试电源,发光二极管正常发光。然后焊接的是单片机,驱动电路部分,值得注意的是晶振极可能的靠近单片机以保证能够更好的驱动。焊接完ISP下载接口得进行调试,将简单的程序下到单片机中也成功,保证了单片机能够可靠下载。接着焊接LED数码管,并进行简单程序的下载,观看数码管是否亮。而在此过程中发现了问题。首先是插上电源,并没有按下开关,数码管便亮了,还有数码管也只有下部分亮,而上部分并不亮。通过自己的检查发现电源直接接到5V的电源线上,并没有通过开关再接到电源线,才导致了开关未开,数码管直接亮。数码管的问题,发现原来是数码管的引脚顺序在翻到板子后面时弄反,引脚的焊接错误所以导致了数码管不能正常显示。在重新焊接调试之后,数码管能正常显示。最后焊接了键盘,将程序下到单片机中并反复进行了程序的调试。因为书中直接给出了大部分的程序,但是书中所用的矩阵式键盘扫描,而焊接电路中所用的是简单的独立式的键盘扫描,所以修改成简单的独立式键盘程序。还修改显示部分,增加延时,防止闪烁。 经过反复的程序调试之后,最终上电后,数码管显示85并伴有蜂鸣声,随即显示当前温度,按下S101数码管显示30,进入设定报警温度设置,按S103数码管显示值递增,按S104显示值递减,按下S102退出报警温度的设置。无论在什么情况下按下S100,系统复位,数码管显示当前温度。在用手对DS18B20直接接触时,温度不断增加,而当温度超过30(设定的报警温度),蜂鸣器响起报警。当手离开DS18B20时,温度值逐渐减小,并且蜂鸣器停止报警。一切演示结果都与设计的初衷一样,功能正常,表示了所焊接的系统成功。在本次焊接中所用到的器件清单见表1 型号 位置 数量 0电阻 R10 1100电阻 R41,R43,R45,R47,R109 54.7k电阻 R425 1100K电阻 R1,R2,R3,R4 4 1K排阻 RP1 1 1K电阻 R5,R6,R7,R8,R9,R11,R12,R13,R14 R40,R42,R44R46,R108,R112 1510uF铝电解 C46,C44 215pF瓷片电容 C42,C43 2 0.1uF瓷片电容 C47,C407 2 11.0592MHz晶振 X101 118B20温度传感器 U402 1 三极管3904 V1 V2 V3 V4 V5 5 单片机AT89S52 U1 1蜂鸣器 A1 1按键 S100,S101,S102,S103,S104 5 开关 S 1 4位共阳数码管 U8 1 发光二极管 VD108 1 电源插口 1 ISP下载器 1根 导线 若干万能板 1块 表1 器件清单2 系统软件设计 2.1 系统主流程图 本系统采用AT89S52作为核心处理器件,把经过DS18B20现场温度数据存入AT89S52的内部数据存储器,判断是否为正温度。如果为负温度,数码管则直接显示当前温度,如果是正温度,那么读取温度值并进行温度值的转换,并与预先设定的温度值进行比较,比预先设定的温度值大就报警,数码管显示当前温度。进行温度控制程序的设计应考虑一下几个问题:实时采集温度;温度显示中采用4位LED显示当前温度;按键处理;超过上限温度报警。软件设计主要有主程序,初值设定子程序,温度读取子程序,数码管显示子程序等。初值设定子程序完成对温度初值的设定及保存,部分程序如下:unsigned char tempL=0,tempH=0;unsigned int temperature ,negtemper; /温度值保存在temperature里 开始图4 主流程图 初始化是否为正温度 N Y 读取温度值 读取温度值 温度值转换 数码显示 是否大于报警温度值 Y NBEEP OFFBEEP ON 数码管显示 返回图5 中断流程图 初始化键盘扫描 取键值+键按下 N键按下温度值增1 Y N Y退出中断温度值减1 N Y数码管显示 返回3 总结 在温度测量系统的设计中,为了使硬件电路设计尽可能合理,应注意以下几方面:首先尽可能采用功能强的芯片,以简化电路,功能强的芯片可以代替若干普通芯片,随着生产工艺的提高,新型芯片的的价格不断下降,并不一定比若干普通芯片价格的总和高。其次留有设计余地。在设计硬件电路时,要考虑到将来修改扩展的方便。因为很少有一锤定音的电路设计,如果现在不留余地,将来可能要为一点小小的修改或扩展而被迫进行全面返工。最后是I/O端口,有些问题不是靠单纯的软件措施来解决的,如有些新的信号需要采集,就必须增加输入检测端;有些物理量需要控制,就必须增加输出端。如果在硬件电路设计就预留出一些I/O端口,虽然当时空着没用,那么用的时候就派上用场了。 设计完成之后,插上电源,数码管显示85并伴有蜂鸣声,然后显示当前温度,按下S101数码管显示30,进入设定报警温度设置,按S103数码管显示值递增,按S104显示值递减,按下S102退出报警温度的设置。无论在什么情况下按下S100,系统复位,数码管显示当前温度。在用手对DS18B20直接接触时,温度增加,当温度超过30(设定的报警温度),蜂鸣器响起报警。一切功能正常,所焊接的系统成功。 在做完本系统之后,进行扩展功能的设计,AT89S52单片机本身提供了一组全双工串行传输口,由TXD引脚来传送串行数据,而由RXD引脚来接受数据,可是其工作逻辑电平皆为TTL电平(0V,5V)。所以,单片机与PC机之间的数据通信必须经过RS-232信号(+12V,12V)电平的转换,本系统采用MAX232电平转换芯片来实现RS-232标准接口通信。通过串口将采集到的温度数据发送到计算机在这次设计中仅限于理论部分。以前就知道单片机课程的重要性,也知道单片机课程是一门很实用,很难的设计。的难度,曾见过大四同学为忙毕业设计而忙得焦头烂额,所以开始便对单片机就敬畏。在一个学期的学习过程中,自己对单片机只是在理论知识上懂得皮毛而已。这个设计用到了单片机,电路等方面的知识,通过这次课程设计,使我对单片机及其附属电路有了一定的了解,对课本上的知识有了进一步的掌握,也深刻明白了自己的不足。 这次测温系统的设计直接引用书本中老师给出的原理图,并加以改正,使其更符合现实的需要。通过一个多星期的努力,顺利的完成了测温系统的制作,此次实践相对来说程序比较多,也有很多值得我们去学习的地方。从作品的构思、用实验板的测试、对要制作板的构造,系统的调试这是一个比较复杂的过程,这是一次对我们的考验,这是给我们的一个锻炼机会。虽然是直接引用的书中的电路图,但在焊接中还是遇到许多实际的问题,蜂鸣器的声效不是很好等等,需要查阅许多资料。在老师同学的帮助下也是顺利完成了本次的设计。我很珍惜这次的实践,用心的去完成每个步骤,努力去达到所要得到的理想效果,作品完成了,我感觉到我感觉到自己从课本上学到的理论知识和实践仍有很大的差别,很多元器件根本不知道有什么功效,怎样在电路中取值等等。有的知识,自己感觉已经掌握得差不多了,但是实际操作起来就有问题出现了。我遇到了不少问题,花费了很多的时间。这让我重新反思我们的学习,深刻领悟到我们这个专业动手,实践的重要性。我们各方面的能力都上了一层,包括焊接、编程、画图等等。这些课程能促进我的进步,能够使我对学习本专业增加信心,锻炼了我们各方面的能力。这次的课程设计,让我学到了很多书本上学不到的东西,学到了实际应用时,是取用成本的最小化,做设计不仅要考虑大的方面,小的方面也必须做到。 对于这门单片机这门课程,我觉得老师很严格要求我们,对我们以后的学习有很大的帮助。老师在平时上课中应该多与同学们互动,让同学们都参与其中。附程序:/DS18B20温度传感器程序#include #define Alarm 10sbit Beep=P34;sbit DQ=P24; /数据传输线接单片机的相应的引脚unsigned char tempL=0,tempH=0; /设全局变量unsigned char flag=0;unsigned int temperature,negtemper; /温度值保存在temperature里unsigned char idata addrdat2=0x0,0x0;unsigned char tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;unsigned char tab1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10; unsigned char dispbuf3=0,0,0;unsigned char warning=30;bit on=1,off=0; /* /延时子程序 /*void delay(unsigned int i) while(i-);void beep( bit i) Beep=i; /*/初始化程序Init_DS18B20(void) unsigned char x=0; DQ=1; /DQ先置高 delay(8); /稍延时 DQ=0; /发送复位脉冲 delay(85); /延时(480us) DQ=1; /拉高数据线 delay(14); /等待(1560us) x=DQ; /用X的值来判断初始化有没有成功,18B20存在的话X=0,否则X=1 delay(20); /* /读一个字节ReadOneChar(void) /主机数据线先从高拉至低电平1ms以上,再使数据线升为高电平,从而产生读信号 unsigned char i=0; /每个读周期最短的持续时间为60us,各个读周期之间必须有1ms以上的高电平恢复期 unsigned char dat=0; for (i=8;i0;i-) /一个字节有8位 DQ=1; delay(1); DQ=0; dat=1; DQ=1; if(DQ) dat|=0x80; delay(4); return(dat);/* /写一个字节WriteOneChar(unsigned char dat) unsigned char i=0; /数据线从高电平拉至低电平,产生写起始信号。15ms之内将所需写的位送到数据线上, for(i=8;i0;i-) /在1560ms之间对数据线进行采样,如果是高电平就写1,低写0发生。 DQ=0; /在开始另一个写周期前必须有1ms以上的高电平恢复期。 DQ=dat&0x01; delay(5); DQ=1; dat=1; delay(4);/*ReadTemperature(void) Init_DS18B20(); /初始化 WriteOneChar(0xcc); /跳过读序列号的*作 WriteOneChar(0x44); /启动温度转换 delay(125); /转换需要一点时间,延时 Init_DS18B20(); /初始化 WriteOneChar(0xcc); /跳过读序列号的*作 WriteOneChar(0xbe); /读温度寄存器(头两个值分别为温度的低位和高位) tempL=ReadOneChar(); /读出温度的低位LSB tempH=ReadOneChar(); /读出温度的高位MSB temperature=(tempH*256)+tempL; /温度转换,把高低位做相应的运算转化为实际温度 return(temperature); /*void Dispbuf(unsigned int temper) dispbuf2=(temper4)/10;/取十位 dispbuf1=(temper4)%10;/取个位 if(temper&0x08)/小数位 dispbuf0=0x05; else dispbuf0=0; unsigned char getkey() /键盘扫描程序 P2=0xff;if (P2&0xff)=0xff) delay(500); if(P2&0xff)=0xff) return P2; if (P2&0xff)=0xfe) delay(500); if(P2&0xff)=0xfe) return P2; if (P2&0xff)=0xfd) delay(500);if (P2&0xff)=0xfd) return P2; if (P2&0xff)=0xfb) delay(500); if (P2&0xff)=0xfb) return P2; Inter0_process() interrupt 2 /外部中断1 un

温馨提示

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

评论

0/150

提交评论