完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx

上传人:b****3 文档编号:7792137 上传时间:2023-05-09 格式:DOCX 页数:25 大小:455.40KB
下载 相关 举报
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第1页
第1页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第2页
第2页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第3页
第3页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第4页
第4页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第5页
第5页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第6页
第6页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第7页
第7页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第8页
第8页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第9页
第9页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第10页
第10页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第11页
第11页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第12页
第12页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第13页
第13页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第14页
第14页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第15页
第15页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第16页
第16页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第17页
第17页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第18页
第18页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第19页
第19页 / 共25页
完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx

《完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx(25页珍藏版)》请在冰点文库上搜索。

完整word版基于单片机的火灾报警器设计与实现Word文件下载.docx

1.1选题背景

全世界几乎每天都有火灾发生。

城里的高层建筑,地下商场以及大型的建筑群日益增多。

火灾的隐患也伴随着社会的发展而逐年升高。

自动火灾报警系统就是为了保障人民生命财产安全而发明的,并且随着现代技术水平的不断提高。

在方式,功能,和结构上不断的完善。

家庭火灾的主要原因是麻痹大意,没有及时采取预防措施,本次设计的火灾报警器,是防止火灾最重要的手段之一,它的作用是使用18B20温度传感器,实时检测房间的温度,使用MQ-2实时检测房间。

一切正常时,绿灯亮,但温度超过预定值或有大量烟雾是,说明可能发生火灾时,蜂鸣器便会发出报警信号,且红灯亮。

1.2设计要求

要求:

(1)用单片机实现;

(2)用C语言编程;

(3)硬件电路板布局合理;

(4)使用18B20温度传感器,实时检测房间的温度,且使用数码管显示温度;

(5)使用烟雾传感器,实时检测房间;

(6)如果空气中有烟雾,则蜂鸣器报警,并点亮红灯;

若气体没有烟雾,则绿点亮表示正常;

(7)如果空气温度超过限定值,则认为发生火灾,并蜂鸣器报警,点亮红灯。

2设计原理

2.1硬件部分

火灾报警器分为三个部分:

温度传感器检测温度模块,烟雾传感器检测烟雾模块,数码管显示模块。

主控芯片采用AT89C52;

显示部分采用四位共阴数码管;

时钟电路采用12MHZ的石英晶体振荡器,将其和单片机对应的引脚正确连接,将晶振产生的时钟信号作为定时信号;

复位电路采用传统RC复位电路。

单片机的I/O口分配:

P1.0接温度传感器输出脚,P1.1接烟雾传感器模块的TTL信号;

P1.5接绿灯,P1.6接红灯,P1.7接蜂鸣器,P0口和P2口分别接数码管的段选和位选。

2.2软件部分

程序采用C语言进行编程,编程后利用KeiluVision4来进行编译,再生成的HEX文件通过下载口导入芯片中。

然后根据按键功能查看是否实现功能。

3硬件电路设计与分析

3.1硬件框架图

图1

3.2单片机最小系统

3.2.1STC89C52芯片介绍

STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,指令代码完全兼容传统8051使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

工作电压:

3.3V~5.5V;

工作频率范围:

0~40MHz;

用户应用程序空间为8K字节;

片上集成512字节RAM;

通用I/O口(32个),上电复位后为:

P0/P1/P2/P3是准双向口/弱上拉,P0作为I/O口用时,需加上拉电阻;

外部中断2个,下降沿中断或低电平触发电路;

共2个16位定时器/计数器。

即定时器T0、T1;

可通过可直接使用串口下载,串口(RxD/P3.0,TxD/P3.1)直接下载用户程序;

具有EEPROM(掉电储存)功能,内带4K字节EEPROM存储空间。

图2

3.2.2时钟电路

STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别是此放大器的输入端和输出端。

时钟可以由内部方式产生或外部方式产生在RXD和TXD引脚上外接定时元件,内部振荡器就产生自激振荡。

定时元件通常采用石英晶体和电容组成的并联谐振回路。

晶体振荡频率可以在1.2~12MHz之间选择,电容值的大小可对频率起微调的作用。

单片机最小系统起振电容C1、C2一般采用15~33pF,晶振一般采用12MHZ,并且电容离晶振越近越好,晶振离单片机越近越好。

时钟电路原理图:

图3

3.2.3复位电路

一般情况下,电容的大小是10uF,电阻的大小是10k,复位电路的原理是单片机RST引脚接收到2US以上的电平信号,只要保证电容的充放电时间大于2US,即可实现复位。

在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。

所以可以通过按键的断开和闭合在运行的系统中控制其复位,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。

复位电路原理图:

图4

3.3四位数码管 

3.3.1数码管的介绍

四位数码管是一种半导体发光器件,其基本单元是发光二极管。

数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个,引线已在内部连接完成,只需引出它们的各个笔划,公共电极分别由字母a,b,c,d,e,f,g,dp来表示,能显示4个数码管叫四位数码管。

图5

四位数码管的引脚图:

图6

3.3.2四位数码管共阳和共阴的区分

