找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 3431|回復(fù): 1
收起左側(cè)

基于STM32智能火災(zāi)報(bào)警系統(tǒng)程序

[復(fù)制鏈接]
ID:861056 發(fā)表于 2020-12-20 23:45 | 顯示全部樓層 |閱讀模式
STM32智能火災(zāi)報(bào)警,包括了MQ2煙霧報(bào)警器的使用。

單片機(jī)源程序如下:
  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 屏幕翻轉(zhuǎn)顯示
  35.         
  36.         for(i = 0;i<8;i++)
  37.         OLED_ShowChinese(i*16,16,i,16);//智能火災(zāi)報(bào)警系統(tǒng)
  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的計(jì)數(shù)頻率,計(jì)數(shù)到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++)//報(bào)警
  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++)//報(bào)警
  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("報(bào)警\r\n"):printf("安全\r\n");
  136.                         OLED_Refresh();
  137.                         t=0;
  138.                 }
  139.                 delay_ms(20);        
  140.                
  141.         }
  142. }
復(fù)制代碼

所有資料51hei提供下載:
智能火災(zāi)報(bào)警系統(tǒng)2_程序.7z (205.68 KB, 下載次數(shù): 59)


回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2020-12-21 00:52 | 顯示全部樓層
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說(shuō)明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表