找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5851|回复: 2
打印 上一主题 下一主题
收起左侧

GSM模块的51单片机火灾烟雾报警器原理图与程序设计

  [复制链接]
跳转到指定楼层
楼主
    本系统主要由单片机和GSM短信模块组成,借助最可靠、最成熟的GSM移动网络,以最直观的中文短消息或电话形式,直接把报警地点的情况反映到您的手机屏幕上。   
  
(1)该设计包括硬件和软件设计两个部分。模块划分为数据采集、键盘控制、报警等模块子函数。
  
(2)本震动防盗报警系统由震动传感器、报警器、单片机控制电路、LED控制电路及相关的控制管理软件组成。用户终端完成信息采集、处理、数据传送、功能设定、本地报警等功能。
  
(3)系统可实现功能。当人员外出时,可把报警系统设置在外出布防状态,探测器工作起来,当有人闯入时,设置在监测点上的震动传感器变换成电信号,经放大电路、比较电路送至门限开关,打开门限阀门送出TTL 电平至STC89C51单片机,经单片机处理运算后驱动执行报警电路使警号发声。
  
(4)系统工作的稳定性和可靠性也是追求的重要指标。至于报警可采用声光信号。

电路原理图如下:


单片机源程序如下:
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #include <absacc.h>                  //头文件
  4. #define uint unsigned int
  5. #define uchar unsigned char          //宏定义

  6. //按键
  7. sbit key1=P1^0;           //布防
  8. sbit key2=P1^1;           //撤防
  9. sbit key3=P1^2;           //紧急报警

  10. sbit BUZZ=P0^4;           //蜂鸣器
  11. sbit rsd=P0^6;           //传感器输入
  12. sbit LED_B=P2^2;   //布防指示灯
  13. sbit LED_S=P2^0;   //发送消息指示灯
  14. sbit LED_BJ=P2^5;  //报警指示灯

  15. uchar code PhoneNO[]                ="00310035003500300032003200330032003700300036"; //接受号码,这是转码后的 15502232706(就是003+最后一位就是手机号的数字,如:手机号是138,转码后就是003100330038)
  16. //uchar code PhoneNO[]                ="00310038003300390032003000310033003600300037"; //接受号码,这是转码后的 18392013607

  17. uchar code somebody[]                ="73AF588370DF96FE6D535EA68FC79AD8FF0C8BF76CE8610FFF01FF01FF01";        //环境烟雾浓度过高,请注意!!!                                                                                                  

  18. uint TIME_50ms=0;           //计时的最小分辨率50ms
  19. uint time_continue;           //继续计时
  20. bit flag=0,flag_BF=0;  //布防标志位
  21. bit flag_time_start=0; //开始计时标志位
  22. bit again=0;                   //再次计时
  23. bit flag_alam;                   //报警标志位
  24. bit SOS;
  25. bit flag_continue;
  26. bit into_BF=0;

  27. void delay(uint z)//延时函数
  28. {
  29.         uint x,y;
  30.         for(x=z;x>0;x--)
  31.         for(y=110;y>0;y--);
  32. }

  33. void Uart_init()
  34. {
  35.         TMOD= 0X20;                //T1  方式2  ,8位   自动重装   
  36.         TH1=0Xfd;
  37.         TL1=0Xfd;            //9600
  38.         TR1=1;                     // 定时器1启动  
  39.         SM0=0;            // 设置串口的工作模式
  40.         SM1=1;             //方式1

  41.         REN=0;                  // 允许串口接收数据          

  42.         ES=0;              // 串口中断应许
  43.         EA=1;                 // 开启中断
  44. }

  45. void SendASC(uchar d)
  46. {
  47.        
  48.         SBUF=d;
  49.         while(!TI);

  50.         TI=0;
  51. }

  52. void SendString(uchar *str)       
  53. {
  54.         while(*str)
  55.         {
  56.                 SendASC(*str) ;
  57.                 str++;
  58.                 //delay_uart(1);
  59.         }
  60. }

  61. void TIME()
  62. {
  63.         if(flag==0)
  64.         {
  65.                 delay(50);
  66.                 TIME_50ms++;
  67.                 if(TIME_50ms%10==0)
  68.                 LED_B=!LED_B;
  69.                
  70.                 if(TIME_50ms>=100)
  71.                 {
  72.                         TIME_50ms=0;
  73.                         flag_BF=1;
  74.                         LED_B=0;
  75.                         flag_time_start=0;
  76.                         again=1;
  77.                 }       
  78.         }
  79.         else
  80.         {
  81.                 delay(50);
  82.                 TIME_50ms++;
  83.                 if(TIME_50ms%10==0)
  84.                 {
  85.                         LED_B=!LED_B;
  86.                         if(flag_alam==1)
  87.                         {
  88.                                
  89.                                 if(flag_continue==0)
  90.                                 {
  91.                                         flag_continue=1;
  92.                                         time_continue=TIME_50ms;
  93.                                 }
  94.                                 BUZZ=!BUZZ;
  95.                                 LED_BJ=BUZZ;
  96.                                 if(TIME_50ms>=time_continue+100)
  97.                                 {
  98.                                         BUZZ=1;
  99.                                         LED_BJ=1;
  100.                                         flag_continue=0;
  101.                                         flag_alam=0;
  102.                                         time_continue=0;
  103.                                 }       
  104.                         }
  105.                 }
  106.                 if(TIME_50ms>=1200)
  107.                 {
  108.                         LED_B=0;
  109.                         TIME_50ms=0;
  110.                         flag_time_start=0;
  111.                         again=1;
  112.                 }
  113.         }
  114. }

  115. //按键扫描函数
  116. void keyscan()
  117. {
  118.         if(key1==0&&flag_BF==0)//布防
  119.         {
  120.                 delay(5);//延时
  121.                 if(key1==0)
  122.                 {
  123.                         LED_B=0;
  124.                         flag=0;
  125.                         flag_time_start=1;
  126.                 }
  127.                 while(key1==0);
  128.         }
  129.         if(flag_time_start==1)
  130.         {
  131.                 TIME();
  132.         }
  133.         if(key2==0)
  134.         {                          
  135.                 delay(5);//撤防
  136.                 if(key2==0)
  137.                 {
  138.                         BUZZ=1;        //关闭蜂鸣器
  139.                         LED_BJ=1;
  140.                         flag_alam=0;
  141.                         flag_BF=0;
  142.                         flag=0;
  143.                         flag_time_start=0;
  144.                         LED_S=1;
  145.                         LED_B=1;
  146.                 }
  147.                 while(key2==0);
  148.         }
  149.         if(key3==0)
  150.         {
  151.                 delay(5);
  152.                 if(key3==0)
  153.                 {
  154.                         SOS=1;
  155.                         flag_alam=1;
  156.                 }
  157.                 while(key3==0);
  158.         }
  159. }

  160. void GSM_work()
  161. {
  162.         if(rsd==0&&flag_BF==1)
  163.         flag_alam=1;
  164. /*        else
  165.         BUZZ=1;         */
  166.         if((rsd==0&&flag_BF==1&&again==1)||SOS==1)
  167.         {
  168.                 LED_S=0;
  169.                 BUZZ=1;
  170.                 SendString("AT+CMGF=1\r\n");       
  171.                
  172.                 delay(1000);
  173.                
  174.                 SendString("AT+CSCS=\"UCS2\"\r\n");       
  175.                
  176.                 delay(1000);
  177.                
  178.                 SendString("AT+CSMP=17,0,2,25\r\n");       
  179.                
  180.                 delay(1000);
  181.                
  182.                 SendString("AT+CMGS=");        //信息发送指令 AT+CMGS=//
  183.                 SendASC('"');
  184.                 SendString(PhoneNO);   
  185.                 SendASC('"');
  186.                 SendASC('\r');                        //发送回车指令//
  187.                 SendASC('\n');                        //发送换行指令//
  188.                
  189.                 delay(1000);

  190.                 SendString(somebody);
  191.        
  192.                 delay(1000);
  193.                
  194.                 SendASC(0x1a);
  195.                
  196.                 if(SOS==0)
  197.                 {
  198.                         again=0;
  199.                         flag_time_start=1;
  200.                         flag_alam=1;
  201.                                
  202.                 }
  203.                 else if(SOS==1&&flag_time_start==1)
  204.                 {
  205.                         TIME_50ms=0;
  206.                         flag_BF=1;
  207.                         LED_B=0;
  208.                         flag_time_start=0;
  209.                         again=1;
  210.                 }
  211.                
  212.                 LED_S=1;
  213.                 SOS=0;
  214.                 flag=1;
  215.         }
  216. }       
  217. void main()
  218. {       
  219.         Uart_init();
  220.         while(1)
  221.         {
  222.                 keyscan();
  223.                 GSM_work();
  224.         }          
  225. }
复制代码

以上资料51hei提供下载:
1-源程序.rar (170.47 KB, 下载次数: 62)
2-原理图.rar (268.11 KB, 下载次数: 65)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏8 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:651497 发表于 2021-4-23 23:41 来自手机 | 只看该作者
楼主可以再发一下么,损坏啦,好人一生平安
回复

使用道具 举报

板凳
ID:1105846 发表于 2023-12-23 18:44 | 只看该作者
感谢楼主,很有帮助
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表