找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6899|回复: 0
收起左侧

基于51单片机MQ2无线火灾报警器

[复制链接]
ID:273335 发表于 2018-3-3 21:34 | 显示全部楼层 |阅读模式
采用STC89C51为核心控制器,利用气体传感器MQ-2、ADC0809模数转换器、无线收发模块等实现基本功能。通过这些传感器和芯片,当环境中烟雾浓度或可燃气体浓度等发生变化时系统会发出相应的信号,接收机能灯光报警和声音报警,以来实现雾报警,实现智能报警控制。

烟雾检测模块

烟雾检测模块

报警电路

报警电路

0.jpg 0.png

单片机源程序如下:
  1. //程序头函数
  2. #include <reg52.h>



  3. //宏定义
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. #define Data_ADC0809 P1

  7. //管脚声明
  8. sbit Feng = P3^0;
  9. //ADC0809
  10. sbit ST=P3^3;
  11. sbit EOC=P3^4;
  12. sbit OE=P3^2;
  13. //按键
  14. sbit Key1=P3^5;
  15. sbit Key2=P3^6;
  16. sbit Key3=P3^7;

  17. //显示数组                0-9+F
  18. uchar Data_[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x71,0x3f};
  19. sbit Wei1 = P2^7;
  20. sbit Wei2 = P2^6;
  21. sbit Wei3 = P2^5;
  22. sbit Wei4 = P2^4;
  23. //函数声明
  24. extern uchar ADC0809();
  25. void Display(uchar X,uchar Data);
  26. void delay(uint t);

  27. //酒精含量变量
  28. uchar temp=0;
  29. //蜂鸣器变量
  30. uchar FF=10;
  31. //显示模式
  32. uchar Mode=0;
  33. uchar p;

  34. void main()
  35. {

  36.         while(1)
  37.         {
  38.                 //正常模式
  39.                 if(Mode==0)
  40.                 {
  41.                         //读取AD值
  42.                         temp=ADC0809();
  43.                         for(p=0;p<30;p++)
  44.                         Display(0,temp);
  45.                         //判断是否报警
  46.                         if(temp>FF)
  47.                         {
  48.                                 Feng=0;
  49.                         }
  50.                         else
  51.                         {
  52.                                 Feng=1;
  53.                         }
  54.                 }
  55.                 //调整模式
  56.                 else
  57.                 {
  58.                         Display(1,FF);
  59.                 }
  60.                 //功能键
  61.                 if(Key3==0)
  62.                 {
  63.                         Feng=0;
  64.                         delay(100);
  65.                         while(Key3==0)
  66.                         {
  67.                                 if(Mode==0)
  68.                                         Display(0,temp);       
  69.                                 else
  70.                                         Display(1,FF);                                                                       
  71.                         }
  72.                         if(Mode==0)
  73.                                 Mode=1;
  74.                         else
  75.                                 Mode=0;
  76.                         Feng=1;
  77.                 }
  78.                 //增加
  79.                 if(Key2==0&&Mode==1)
  80.                 {
  81.                         Feng=0;
  82.                         delay(100);
  83.                         while(Key2==0)
  84.                         {
  85.                                         Display(1,FF);                                                                       
  86.                         }
  87.                         FF++;
  88.                         if(FF==251)       
  89.                                 FF=250;       
  90.                         Feng=1;
  91.                 }
  92.                 //减少
  93.                 if(Key1==0&&Mode==1)
  94.                 {
  95.                         Feng=0;
  96.                         delay(100);
  97.                         while(Key1==0)
  98.                         {
  99.                                         Display(1,FF);                                                                       
  100.                         }
  101.                         FF--;
  102.                         if(FF==0xff)       
  103.                                 FF=0;       
  104.                         Feng=1;
  105.                 }
  106.         }
  107. }
  108. //ADC0809读取信息
  109. uchar ADC0809()
  110. {
  111.         uchar temp_=0x00;
  112.         //初始化高阻太
  113.         OE=0;
  114.         //转化初始化
  115.         ST=0;
  116.         //开始转换
  117.         ST=1;
  118.         ST=0;
  119.         //外部中断等待AD转换结束
  120.         while(EOC==0)
  121.         //读取转换的AD值
  122.         OE=1;
  123.         temp_=Data_ADC0809;
  124.         OE=0;
  125.         return temp_;
  126. }
  127. //延时
  128. void delay(uint t)
  129. {
  130.         uint i,j;
  131.         for(i=0;i<t;i++)
  132.                 for(j=0;j<10;j++);
  133. }

  134. //显示       X表示状态     Data表示数据
  135. void Display(uchar X,uchar Data)
  136. {
  137.         Wei1=1;
  138.         Wei2=1;
  139.         Wei3=1;
  140.         Wei4=1;
  141.         P0=0xff;

  142.         //正常模式
  143.         if(X==0)
  144.         {
  145.                 P0=~Data_[11];
  146.         }
  147.         //非正常
  148.         else
  149.         {
  150.                 P0=~Data_[10];
  151.         }
  152.         Wei1=0;
  153.         Wei2=1;
  154.         Wei3=1;
  155.         Wei4=1;
  156.         delay(10);
  157.         Wei1=1;
  158.         Wei2=1;
  159.         Wei3=1;
  160.         Wei4=1;

  161.         P0=~Data_[Data/100];
  162.         Wei1=1;
  163.         Wei2=0;
  164.         Wei3=1;
  165.         Wei4=1;
  166.         delay(10);
  167.         Wei1=1;
  168.         Wei2=1;
  169.         Wei3=1;
  170.         Wei4=1;


  171. ……………………

  172. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
无线烟雾报警器.zip (487.72 KB, 下载次数: 120)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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