市面上的四位一体的数码管一般都没有数据表,所以掌握他们管脚的分布是很重要的一个环节。

共阳数码管是指,将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。

共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。

当某一字段的阴极为高电平时,相应字段就不亮。

共阴数码管是指,将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。

共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。

当某一字段的阳极为低电平时,相应字段就不亮。

区别他们的方法是:

若公共端接地,其他端接电源,若各段测试能亮,说明是共阴的,反之共阳的;

若公共端接电源,其他端分别接的,测得各端亮,则说明是共阳的,反之为共阴的。

此次设计的火灾报警器的四位数码管采用共阴数码管。

3.3.3数码管的驱动方式

(1)静态显示:

静态显示也称直流驱动。

静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。

静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×

8=40根I/O端口来驱动,但一个STC89S51单片机可用的I/O端口才32个,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

 

(2)动态显示:

数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"

a,b,c,d,e,f,g,dp"

的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。

通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,却能够节省大量的I/O端口,而且功耗更低。

3.474HC573芯片介绍

此次篮球计分牌的设计利用74HC573来驱动两个四位共阴数码管。

74HC573 

的八个锁存器都是透明的D 

型锁存器,当使能(G)为高时,Q 

输出将随数据(D)输入而变。

当使能为低时,输出将锁存在已建立的数据电平上。

输出控制不影响锁.器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。

这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。

特别适用于缓冲寄存器,I/O 

通道,双向总线驱动器和工作寄存器

74HC573芯片引脚图:

图7

3.5温度传感器DS18B20模块

DS18B20常用的温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点

接线方法:

面对着扁平的那一面,左负右正,一旦接反就会立刻发热,有可能烧毁!

同时,接反也是导致该传感器总是显示85℃的原因。

温度的读取:

DS18B20在出厂时以配置为12位,读取温度时共读取16位,前5个位为符号位,当前5位为1时,读取的温度为负数;

当前5位为0时,读取的温度为正数。

温度为正时读取方法为:

将16进制数转换成10进制即可。

温度为负时读取方法为:

将16进制取反后加1,再转换成10进制即可

3.6烟雾传感器MQ-2模块

接线方式:

1、VCC:

接电源正极(5V)

2、GND:

接电源负极

3、DO:

TTL开关信号输出

4、AO:

模拟信号输出

电气性能:

1、具有信号输出指示。

2、双路信号输出(模拟量输出及TTL电平输出)

3、TTL输出有效信号为低电平。

(当输出低电平时信号灯亮,可直接接单片机)

4、模拟量输出0~5V电压,浓度越高电压越高。

5、对液化气,天然气,城市煤气有较好的灵敏度。

6、具有长期的使用寿命和可靠的稳定性

7、快速的响应恢复特性

特别提醒:

传感器通电后,需要预热20S左右,测量的数据才稳定,传感器发热属于正常现象,因为内部有电热丝,如果烫手就不正常了。

4软件设计与分析

本系统的编程部分工作采用Keil_C51语言完成,KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。

运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。

如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

4.1程序主流程图:

4.2初始化定时器程序

voidinit()//初始化定时器

{

TMOD=0X11;

TH0=0xFE;

TL0=0x36;

TH1=0xFC;

TL1=0x18;

TR0=1;

EA=1;

ET0=1;

ET1=1;

}

4.3四位共阴数码管的动态显示程序

/***********************数码位选函数*****************************/

voidsmg_we_switch(uchari)

switch(i)

{

case0:

smg_we1=0;

smg_we2=1;

smg_we3=1;

smg_we4=1;

break;

case1:

smg_we1=1;

smg_we2=0;

case2:

smg_we3=0;

case3:

smg_we4=0;

}

/***********************数码显示函数*****************************/

voiddisplay()

staticuchari;

i++;

if(i>

smg_i)

i=0;

smg_we_switch(i);

//位选

P0=dis_smg[i];

//段选

5系统调试

单片机应用系统的调试是系统开发的重要环节。

当完成了单片机应用系统的硬件设计、软件设计和硬件组装后,便可进入应用系统调试阶段。

系统调试的目的是查出系统中硬件设计与软件设计中存在的错误以及可能出现的不协调问题,以便修改设计,最终使系统能正确地工作。

单片机应用系统的调试分为硬件调试、软件调试和脱机运行调试三个部分。

5.1硬件调试

5.1.1最小系统调试

(1)上电复位后,用万用表测量单片机VCC和GND为5V;

(2)上电复位后,晶振起振,晶振两端电压约为1.5V~2V;

(3)上电复位后,万用表测量9脚为低电平;

(4)没烧录程序时,万用表测量各I/O口输出高电平,约5V;

(5)30脚,产生频率,万用表测量为高电平,约5V;

(6)31脚,接VCC,万用表测量为高电平,约5V;

5.1.2四位数码管调试

将公共端接电源,其他端分别接GND,测得各端亮,说明数码管属于共阴数码管,且数码管各端LED发光管正常。

5.2软件调试

