【毕业设计】37-基于单片机智能楼宇消防监控系统设计(原理图工程+仿真工程+源代码+答辩论文+答辩PPT)

【毕业设计】37-基于单片机智能楼宇消防监控系统设计(原理图工程+仿真工程+源代码+答辩论文+答辩PPT)

任务书

一、主要研究内容:
1、 掌握智能楼宇消防监控系统的工作原理;
2、 智能楼宇消防监控系统的单片机编程实现。

二、方法和要求:
1、 阅读大量智能楼宇消防监控系统的相关文献资料,掌握其技术的原理和电路的结构,理解程序实现的核心思想;
2、 积累相关资料确定论文的主体内容,重点进行研究;
3、 每一周进行一次论文进度的汇报,指导老师解答遇到的问题;把握好论文的进度,按照学校的要求完成各个阶段目标。
资料链接
原理图工程文件
原理图截图
仿真工程文件
源代码
仿真截图
答辩论文
答辩PPT

设计说明书

摘要

本次系统主要有硬件和软件两个部分组成。硬件部分由STC89C52单片机最小系统单元,单片机最小系统,温度检测,烟雾浓度检测,声学光学报警,显示单元组成,在设计上硬件需要考虑到系统的稳定性以及可靠性。软件部分通过对系统软件总流程图绘制,并绘制各个子控制驱动再对驱动程序编写完成系统程序的设计。在硬件与软件的设计上选择按照功能性分区设计,使设计有条理运行可靠。系统设计没有制作实物而是通过仿真方式调试完成。使用仿真软件Proteus来搭建系统硬件电路,调试测试。最后完成了烟雾检测,温度检测,并可以调节阈值实现对系统的报警自定义设置防止误报,通过模拟仿真出实际的楼宇消防系统。

设计框架架构

前 言 1
第一章 消防监控系统概述 2
第一节 研究背景及意义 2
第二节 国内外研究情况 3
第三节 本文的主要研究内容 4
第四节 本章小结 5
第二章 系统方案设计 6
第一节 总体方案设计 6
第二节 主要元器件介绍 6
一、LCD1602液晶显示屏 6
二、DS18B20温度传感器 7
三、气体传感器 8
第三节 本章小结 10
第三章 系统硬件设计 11
第一节 单片机最小系统电路设计 11
一、单片机介绍 11
二、最小系统电路设计 13
第二节 温度检测电路设计 14
第三节 烟雾报警电路设计 15
第四节 显示器电路设计 16
第五节 按键电路设计 16
第六节 报警电路设计 17
一、声学报警电路设计 17
二、光学报警电路设计 18
第七节 系统总电路设计 18
第八节 本章小结 19
第四章 系统软件设计 20
第一节 开发工具介绍 20
第二节 系统软件总流程设计 21
第三节 温度检测程序设计流程 22
第四节 烟雾检测程序设计流程 23
第五节 报警驱动程序设计流程 24
第六节 显示器驱动程序设计流程 25
第七节 本章小结 26
第五章 系统的仿真实现 27
第一节 仿真软件介绍 27
第二节 仿真电路搭建 27
第三节 仿真测试 29
一、温度检测、报警功能测试 29
二、气体浓度检测、报警功能测试 31
三、报警阈值调节功能测试 33
四、综合测试 34
第四节 本章小结 35
结 论 36
致 谢 37
参考文献 38
附 录 40
一、英文原文 40
二、英文翻译 44
三、工程图纸 48
四、源代码 49

设计说明书及设计文件

在这里插入图片描述

在这里插入图片描述在这里插入图片描述 答辩论文,29335字
在这里插入图片描述

源码展示

在这里插入图片描述

#include <reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include "intrins.h"											   
#define     u8  			unsigned char
#define     u16   		unsigned int
#define     uchar  			unsigned char
#define     uint   		unsigned int
uchar yushe_wendu=50;				//温度预设值
uchar yushe_yanwu=100;				//烟雾预设值
uint wendu; 								//温度值全局变量
uchar yanwu;					 			//用于读取ADC数据
//运行模式  
uchar Mode=0;				 				//=1是设置温度阀值  =2是设置烟雾阀值	=0是正常监控模式
//管脚声明
sbit Led_Reg		 =P2^2;				 //红灯
sbit Led_Yellow  =P2^4;				 //黄灯
sbit Buzzer    	 =P2^0;				 //蜂鸣器
sbit Fan    	 	 =P3^3;				 //
/********************************************************************
* 名称 : delay_1ms()
* 功能 : 延时1ms函数
* 输入 : q
* 输出 : 无
***********************************************************************/
void delay_ms(uint q)
{
	uint i,j;
	for(i=0;i<q;i++)
		for(j=0;j<110;j++);
}
/***********************************************************************************************************
LCD1602相关函数
***********************************************************************************************************/
//LCD管脚声明 (RW引脚实物直接接地,因为本设计只用到液晶的写操作,RW引脚一直是低电平)
sbit LCDRS = P2^7;
sbit LCDEN = P2^6;
sbit D0		 = P0^0;
sbit D1		 = P0^1;
sbit D2		 = P0^2;
sbit D3		 = P0^3;
sbit D4		 = P0^4;
sbit D5		 = P0^5;
sbit D6		 = P0^6;
sbit D7		 = P0^7;



