STM32智能火災報警,包括了MQ2煙霧報警器的使用。
單片機源程序如下:
- #include "stm32f10x_adc.h"
- #include "stdlib.h"
- #include "delay.h"
- #include "sys.h"
- #include "oled.h"
- #include "bmp.h"
- #include "usart.h"
- #include "LED.h"
- #include "KEY.h"
- #include "ADC.h"
- #include "timer.h"
- #include "HUO.h"
- extern u16 k1,k2;
- extern u8 an;
- int main(void)
- {
- u8 i = 0,t = 0,key_value = 0,fasong = 0,zhuangtai = 0;
- u16 adcx = 0;
- u16 adcx_index = 300;
- u8 huo = 1;
- u8 huo_flag = 0;
- u8 string[10] = {0};
- NVIC_Configuration();
- delay_init();
- uart_init(115200); //串口初始化為115200
-
- LED_Init();
- KEY_Init();
- HUO_Init();
- Adc_Init();
- OLED_Init();
- OLED_Clear();
- OLED_ColorTurn(0);//0正常顯示,1 反色顯示
- OLED_DisplayTurn(0);//0正常顯示 1 屏幕翻轉顯示
-
- for(i = 0;i<8;i++)
- OLED_ShowChinese(i*16,16,i,16);//智能火災報警系統
- OLED_Refresh();//更新顯示到OLED
- delay_ms(999);delay_ms(999);
-
- OLED_Clear();
- //0
- for(i = 0;i<6;i++)//火焰采集值:
- OLED_ShowChinese(i*16,0,i+18,16);
- //16
- for(i = 0;i<2;i++)//火焰
- OLED_ShowChinese(i*16,16,i+18,16);
- OLED_ShowChinese(16*2,16,26,16);//閾
- for(i = 0;i<2;i++)//值:
- OLED_ShowChinese(i*16+16*3,16,i+22,16);
- sprintf((char *)string,"%4d",adcx_index);//0300
- OLED_ShowString(88,16,string,16);
- //32
- for(i = 0;i<2;i++)//煙霧
- OLED_ShowChinese(i*16,32,i+24,16);
- for(i = 0;i<2;i++)//值:
- OLED_ShowChinese(i*16+16+16,32,i+22,16);
- for(i = 0;i<2;i++)//啟用
- OLED_ShowChinese(i*16+16*4+8,32,i+27,16);
- OLED_ShowChinese(16*6+8,32,23,16);//:
- OLED_ShowChinese(16*7,32,30,16);//否
- //48
- for(i = 0;i<2;i++)//安全
- OLED_ShowChinese(i*16+16*3,48,i+33,16);
- OLED_Refresh();//更新顯示到OLED
-
- //TIM3_Int_Init(99,7199);//10Khz的計數頻率,計數到100為10ms
-
- while(1)
- {
- key_value = KEY_Scan(0);
- switch (key_value)
- {
- case KEY0_PRES:
- if(adcx_index>100)adcx_index-=200;else adcx_index=500;
- sprintf((char *)string,"%4d",adcx_index);
- OLED_ShowString(88,16,string,16);
- break;
- case KEY1_PRES:
- huo_flag =! huo_flag;
- OLED_ShowChinese(16*7,32,huo_flag?29:30,16);//是/否
- break;
- case KEY2_PRES:
- fasong = !fasong;
- if(fasong == 1){LED0 = 1;delay_ms(50);LED0 = 0;delay_ms(50);}
- else {LED0 = 1;delay_ms(50);LED0 = 0;delay_ms(200);LED0 = 1;delay_ms(50);LED0 = 0;delay_ms(50);}
- break;
- default:
- break;
- }
-
- t++;
- if(t==10)
- {
- adcx=Get_Adc_Average(ADC_Channel_1,10);
- sprintf((char *)string,"%4d",adcx);
- OLED_ShowString(88,0,string,16);
- huo = HUO_Scan();
- OLED_ShowNum(56,32,huo,1,16);
-
- if(huo_flag == 0)
- {
- if(adcx <= adcx_index)
- {
- LED0 = 0;
- for(i = 0;i<2;i++)//報警
- OLED_ShowChinese(i*16+16*3,48,i+31,16);
- zhuangtai = 1;
- }
- else
- {
- LED0 = 1;
- for(i = 0;i<2;i++)//安全
- OLED_ShowChinese(i*16+16*3,48,i+33,16);
- zhuangtai = 0;
- }
- }
- else
- {
- if((adcx <= adcx_index)&&huo==1)
- {
- LED0 = 0;
- for(i = 0;i<2;i++)//報警
- OLED_ShowChinese(i*16+16*3,48,i+31,16);
- zhuangtai = 1;
- }
- else
- {
- LED0 = 1;
- for(i = 0;i<2;i++)//安全
- OLED_ShowChinese(i*16+16*3,48,i+33,16);
- zhuangtai = 0;
- }
- }
- if(fasong == 1)zhuangtai?printf("1"):printf("0");//printf("報警\r\n"):printf("安全\r\n");
- OLED_Refresh();
- t=0;
- }
- delay_ms(20);
-
- }
- }
復制代碼
所有資料51hei提供下載:
智能火災報警系統2_程序.7z
(205.68 KB, 下載次數: 59)
2020-12-21 00:51 上傳
點擊文件名下載附件
|