程序按照流程图编程,数码管采用动态显示的方法,利用定时器0的工作方式1,在中断函数中对数码管的公共端进行位选控制。

为了防止PCB连接数码管时有很多跳线,原理图上将数码管个引脚的连接方式进行了修改,而程序的0~9段代码为:

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

导致电路板上电时数码管显示乱码;

经过修改段代码为:

{0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb,0x45,0xdf,0xd7}后,测试数码管显示正常。

5.3脱机运行调试

在焊完成后,程序烧录进去,上电后四位数码管都亮,说明P2口已开始进行位选工作;

查看程序仿真合理,单片机最小系统正常工作;

用万用表检测数码管的各引脚电压,发现有两个引脚电压与单片机P0口段选输出电压不同,说明有断线;

整块电路板完全符合设计要求。

6总结

按照脱机运行调试的电路板的情况来看,完全符合设计要求,应该是一个成功的设计。

实训中也暴露出在理论学习中的不足之处,对单片机的很多方面内容还不够了解,有些地方还需有待加强学习,正是理论学习的不足导致对作品原理图正确性的怀疑。

通过不断地翻书查资料确定设计的原理图没问题后,才开始制作电路板。

制作电路板的工作是交给我的队友。

最后的电路板,只有几根断线而已,补接好后,功能都能实现,一次成功,出乎我的意料,他向我展示了他强大的动手能力;

也得益于我设计的原理图和PCB,都经过我的反复检查。

对此作品的软件程序编写,经XX找到了些程序,但这些程序不符合我的设计原理图。

要得到能够实现功能的火灾报警器程序,我能从零开始编程。

经过参考单片机实验指导书,编写的这个结构清晰简单,实现的功能也很全面,但感觉程序太琐长,不善精简。

谢辞

两周的实训结束了,由衷感谢我的指导老师。

周光祥老师对我遇到的问题总是耐心解答和悉心指导;

提出了许多富有启发性的建议和具有创意的想法;

在这次毕业设计中,得益于学校的各方面资源,图书馆可以查找到许多相关的有用的书籍资料、图书馆网站上的数据库也给我提供了不少参考,这些都给我们创造一个良好的学习、设计环境。

在跟随周光祥老师学习期间,我学到了许多从未接触过的知识,受益匪浅。

感谢桂林电子科技大学和诸位老师对我的培养和教育,同时也感谢学院为我提供良好的做毕业设计的环境。

本文参考了大量的文献资料,在此,向各学术界的前辈们致敬!

附录1:

火灾报警器原理图:

附录2:

火灾报警器PCB图:

附录3:

火灾报警器程序

#include<

reg52.h>

#defineucharunsignedchar

#defineuintunsignedint

ucharcodesmg_du[]={0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb,0x45,0xdf,0xd7};

//段码

uchardis_smg[]={0x80,0x80,0x80,0x80};

ucharsmg_i=4;

//数码管的显示个位数

sbitsmg_we1=P2^3;

sbitsmg_we2=P2^2;

sbitsmg_we3=P2^1;

sbitsmg_we4=P2^0;

sbitdq=P1^0;

//温度传感器DS18B20输出

sbitkey=P1^1;

//烟雾传感器MQ-2经LM358放大输出低电平信号

sbitled_g=P1^5;

sbitled_r=P1^6;

sbitbeeper=P1^7;

bitflag_wd_z_f;

//正负温度

inttemperature;

/***********************1ms延时函数*****************************/

voiddelay_1ms(uintq)

uinti,j;

for(i=0;

i<

q;

i++)

for(j=0;

j<

120;

j++);

/***********************小延时函数*****************************/

voiddelay_uint(uintq)

{while(q--);

smg_i)i=0;

/***********************18b20初始化函数*****************************/

voidinit_18b20()

bitq;

dq=1;

//把总线拿高

delay_uint

(1);

//15us

dq=0;

//给复位脉冲

delay_uint(80);

//750us

//把总线拿高等待

delay_uint(10);

//110us

q=dq;

//读取18b20初始化信号

delay_uint(20);

//200us

//把总线拿高释放总线

/*************写18b20内的数据***************/

voidwrite_18b20(uchardat)

{chari;

8;

{//写数据是低位开始

dq=0;

//把总线拿低写时间隙开始

dq=dat&

0x01;

//向18b20总线写数据了

delay_uint(5);

//60us

dq=1;

//释放总线

dat>

>

=1;

}}

/*************读取18b20内的数据***************/

ucharread_18b20()

{chari,value;

{q=0;

//把总线拿低读时间隙开始

value>

//读数据是低位开始

if(dq==1)//开始读写数据

value|=0x80;

//60us读一个时间隙最少要保持60us的时间

}

returnvalue;

//返回数据

/*************读取温度的值读出来的是小数***************/

uintread_temp()

uintvalue;

ucharlow;

init_18b20();

//初始化18b20

write_18b20(0xcc);

//跳过64位ROM

write_18b20(0x44);

//启动一次温度转换命令

delay_uint(50);

//500us

//初始化18b20

EA

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2