//LCD延时
void LCDdelay(uint z)		  //该延时大约100us(不精确,液晶操作的延时不要求很精确)
{
  uint x,y;
  for(x=z;x>0;x--)
    for(y=10;y>0;y--);
}
void LCD_WriteData(u8 dat)	  
{
	if(dat&0x01)D0=1;else D0=0;
	if(dat&0x02)D1=1;else D1=0;
	if(dat&0x04)D2=1;else D2=0;
	if(dat&0x08)D3=1;else D3=0;
	if(dat&0x10)D4=1;else D4=0;
	if(dat&0x20)D5=1;else D5=0;
	if(dat&0x40)D6=1;else D6=0;
	if(dat&0x80)D7=1;else D7=0;
}
//写命令
void write_com(uchar com)
{
  LCDRS=0;				  
	LCD_WriteData(com);
//  DAT=com;
  LCDdelay(5);
  LCDEN=1;
  LCDdelay(5);
  LCDEN=0;
}
//写数据
void write_data(uchar date)
{
  LCDRS=1;
	LCD_WriteData(date);
//  DAT=date;
  LCDdelay(5);
  LCDEN=1;
  LCDdelay(5);
  LCDEN=0;
}
/*------------------------------------------------
              选择写入位置
------------------------------------------------*/
void SelectPosition(unsigned char x,unsigned char y) 
{     
	if (x == 0) 
	{     
		write_com(0x80 + y);     //表示第一行
	}
	else 
	{      
		write_com(0xC0 + y);      //表示第二行
	}        
}
/*------------------------------------------------
              写入字符串函数
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) 
{     
	SelectPosition(x,y) ;
	while (*s) 
	{     
		write_data( *s);     
		s ++;     
	}
}
//========================================================================
// 函数: void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
// 应用: LCD_Write_Char(0,1,366,4) ;
// 描述: 在第0行第一个字节位置显示366的后4位,显示结果为 0366
// 参数: x:行,y:列,s:要显示的字,l:显示的位数
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注: 最大显示65535
//========================================================================
void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l) 
{     
	SelectPosition(x,y) ;
	if(l>=5)
		write_data(0x30+s/10000%10);	//万位
	if(l>=4)
		write_data(0x30+s/1000%10);		//千位
	if(l>=3)
		write_data(0x30+s/100%10);		//百位
	if(l>=2)
		write_data(0x30+s/10%10);			//十位
	if(l>=1)
		write_data(0x30+s%10);		//个位
}
/*1602指令简介
  write_com(0x38);//屏幕初始化
  write_com(0x0c);//打开显示 无光标 无光标闪烁
  write_com(0x0d);//打开显示 阴影闪烁
  write_com(0x0d);//打开显示 阴影闪烁
*/
//1602初始化
void Init1602()
{
  uchar i=0;
  write_com(0x38);//屏幕初始化
  write_com(0x0c);//打开显示 无光标 无光标闪烁
  write_com(0x06);//当读或写一个字符是指针后一一位
  write_com(0x01);//清屏	
}
void Display_1602(yushe_wendu,yushe_yanwu,c,temp)
{
	//显示预设温度
	LCD_Write_Char(0,6,yushe_wendu,2) ;	
	//显示预设烟雾
	LCD_Write_Char(0,13,yushe_yanwu,3) ;	
	//时时温度
	LCD_Write_Char(1,6,c/10,2) ;
	write_data('.');
	LCD_Write_Char(1,9,c%10,1) ;
	
	//时时烟雾
	LCD_Write_Char(1,13,temp,3) ;
}
/***********************************************************************************************************
ADC0832相关函数
sbit ADCS 	=P1^5; //ADC0832 片选
sbit ADCLK  =P1^2; //ADC0832 时钟
sbit ADDI 	=P1^3; //ADC0832 数据输入		/*因为单片机的管脚是双向的,且ADC0832的数据输入输出不同时进行,
sbit ADDO 	=P1^3; //ADC0832 数据输出		/*为节省单片机引脚,简化电路所以输入输出连接在同一个引脚上

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值