里面包括DTH11溫濕度采集、PM2.5濃度采集等模塊,程序詳細
單片機源程序如下:
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "lcd.h"
- #include "key.h"
- #include "sram.h"
- #include "malloc.h"
- #include "sdio_sdcard.h"
- #include "malloc.h"
- #include "w25qxx.h"
- #include "ff.h"
- #include "exfuns.h"
- #include "fontupd.h"
- #include "text.h"
- #include "string.h"
- #include "math.h"
- #include "gp2y1014au.h"
- #include "dht11.h"
- #include "beep.h"
- #include "blu.h"
- #include "fan.h"
- #include "rtc.h"
- #include "sound.h"
- #include "adc.h"
- void Home_page_masage(void)
- {
- Show_Str(35,1,240,24,"Based on STM32",24,0);
- Show_Str(30,26,240,24,"Site environmen",24,0);
- Show_Str(12,51,240,24,"monitorting system",24,0);
- Show_Str(60,130,240,16,"TEMP:",16,0);
- Show_Str(150,130,240,16,"C",16,0);
-
- Show_Str(60,170,240,16,"HUMI:",16,0);
- Show_Str(150,170,240,16,"RH",16,0);
-
- Show_Str(60,210,240,16,"PM2.5:",16,0);
- Show_Str(150,210,240,16,"um",16,0);
-
- Show_Str(60,250,240,16,"NOISE:",16,0);
-
- Show_Str(60,290,240,16,"FAN:",16,0);
- }
- int main(void)
- {
- u8 key; //鍵值
- u32 temp;
- u32 humi;
- u16 PM_data;
- char temp_data[64] = {0};
- char humi_data[64] = {0};
- char pm_data[64] = {0};
- char zs_data[64] = {0};
- char fs_data[64] = {0};
-
- u8 timbuf[40];
- u8 daybuf[40];
- u8 weekbuf[40];
- u8 tbuf[40];
- RTC_TimeTypeDef RTC_TimeStruct;
- RTC_DateTypeDef RTC_DateStruct;
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOA時鐘
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
-
-
- delay_init(168); //初始化延時函數
- uart_init(115200); //初始化串口波特率為115200
- LED_Init(); //初始化LED
-
- LCD_Init(); //LCD初始化
- KEY_Init(); //按鍵初始化
- W25QXX_Init(); //初始化W25Q128
- my_mem_init(SRAMIN); //初始化內部內存池
- my_mem_init(SRAMCCM); //初始化CCM內存池
- exfuns_init(); //為fatfs相關變量申請內存
- f_mount(fs[0],"0:",1); //掛載SD卡
- f_mount(fs[1],"1:",1); //掛載FLASH.
- POINT_COLOR=BLUE;
-
- init_dht11(); //溫濕度初始化
- Adc_Init(); //PM2.5初始化
- USART3_Init(9600); //初始化藍牙
- Fan_Init(); //風扇初始化
- Adc_Sound_Init(); //噪聲傳感器初始化
- My_RTC_Init(); //初始化RTC
- RTC_Set_WakeUp(RTC_WakeUpClock_CK_SPRE_16bits,0); //配置WAKE UP中斷,1秒鐘中斷一次
- /*
- //注意事項:
- //第一次請將時間改為當前的正常時間,編譯后下載到開發板上,下次修改代碼時必須將這兩句屏蔽掉,以后開發板即使斷電后也會自動同步時間
- // RTC_Set_Time(15,10,00,RTC_H12_PM); //設置時間
- // RTC_Set_Date(19,1,13,7); //設置日期
- */
-
- //GPIOF9,F10初始化設置
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//LED0和LED1對應IO口
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通輸出模式
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽輸出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
- GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
-
- GPIO_SetBits(GPIOB,GPIO_Pin_15);
-
- Home_page_masage();
- POINT_COLOR=RED;
- while(1)
- {
- key=KEY_Scan(0); //掃描按鍵
-
- RTC_GetTime(RTC_Format_BIN,&RTC_TimeStruct);
- sprintf((char*)timbuf,"%02d:%02d:%02d",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds);
- //LCD_ShowString(30,75,210,16,16,tbuf);
- RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct);
- sprintf((char*)daybuf,"20%02d-%02d-%02d",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date);
- //LCD_ShowString(30,95,210,16,16,tbuf);
- sprintf((char*)weekbuf,"%d",RTC_DateStruct.RTC_WeekDay);
- //LCD_ShowString(30,115,210,16,16,tbuf);
-
- sprintf((char*)tbuf,"%s/%s/%s",daybuf,timbuf,weekbuf);
- LCD_ShowString(30,95,210,16,16,tbuf);
-
- LCD_ShowxNum(110,250,Get_Adc_Average_Sound(5,18),6,16,0);//聲音傳感器
-
- PM_data = Get_GP2Y_Average(10);//PM2.5的值的獲取
- LCD_ShowxNum(100,210,PM_data,6,16,0);
-
- if(PM_data >300)
- Fan_Deflect(1);//風扇正
- if(PM_data < 300)
- Fan_Deflect(0);//風扇ting
-
- if(Get_Adc_Average_Sound(5,18) > 1300 || PM_data > 300)
- {
- GPIO_ResetBits(GPIOB,GPIO_Pin_15);//設置高,燈滅
- delay_ms(200);
- GPIO_SetBits(GPIOB,GPIO_Pin_15);//設置高,燈滅
- delay_ms(200);
-
- }
-
- get_temp_humi(&temp,&humi);//溫濕度的獲取
- if(temp > 0 && humi > 0)
- {
- LCD_ShowxNum(100,130,temp,6,16,0);
- LCD_ShowxNum(100,170,humi,6,16,0);
-
- switch(data)
- {
- case'T':
- {
- sprintf(temp_data, "%s %d\r\n", "temp:",temp);
- usart3_send_str(temp_data);
- data =2;
- };break;
- case'H':
- {
- sprintf(humi_data, "%s %d\r\n", "humi:",humi);
- usart3_send_str(humi_data);
- data =2;
- };break;
- case'P':
- {
- sprintf(pm_data, "%s %d\r\n", "pm2.5:",PM_data);
- usart3_send_str(pm_data);
- data =2;
- };break;
-
- }
- if(temp > 30 || humi >90)
- Fan_Deflect(1);//風扇正
- if(temp < 20 || humi < 40)
- Fan_Deflect(2);//風扇反
- if((humi > 50 && humi < 90) || (temp < 30 && temp > 20))
- Fan_Deflect(0);//風扇ting
-
- if(temp > 38 || humi > 90)
- {
- GPIO_ResetBits(GPIOB,GPIO_Pin_15);//設置高,燈滅
- delay_ms(500);
- GPIO_SetBits(GPIOB,GPIO_Pin_15);//設置高,燈滅
- delay_ms(500);
-
- }
- }
- }
- }
復制代碼
所有資料51hei提供下載:
Detection.7z
(264.03 KB, 下載次數: 10)
2020-4-22 02:34 上傳
點擊文件名下載附件
|