基于AT89C51单片机温度报警系统设计与制作.docx
- 文档编号:4841876
- 上传时间:2022-12-10
- 格式:DOCX
- 页数:17
- 大小:283.14KB
基于AT89C51单片机温度报警系统设计与制作.docx
《基于AT89C51单片机温度报警系统设计与制作.docx》由会员分享,可在线阅读,更多相关《基于AT89C51单片机温度报警系统设计与制作.docx(17页珍藏版)》请在冰豆网上搜索。
基于基于AT89C51单片机温度报警系统设计与制作单片机温度报警系统设计与制作基于AT89C51单片机温度报警系统设计与制作一、摘要我们介绍的是一种基于单片机控制的数字温度报警,本温度系统具有多功能性,即可以当数字温度计使用,显示当前环境温度,又可以作为报警器使用,设置报警温度,当温度不在设置范围内时,可以报警,并采取措施使温度下降。
该温度报警系统控制器使用单片机AT89C51,测温传感器使DS18B20,用2位共阳极LED数码管,实现温度显示,能准确达到以上要求。
二、设计方案1、方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。
2、方案二进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。
温度报警系统电路设计总体设计方框图如图1所示图1总体设计方框图三、模块功能分析1、单片机主板电路单片机AT89C51具有低电压供电和体积小等特点,该模块包括中央处理CPU-AT89C51、时钟电路及复位电路;图2复位电路图3时钟电路2、DS18B20温度传感器与单片机的接口电路DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现位的数字值读数方式。
DS18B20是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。
该电路完成了信号的采集、转换和传输。
图43、上下限报警调整电路分别调整温度的上下限报警设置,有“+“、”“-”、“确定”等键图5上下限报警调整电路4、温度显示电路显示当前测得的温度,数码管采用74LS247驱动图6温度显示电路5、报警电路当环境温度超过设定温度时,蜂鸣器鸣叫,红灯点亮,发生报警;当人员发现警报时,可按图8中的按钮,暂时中断蜂鸣器的鸣叫。
图7蜂鸣器、亮灯报警电路图8中断电路6、控制电路该电路的作用是:
当测量温度超过设定温度时,小风扇以下转动,加快仪器散热,使温度保持在设定温度以下。
图9控制电路四、整体构造及功能整体电路图如下:
图10整体电路图实现的总体功能:
实现对环境温度的测量和显示能通过按键设置报警温度温度超过设置值时,产生光声报警报警同时系统自带小风扇转动以降低温度主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。
这样可以在一秒之内测量一次被测温度,其程序流程见下图所示附录:
源程序/*/*温度报警器*/*/#include#include#defineucharunsignedchar#defineTubeP0/数码管端口#defineKeyP1/键盘端口sbitDQ=P14;/温度传感器DS18B20数据传输端sbitBUZZER=P15;/蜂鸣器端口sbitRUN=P16;/运行指示灯端口sbitSET=P17;/设置指示灯端口sbitFeng=P33;/风扇端口bitStatus;/设置状态标志位bitWarning;/警报标志位bitInt;/外部中断标志位ucharOP1L;/原P1端低4位状态ucharNP1L;/现P1端低4位状态ucharFinT;/最终测得温度ucharLimT;/警报温度下限ucharCount;/定时器计数/*/#includeDelay.h#includeDisplay.h#includeInitialize.h#includeError.h#includeKeyScan.h#includeMeasure.h#includeInterrupt.h/*/*主程序*/*/voidmain()Initialize();/初始化do/开机自检,跳过默认初始的85Measure();while(FinT=0X55);while
(1)KeyScan();/键盘扫描Measure();/获取测量温度Display();/显示/*/*初始化*/*/voidInitialize()Status=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为边沿触发方式/*/*温度测量*/*/voidInitDS18B20();/初始化DS18B20voidWriteDS18B20(ucharch);/写DS18B20数据ucharReadDS18B20();/读DS18B20数据voidMeasure()ucharTemH;/保存传感器发送数据高8位ucharTemL;/保存传感器发送数据低8位InitDS18B20();WriteDS18B20(0XCC);/跳过ROM_nop_();InitDS18B20();WriteDS18B20(0XCC);/跳过ROM_nop_();WriteDS18B20(0X44);/发送温度转换指令Delay1ms(25);Delay1ms(25);Delay1ms(25);Delay1ms(25);/等待1s转换InitDS18B20();WriteDS18B20(0XCC);/跳过ROMWriteDS18B20(0XBE);/发送温度转换指令TemL=ReadDS18B20();/读低位温度值TemH=ReadDS18B20();/读高位温度值Delay1ms
(2);TemH=(TemH4);/保留温度值整数部分FinT=TemH;if(FinTLimT)/判断是否警报Warning=1;elseWarning=0;ucharReadDS18B20()/读DS18B20数据ucharch;ucharq;for(q=0;q1;DQ=0;_nop_();DQ=1;_nop_();_nop_();_nop_();_nop_();if(DQ=1)ch=ch|0X80;elsech=ch&0X7f;Delay15us(3);DQ=1;return(ch);voidWriteDS18B20(ucharch)/写DS18B20数据uchari;for(i=0;i1;_nop_();voidInitDS18B20()/初始化DS18B20DQ=0;Delay15us(33);/至少延时480usDQ=1;Delay15us(10);/至少延时100us/*/*显示*/*/voidDisplay()ucharT;if(Status=1)/判断状态T=LimT;elseT=FinT;T=T%10+T/10*16;/将2进制码转化为BCD码Tube=T;/数码管显示RUN=Warning;/运行指示灯显示BUZZER=!
Warning|Int;/蜂鸣器Feng=!
Warning;/风扇SET=!
Status;/设置指示灯显示Delay1ms(20);/*/*键盘扫描*/*/voidKeyScan()NP1L=Key;/读取按键状态NP1L=NP1L&0X0F;NP1L=NP1L0X0F;if(NP1L!
=OP1L)switch(NP1L)/判断按键case0X01:
/按键为“设置”Status=1;/进入设置状态break;case0X02:
/按键为“+1”if(Status=1)/判断是否为设置状态LimT+;/警报温度下限+1LimT=LimT%100;/超过99清零Delay1ms(255);elseError();break;case0X04:
/按键为“-1”if(Status=1)/判断是否为设置状态LimT-;/警报温度下限-1if(LimT0)LimT=0X63;/低于0变为99Delay1ms(255);elseError();break;case0X08:
/按键为“确认”Status=0;/返回测温状态break;default:
/多键按下Error();/出错复位break;NP1L=0X00;/重新初始化/*/*中断服务*/*/voidInt0(void)interrupt0Int=1;/外部中断标志位置1EX0=0;/关外部中断0中断允许TMOD=0X01;/设置定时器0工作在模式1TH0=0X3C;TL0=0XB0;/为T0赋初值,令其定时50msCount=0X3C;/设置计数次数ET0=1;/开T0中断允许TR0=1;/开T0中断/*/voidTimer0(void)interrupt1if(Count=0)/判断定时计数是否结束ET0=0;/关T0中断允许TR0=0;/关T0中断Int=0;/外部中断标志位置0EX0=1;/开外部中断0中断允许elseTL0=0XB0;/重新赋T0初值TH0=0X3C;Count-;/定时计数减1/*/*延迟函数*/*/voidDelay15us(ucharn)/延迟n*15usdo_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();n-;while(n);voidDelay1ms(uchardelay)/延迟delay*1msuchari;while(delay-)for(i=0;i124;i+);/*/*报错复位*/*/voidError()Tube=0XAA;/出错显示BUZZER=0;/鸣蜂鸣器RUN=1;/LED警报Delay1ms(255);/延迟Delay1ms(255);Delay1ms(255);Delay1ms(255);Delay1ms(255);(*(void(*)()0)();/软复位
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 AT89C51 单片机 温度 报警 系统 设计 制作
![提示](https://static.bdocx.com/images/bang_tan.gif)