基于AT89C51单片机温度报警系统设计及制作_第1页
基于AT89C51单片机温度报警系统设计及制作_第2页
基于AT89C51单片机温度报警系统设计及制作_第3页
基于AT89C51单片机温度报警系统设计及制作_第4页
基于AT89C51单片机温度报警系统设计及制作_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、一、摘要我们介绍的是一种基于单片机控制的数字温度报警,本温度系统具有多功能性,即可以当数字温度计使用,显示当前环境温度,又可以作为报警器使用,设置报警温度,当温度不在设置范围内时,可以报警,并采取措施使温度下降。 该温度报警系统控制器使用单片机AT89C51,测温传感器使DS18B20,用2位共阳极LED数码管,实现温度显示,能准确达到以上要求。 二、设计方案1、方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温

2、电路比较麻烦。2、 方案二 进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。温度报警系统电路设计总体设计方框图如图1所示 主 控 制 器单片机复位时钟振荡报警点按键调整 LED显示温 度 传 感器 器蜂鸣器报警小风扇转动图1总体设计方框图三、模块功能分析1、单片机主板电路单片机AT89C51具有低电压供电和体积小等特点,该模块包括中央处理CPU -AT89

3、C51、时钟电路及复位电路; 图2复位电路 图3 时钟电路2、DS18B20温度传感器与单片机的接口电路DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现位的数字值读数方式。DS18B20是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。该电路完成了信号的采集、转换和传输。图43、上下限报警调整电路 分别调整温度的上下限报警设置,有“+“、”“-”、“确定”等键图5上下限报警调整电路4、温度显示电路显示当前测得的温度,数码管采用74LS24

4、7驱动图6温度显示电路5、报警电路 当环境温度超过设定温度时,蜂鸣器鸣叫,红灯点亮,发生报警;当人员发现警报时,可按图8中的按钮,暂时中断蜂鸣器的鸣叫。 图7 蜂鸣器、亮灯报警电路 图8 中断电路6、控制电路 该电路的作用是:当测量温度超过设定温度时,小风扇以下转动,加快仪器散热,使温度保持在设定温度以下。图9控制电路四、整体构造及功能整体电路图如下:图10整体电路图实现的总体功能:l 实现对环境温度的测量和显示l 能通过按键设置报警温度l 温度超过设置值时,产生光声报警l 报警同时系统自带小风扇转动以降低温度主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度

5、值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见下图所示NY开始达到上限?DS18B20初始化初始化DS18B20存在吗?对DS18B20写指令读DS18B20转换温度小风扇转动显示温度NY报警附录:源程序/*/*温度报警器*/*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define Tube P0/数码管端口#define Key P1/键盘端口sbit DQ = P14;/温度传感器DS18B20数据传输端sbit BUZZER = P15;/蜂鸣器端

