【毕业设计】52-基于单片机的车厢智能烟雾报警器设计与仿真(原理图/仿真/配套设计文档/PPT/流程图/外文翻译)
设计说明书
摘要
现在科技进步迅速,人们对于车辆及交通工具的使用越发增多。但是随着车辆以及人流量的增加也会伴随着交通事故的发生。需要在交通估计以及车辆车厢中安装烟雾报警装置防止火灾出现危及人们的出行安全以及财产。
本文题目车厢智能烟雾报警器设计与Proteus仿真设计,通过对系统的研究掌握系统实际应用中的特点,并对烟雾报警检测的方案分析,确认系统的研究方向以及系统组成框架。确认系统选择使用单片机STC89C52作为主要控制器件、MQ-2烟雾报警器、LCD1602作为系统的显示器单元、模数转换器ADC0832作为传感器的数据采集转换单元。对系统的各部位的驱动电路设计,单片机最小系统、电源模块电路、按键电路、LED指示灯电路、LCD液晶显示器电路、烟雾检查模块电路、蜂鸣器电路最后绘制系统的总电路图完成系统的硬件电路设计。使用编程软件Keil搭建系统的软件工程系统,使用仿真软件Proteus搭建系统的仿真电路,并测试系统的硬件稳定性验证硬件电路的可靠性。将Keil软件编译后的HEX文件导入到仿真软件中运行开始仿真,测试系统完成了烟雾报警的功能、并且可以通过按键对系统的报警阈值进行设定使系统的灵活性更高。
本次设计车厢智能烟雾报警器设计与Proteus仿真完成了预期功能,并且实现了硬件的稳定性可靠性验证。对系统进行充分的功能测试满足了系统的功能性。符合车辆车厢的使用场景。
链接
设计框架架构
第一章 绪 论 1
第一节 研究背景 1
第二节 国内研究现状 2
第三节 国外研究现状 2
第四节 本文的主要研究内容 3
第五节 本章小结 4
第二章 烟雾报警检测系统方案设计 5
第一节 系统功能分析 5
第二节 系统硬件总框图 6
第三节 系统主要元器件选型 6
一、单片机选型 6
二、显示器选型 7
第四节 本章小结 8
第三章 烟雾浓度检测系统硬件电路设计 9
第一节 主控制器最小系统设计 9
第二节 电源模块设计 12
第三节 按键电路模块设计 12
第四节 LED显示模块电路设计 12
第五节 LCD液晶显示模块电路设计 13
第六节 烟雾检测模块电路设计 14
第七节 蜂鸣器报警模块电路设计 15
第八节 系统总电路图设计 16
第九节 本章小结 16
第四章 烟雾浓度检测系统的软件设计 17
第一节 软件开发工具介绍 17
第二节 软件总架构设计 19
第三节 按键模块程序设计 20
第四节 LCD液晶显示模块程序设计 21
第五节 烟雾浓度检测模块程序设计 22
第六节 蜂鸣器报警及LED模块程序设计 23
第七节 本章小结 24
第五章 烟雾浓度检测系统的仿真实现 25
第一节 仿真开发工具介绍 25
第二节 仿真电路搭建及调试 26
第三节 系统仿真测试 28
一、仿真前准备 28
二、报警功能测试 29
三、阈值调节功能测试 30
第三节 本章小结 31
总 结 33
致 谢 34
参考文献 35
附 录 37
一、英文原文 37
二、英文翻译 44
三、系统原理图 50
四、源程序 51
设计说明书及设计文件
源码展示
/*此处的蜂鸣器是NPN型的*/
#include "reg52.H"
#include "1602.h"
#include "ADC0832.h"
#define uchar unsigned char
#define uint unsigned int
//#include "eeprom52.h"
//声明常量
#define ALCH 80 //报警值
//K_MG_MV和K_ZERO为传感器校准系数,要根据每个MQ-3模块校准
#define K_MG_MV 80/160 //传感器灵敏度系数
#define K_ZERO 20 //传感器零点漂移
//定义按键
sbit Key_Up = P3^6;
sbit Key_Down = P3^7;
//定义LED报警灯
sbit Led_Warn1 = P3^4;
sbit Led_Warn2 = P3^5;
sbit beep=P1^4; //蜂鸣器IO口
//定义标识
volatile bit FlagStartAL = 0; //开始转换标志
volatile bit FlagKeyPress = 0; //有键弹起标志
//全局变量定义
uchar Threshold; //烟雾浓度上限报警值
uint ALCounter; //烟雾转换计时器
long ALValue; //烟雾测量值
float ALtemp; //计算临时变量
uchar n;
uint keyvalue, keyUp, keyDown; //键值
char * pSave; //EEPROM存盘用指针
//函数声明
void Data_Init();
void Timer0_Init();
void Port_Init();
void ADC_Init();
uchar GetADVal();
void KeyProcess(uint );
void DELAY(unsigned int t)
{
while(t!=0)
t--;
}
//数据初始化
void Data_Init()
{
ALCounter = 30;
ALValue = 0;
Led_Warn1 = 1;
Led_Warn2 = 2;
keyvalue = 0;
keyUp = 1;
keyDown = 1;
}
void di()
{
beep = 0;
DELAY(500);
beep = 1;
}
void Timer0_Init()
{
ET0 = 1; //允许定时器0中断
TMOD = 0x01; //定时器工作方式选择
TL0 = (65536-2000)%256;
TH0 = (65536-2000)/256; //定时器赋予初值
TR0 = 1; //启动定时器
}
//定时器0中断
void Timer0_ISR (void) interrupt 1 using 0
{
TL0 = (65536-2000)%256;
TH0 = (65536-2000)/256; //定时器赋予初值
//每1秒钟启动一次AD转换
ALCounter ++;
if (ALCounter >= 500)
{
FlagStartAL = 1;
ALCounter = 0;
}
}