找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2697|回复: 1
收起左侧

基于STM32智能火灾报警系统程序

[复制链接]
ID:861056 发表于 2020-12-20 23:45 | 显示全部楼层 |阅读模式
STM32智能火灾报警,包括了MQ2烟雾报警器的使用。

单片机源程序如下:
  1. #include "stm32f10x_adc.h"
  2. #include "stdlib.h"
  3. #include "delay.h"
  4. #include "sys.h"
  5. #include "oled.h"
  6. #include "bmp.h"
  7. #include "usart.h"
  8. #include "LED.h"
  9. #include "KEY.h"
  10. #include "ADC.h"
  11. #include "timer.h"
  12. #include "HUO.h"


  13. extern u16 k1,k2;
  14. extern u8 an;
  15. int main(void)
  16. {
  17.         u8 i = 0,t = 0,key_value = 0,fasong = 0,zhuangtai = 0;
  18.         u16 adcx = 0;
  19.         u16 adcx_index = 300;
  20.         u8 huo = 1;
  21.         u8 huo_flag = 0;
  22.         u8 string[10] = {0};
  23.         NVIC_Configuration();
  24.         delay_init();
  25.         uart_init(115200);                 //串口初始化为115200
  26.         
  27.         LED_Init();
  28.         KEY_Init();
  29.         HUO_Init();
  30.         Adc_Init();
  31.         OLED_Init();
  32.         OLED_Clear();
  33.         OLED_ColorTurn(0);//0正常显示,1 反色显示
  34.         OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
  35.         
  36.         for(i = 0;i<8;i++)
  37.         OLED_ShowChinese(i*16,16,i,16);//智能火灾报警系统
  38.         OLED_Refresh();//更新显示到OLED        
  39.         delay_ms(999);delay_ms(999);        
  40.         
  41.         OLED_Clear();        
  42. //0
  43.         for(i = 0;i<6;i++)//火焰采集值:
  44.         OLED_ShowChinese(i*16,0,i+18,16);
  45. //16
  46.         for(i = 0;i<2;i++)//火焰
  47.         OLED_ShowChinese(i*16,16,i+18,16);
  48.         OLED_ShowChinese(16*2,16,26,16);//阈
  49.         for(i = 0;i<2;i++)//值:
  50.         OLED_ShowChinese(i*16+16*3,16,i+22,16);
  51.         sprintf((char *)string,"%4d",adcx_index);//0300
  52.         OLED_ShowString(88,16,string,16);
  53. //32
  54.         for(i = 0;i<2;i++)//烟雾
  55.         OLED_ShowChinese(i*16,32,i+24,16);
  56.         for(i = 0;i<2;i++)//值:
  57.         OLED_ShowChinese(i*16+16+16,32,i+22,16);
  58.         for(i = 0;i<2;i++)//启用
  59.         OLED_ShowChinese(i*16+16*4+8,32,i+27,16);
  60.         OLED_ShowChinese(16*6+8,32,23,16);//:
  61.         OLED_ShowChinese(16*7,32,30,16);//否
  62. //48
  63.         for(i = 0;i<2;i++)//安全
  64.         OLED_ShowChinese(i*16+16*3,48,i+33,16);

  65.         OLED_Refresh();//更新显示到OLED        
  66.         
  67.         //TIM3_Int_Init(99,7199);//10Khz的计数频率,计数到100为10ms  
  68.         
  69.         while(1)
  70.         {
  71.                 key_value = KEY_Scan(0);
  72.                 switch (key_value)
  73.                 {
  74.                         case KEY0_PRES:
  75.                                 if(adcx_index>100)adcx_index-=200;else adcx_index=500;
  76.                                 sprintf((char *)string,"%4d",adcx_index);
  77.                                 OLED_ShowString(88,16,string,16);
  78.                                 break;
  79.                         case KEY1_PRES:
  80.                                 huo_flag =! huo_flag;
  81.                                 OLED_ShowChinese(16*7,32,huo_flag?29:30,16);//是/否
  82.                                 break;
  83.                         case KEY2_PRES:
  84.                                 fasong = !fasong;
  85.                                 if(fasong == 1){LED0 = 1;delay_ms(50);LED0 = 0;delay_ms(50);}
  86.                                 else {LED0 = 1;delay_ms(50);LED0 = 0;delay_ms(200);LED0 = 1;delay_ms(50);LED0 = 0;delay_ms(50);}
  87.                                 break;
  88.                         default:
  89.                                 break;
  90.                 }
  91.                
  92.                 t++;
  93.                 if(t==10)
  94.                 {
  95.                         adcx=Get_Adc_Average(ADC_Channel_1,10);
  96.                         sprintf((char *)string,"%4d",adcx);
  97.                         OLED_ShowString(88,0,string,16);
  98.                         huo = HUO_Scan();
  99.                         OLED_ShowNum(56,32,huo,1,16);
  100.                         
  101.                         if(huo_flag == 0)
  102.                         {
  103.                                 if(adcx <= adcx_index)
  104.                                 {
  105.                                         LED0 = 0;
  106.                                         for(i = 0;i<2;i++)//报警
  107.                                         OLED_ShowChinese(i*16+16*3,48,i+31,16);
  108.                                         zhuangtai = 1;
  109.                                 }
  110.                                 else
  111.                                 {
  112.                                         LED0 = 1;
  113.                                         for(i = 0;i<2;i++)//安全
  114.                                         OLED_ShowChinese(i*16+16*3,48,i+33,16);
  115.                                         zhuangtai = 0;
  116.                                 }
  117.                         }
  118.                         else
  119.                         {
  120.                                 if((adcx <= adcx_index)&&huo==1)
  121.                                 {
  122.                                         LED0 = 0;
  123.                                         for(i = 0;i<2;i++)//报警
  124.                                         OLED_ShowChinese(i*16+16*3,48,i+31,16);
  125.                                         zhuangtai = 1;
  126.                                 }
  127.                                 else
  128.                                 {
  129.                                         LED0 = 1;
  130.                                         for(i = 0;i<2;i++)//安全
  131.                                         OLED_ShowChinese(i*16+16*3,48,i+33,16);
  132.                                         zhuangtai = 0;
  133.                                 }
  134.                         }
  135.                         if(fasong == 1)zhuangtai?printf("1"):printf("0");//printf("报警\r\n"):printf("安全\r\n");
  136.                         OLED_Refresh();
  137.                         t=0;
  138.                 }
  139.                 delay_ms(20);        
  140.                
  141.         }
  142. }
复制代码

所有资料51hei提供下载:
智能火灾报警系统2_程序.7z (205.68 KB, 下载次数: 53)
回复

使用道具 举报

ID:1 发表于 2020-12-21 00:52 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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