6、口sbit RUN = P16;/运行指示灯端口sbit SET = P17;/设置指示灯端口sbit Feng = P33;/风扇端口bit Status;/设置状态标志位bit Warning;/警报标志位bit Int;/外部中断标志位uchar OP1L;/原P1端低4位状态uchar NP1L;/现P1端低4位状态uchar FinT;/最终测得温度uchar LimT;/警报温度下限uchar Count;/定时器计数/*/#include"Delay.h"#include"Display.h"#include"Initialize

7、.h"#include"Error.h"#include"KeyScan.h"#include"Measure.h"#include"Interrupt.h"/*/*主程序*/*/void main()Initialize();/初始化do/开机自检,跳过默认初始的85Measure();while( FinT = 0X55 );while(1)KeyScan();/键盘扫描Measure();/获取测量温度 Display();/显示/*/*初始化*/*/void Initialize()Status

8、= 0;/初始化设置状态标志位Warning = 0;/初始化警报标志位BUZZER = 1;/初始化蜂鸣器状态RUN = 0;/初始化运行指示灯SET = 1;/初始化设置指示灯Feng = 1;/初始化风扇端口OP1L = 0X00;/初始化原P1低4位NP1L = 0X00;/初始化新P1低4位LimT = 0X1B;/初始化警报温度下限为27Count = 0X00;/初始化定时器计数单元EA = 1;/开总中断EX0 = 1;/开外部中断0中断允许IT0 = 1;/设置外部中断0为边沿触发方式/*/*温度测量*/*/void InitDS18B20(); /初始化DS18B20voi

9、d WriteDS18B20( uchar ch );/写DS18B20数据uchar ReadDS18B20();/读DS18B20数据 void Measure() uchar TemH;/保存传感器发送数据高8位uchar TemL;/保存传感器发送数据低8位 InitDS18B20(); WriteDS18B20( 0XCC );/跳过ROM _nop_();InitDS18B20(); WriteDS18B20( 0XCC );/跳过ROM_nop_(); WriteDS18B20( 0X44 );/发送温度转换指令 Delay1ms( 25 ); Delay1ms( 25 ); D

10、elay1ms( 25 ); Delay1ms( 25 );/等待1s转换 InitDS18B20(); WriteDS18B20( 0XCC );/跳过ROM WriteDS18B20( 0XBE );/发送温度转换指令 TemL = ReadDS18B20(); /读低位温度值 TemH = ReadDS18B20(); /读高位温度值 Delay1ms( 2 ); TemH = ( TemH<<4 )|( TemL>>4 );/保留温度值整数部分FinT = TemH; if( FinT > LimT )/判断是否警报Warning = 1;elseWarn

11、ing = 0; uchar ReadDS18B20()/读DS18B20数据 uchar ch; uchar q ; for( q=0; q<8; q+ ) ch = ch >> 1; DQ = 0; _nop_(); DQ = 1; _nop_();_nop_();_nop_();_nop_(); if( DQ = 1 )ch = ch | 0X80; elsech = ch & 0X7f;Delay15us( 3 ); DQ = 1; return( ch );void WriteDS18B20( uchar ch )/写DS18B20数据 uchar i; f

12、or( i=0; i<8; i+ ) DQ=0; Delay15us( 1 ); DQ = ch & 0X01; Delay15us( 3 ); DQ = 1; ch = ch >> 1; _nop_(); void InitDS18B20()/初始化DS18B20 DQ = 0; Delay15us( 33 );/至少延时480us DQ = 1; Delay15us( 10 );/至少延时100us /*/*显示*/*/void Display() uchar T;if( Status = 1 )/判断状态T = LimT;elseT = FinT;T = T %

13、 10 + T / 10 * 16;/将2进制码转化为BCD码 Tube = T;/数码管显示RUN = Warning;/运行指示灯显示BUZZER = !Warning | Int;/蜂鸣器Feng = !Warning;/风扇SET = !Status;/设置指示灯显示 Delay1ms( 20 ); /*/*键盘扫描*/*/void KeyScan()NP1L = Key;/读取按键状态 NP1L = NP1L & 0X0F;NP1L = NP1L 0X0F;if( NP1L != OP1L )switch(NP1L)/判断按键case 0X01:/按键为“设置”Status

14、= 1;/进入设置状态break;case 0X02:/按键为“+1”if( Status = 1)/判断是否为设置状态LimT+;/警报温度下限+1LimT = LimT % 100;/超过99清零Delay1ms(255);elseError();break;case 0X04:/按键为“-1”if( Status = 1)/判断是否为设置状态LimT-;/警报温度下限-1if( LimT < 0 )LimT = 0X63;/低于0变为99Delay1ms(255);elseError();break;case 0X08:/按键为“确认”Status = 0;/返回测温状态break

15、;default:/多键按下Error();/出错复位break;NP1L = 0X00;/重新初始化/*/*中断服务*/*/void Int0( void ) interrupt 0 Int = 1;/外部中断标志位置1EX0 = 0;/关外部中断0中断允许TMOD = 0X01;/设置定时器0工作在模式1TH0 = 0X3C;TL0 = 0XB0;/为T0赋初值,令其定时50msCount = 0X3C;/设置计数次数 ET0 = 1;/开T0中断允许TR0 = 1;/开T0中断/*/void Timer0( void )interrupt 1if( Count = 0 )/判断定时计数是

16、否结束ET0 = 0;/关T0中断允许TR0 = 0;/关T0中断Int = 0;/外部中断标志位置0EX0 = 1;/开外部中断0中断允许elseTL0 = 0XB0;/重新赋T0初值TH0 = 0X3C;Count -;/定时计数减1/*/*延迟函数*/*/void Delay15us( uchar n )/延迟n*15us do _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); n-; while( n );void Delay1ms(

温馨提示

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

评论

0/150

提交评论