标题:
GSM模块的51单片机火灾烟雾报警器原理图与程序设计
[打印本页]
作者:
hhhaaaa333
时间:
2021-4-3 23:17
标题:
GSM模块的51单片机火灾烟雾报警器原理图与程序设计
本系统主要由单片机和GSM短信模块组成,借助最可靠、最成熟的GSM移动网络,以最直观的中文短消息或电话形式,直接把报警地点的情况反映到您的手机屏幕上。
(1)该设计包括硬件和软件设计两个部分。模块划分为数据采集、键盘控制、报警等模块子函数。
(2)本震动防盗报警系统由震动传感器、报警器、单片机控制电路、LED控制电路及相关的控制管理软件组成。用户终端完成信息采集、处理、数据传送、功能设定、本地报警等功能。
(3)系统可实现功能。当人员外出时,可把报警系统设置在外出布防状态,探测器工作起来,当有人闯入时,设置在监测点上的震动传感器变换成电信号,经放大电路、比较电路送至门限开关,打开门限阀门送出TTL 电平至STC89C51单片机,经单片机处理运算后驱动执行报警电路使警号发声。
(4)系统工作的稳定性和可靠性也是追求的重要指标。至于报警可采用声光信号。
电路原理图如下:
51hei.png
(88.42 KB, 下载次数: 65)
下载附件
2021-4-4 01:24 上传
单片机源程序如下:
#include<reg52.h>
#include <intrins.h>
#include <absacc.h> //头文件
#define uint unsigned int
#define uchar unsigned char //宏定义
//按键
sbit key1=P1^0; //布防
sbit key2=P1^1; //撤防
sbit key3=P1^2; //紧急报警
sbit BUZZ=P0^4; //蜂鸣器
sbit rsd=P0^6; //传感器输入
sbit LED_B=P2^2; //布防指示灯
sbit LED_S=P2^0; //发送消息指示灯
sbit LED_BJ=P2^5; //报警指示灯
uchar code PhoneNO[] ="00310035003500300032003200330032003700300036"; //接受号码,这是转码后的 15502232706(就是003+最后一位就是手机号的数字,如:手机号是138,转码后就是003100330038)
//uchar code PhoneNO[] ="00310038003300390032003000310033003600300037"; //接受号码,这是转码后的 18392013607
uchar code somebody[] ="73AF588370DF96FE6D535EA68FC79AD8FF0C8BF76CE8610FFF01FF01FF01"; //环境烟雾浓度过高,请注意!!!
uint TIME_50ms=0; //计时的最小分辨率50ms
uint time_continue; //继续计时
bit flag=0,flag_BF=0; //布防标志位
bit flag_time_start=0; //开始计时标志位
bit again=0; //再次计时
bit flag_alam; //报警标志位
bit SOS;
bit flag_continue;
bit into_BF=0;
void delay(uint z)//延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void Uart_init()
{
TMOD= 0X20; //T1 方式2 ,8位 自动重装
TH1=0Xfd;
TL1=0Xfd; //9600
TR1=1; // 定时器1启动
SM0=0; // 设置串口的工作模式
SM1=1; //方式1
REN=0; // 允许串口接收数据
ES=0; // 串口中断应许
EA=1; // 开启中断
}
void SendASC(uchar d)
{
SBUF=d;
while(!TI);
TI=0;
}
void SendString(uchar *str)
{
while(*str)
{
SendASC(*str) ;
str++;
//delay_uart(1);
}
}
void TIME()
{
if(flag==0)
{
delay(50);
TIME_50ms++;
if(TIME_50ms%10==0)
LED_B=!LED_B;
if(TIME_50ms>=100)
{
TIME_50ms=0;
flag_BF=1;
LED_B=0;
flag_time_start=0;
again=1;
}
}
else
{
delay(50);
TIME_50ms++;
if(TIME_50ms%10==0)
{
LED_B=!LED_B;
if(flag_alam==1)
{
if(flag_continue==0)
{
flag_continue=1;
time_continue=TIME_50ms;
}
BUZZ=!BUZZ;
LED_BJ=BUZZ;
if(TIME_50ms>=time_continue+100)
{
BUZZ=1;
LED_BJ=1;
flag_continue=0;
flag_alam=0;
time_continue=0;
}
}
}
if(TIME_50ms>=1200)
{
LED_B=0;
TIME_50ms=0;
flag_time_start=0;
again=1;
}
}
}
//按键扫描函数
void keyscan()
{
if(key1==0&&flag_BF==0)//布防
{
delay(5);//延时
if(key1==0)
{
LED_B=0;
flag=0;
flag_time_start=1;
}
while(key1==0);
}
if(flag_time_start==1)
{
TIME();
}
if(key2==0)
{
delay(5);//撤防
if(key2==0)
{
BUZZ=1; //关闭蜂鸣器
LED_BJ=1;
flag_alam=0;
flag_BF=0;
flag=0;
flag_time_start=0;
LED_S=1;
LED_B=1;
}
while(key2==0);
}
if(key3==0)
{
delay(5);
if(key3==0)
{
SOS=1;
flag_alam=1;
}
while(key3==0);
}
}
void GSM_work()
{
if(rsd==0&&flag_BF==1)
flag_alam=1;
/* else
BUZZ=1; */
if((rsd==0&&flag_BF==1&&again==1)||SOS==1)
{
LED_S=0;
BUZZ=1;
SendString("AT+CMGF=1\r\n");
delay(1000);
SendString("AT+CSCS=\"UCS2\"\r\n");
delay(1000);
SendString("AT+CSMP=17,0,2,25\r\n");
delay(1000);
SendString("AT+CMGS="); //信息发送指令 AT+CMGS=//
SendASC('"');
SendString(PhoneNO);
SendASC('"');
SendASC('\r'); //发送回车指令//
SendASC('\n'); //发送换行指令//
delay(1000);
SendString(somebody);
delay(1000);
SendASC(0x1a);
if(SOS==0)
{
again=0;
flag_time_start=1;
flag_alam=1;
}
else if(SOS==1&&flag_time_start==1)
{
TIME_50ms=0;
flag_BF=1;
LED_B=0;
flag_time_start=0;
again=1;
}
LED_S=1;
SOS=0;
flag=1;
}
}
void main()
{
Uart_init();
while(1)
{
keyscan();
GSM_work();
}
}
复制代码
以上资料51hei提供下载:
1-源程序.rar
(170.47 KB, 下载次数: 67)
2021-4-3 23:17 上传
点击文件名下载附件
源程序
下载积分: 黑币 -5
2-原理图.rar
(268.11 KB, 下载次数: 73)
2021-4-3 23:17 上传
点击文件名下载附件
原理图
下载积分: 黑币 -5
作者:
黄刘哲
时间:
2021-4-23 23:41
楼主可以再发一下么,损坏啦,好人一生平安
作者:
是来下载的
时间:
2023-12-23 18:44
感谢楼主,很有帮助
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1