找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1629|回复: 1
打印 上一主题 下一主题
收起左侧

基于STM32的工地环境检测程序

[复制链接]
跳转到指定楼层
楼主
里面包括DTH11温湿度采集、PM2.5浓度采集等模块,程序详细

单片机源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "lcd.h"
  6. #include "key.h"  
  7. #include "sram.h"   
  8. #include "malloc.h"  
  9. #include "sdio_sdcard.h"   
  10. #include "malloc.h"
  11. #include "w25qxx.h"   
  12. #include "ff.h"  
  13. #include "exfuns.h"   
  14. #include "fontupd.h"
  15. #include "text.h"       
  16. #include "string.h"       
  17. #include "math.h"       
  18. #include "gp2y1014au.h"
  19. #include "dht11.h"
  20. #include "beep.h"
  21. #include "blu.h"
  22. #include "fan.h"
  23. #include "rtc.h"
  24. #include "sound.h"
  25. #include "adc.h"

  26. void Home_page_masage(void)
  27. {
  28.         Show_Str(35,1,240,24,"Based on STM32",24,0);                        
  29.         Show_Str(30,26,240,24,"Site environmen",24,0);
  30.         Show_Str(12,51,240,24,"monitorting system",24,0);

  31.         Show_Str(60,130,240,16,"TEMP:",16,0);
  32.         Show_Str(150,130,240,16,"C",16,0);
  33.        
  34.         Show_Str(60,170,240,16,"HUMI:",16,0);
  35.         Show_Str(150,170,240,16,"RH",16,0);
  36.        
  37.         Show_Str(60,210,240,16,"PM2.5:",16,0);
  38.         Show_Str(150,210,240,16,"um",16,0);
  39.        
  40.         Show_Str(60,250,240,16,"NOISE:",16,0);
  41.        
  42.         Show_Str(60,290,240,16,"FAN:",16,0);
  43. }


  44. int main(void)
  45. {        
  46.         u8 key;                                //键值
  47.         u32 temp;
  48.         u32 humi;
  49.         u16 PM_data;
  50.         char temp_data[64] = {0};
  51.         char humi_data[64] = {0};
  52.         char pm_data[64] = {0};
  53.         char zs_data[64] = {0};
  54.         char fs_data[64] = {0};
  55.        
  56.         u8 timbuf[40];
  57.         u8 daybuf[40];
  58.         u8 weekbuf[40];
  59.         u8 tbuf[40];
  60.         RTC_TimeTypeDef RTC_TimeStruct;
  61.         RTC_DateTypeDef RTC_DateStruct;
  62.         GPIO_InitTypeDef  GPIO_InitStructure;

  63.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOA时钟
  64.        
  65.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
  66.        
  67.        
  68.         delay_init(168);  //初始化延时函数
  69.         uart_init(115200);                //初始化串口波特率为115200
  70.         LED_Init();                                        //初始化LED
  71.        
  72.         LCD_Init();                                                        //LCD初始化  
  73.         KEY_Init();                                                        //按键初始化  
  74.         W25QXX_Init();                                        //初始化W25Q128
  75.         my_mem_init(SRAMIN);                //初始化内部内存池
  76.         my_mem_init(SRAMCCM);                //初始化CCM内存池
  77.         exfuns_init();                                        //为fatfs相关变量申请内存  
  78.   f_mount(fs[0],"0:",1);         //挂载SD卡
  79.         f_mount(fs[1],"1:",1);         //挂载FLASH.
  80.         POINT_COLOR=BLUE;
  81.        
  82.         init_dht11();                                        //温湿度初始化
  83.         Adc_Init();                                                //PM2.5初始化
  84.         USART3_Init(9600);                //初始化蓝牙
  85.         Fan_Init();                                                //风扇初始化
  86.         Adc_Sound_Init();                        //噪声传感器初始化
  87.         My_RTC_Init();                                 //初始化RTC

  88.         RTC_Set_WakeUp(RTC_WakeUpClock_CK_SPRE_16bits,0);                //配置WAKE UP中断,1秒钟中断一次
  89. /*
  90. //注意事项:
  91. //第一次请将时间改为当前的正常时间,编译后下载到开发板上,下次修改代码时必须将这两句屏蔽掉,以后开发板即使断电后也会自动同步时间
  92. //        RTC_Set_Time(15,10,00,RTC_H12_PM);        //设置时间   
  93. //        RTC_Set_Date(19,1,13,7);                //设置日期
  94. */
  95.        
  96.   //GPIOF9,F10初始化设置
  97.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//LED0和LED1对应IO口
  98.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
  99.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  100.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  101.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  102.   GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
  103.        
  104.         GPIO_SetBits(GPIOB,GPIO_Pin_15);
  105.        
  106.         Home_page_masage();
  107.         POINT_COLOR=RED;
  108.                 while(1)
  109.                 {
  110.                         key=KEY_Scan(0);                //扫描按键
  111.                        
  112.                         RTC_GetTime(RTC_Format_BIN,&RTC_TimeStruct);
  113.                         sprintf((char*)timbuf,"%02d:%02d:%02d",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds);
  114.                         //LCD_ShowString(30,75,210,16,16,tbuf);       

  115.                         RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct);
  116.                         sprintf((char*)daybuf,"20%02d-%02d-%02d",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date);
  117.                         //LCD_ShowString(30,95,210,16,16,tbuf);       
  118.                         sprintf((char*)weekbuf,"%d",RTC_DateStruct.RTC_WeekDay);
  119.                         //LCD_ShowString(30,115,210,16,16,tbuf);
  120.                        
  121.                         sprintf((char*)tbuf,"%s/%s/%s",daybuf,timbuf,weekbuf);
  122.                         LCD_ShowString(30,95,210,16,16,tbuf);
  123.                        
  124.                         LCD_ShowxNum(110,250,Get_Adc_Average_Sound(5,18),6,16,0);//声音传感器
  125.                        
  126.                         PM_data = Get_GP2Y_Average(10);//PM2.5的值的获取
  127.                         LCD_ShowxNum(100,210,PM_data,6,16,0);
  128.                        
  129.                         if(PM_data >300)
  130.                                                 Fan_Deflect(1);//风扇正
  131.                         if(PM_data < 300)
  132.                                                 Fan_Deflect(0);//风扇ting
  133.                        
  134.                         if(Get_Adc_Average_Sound(5,18) > 1300 || PM_data > 300)
  135.                         {
  136.                                 GPIO_ResetBits(GPIOB,GPIO_Pin_15);//设置高,灯灭
  137.                                         delay_ms(200);
  138.                                 GPIO_SetBits(GPIOB,GPIO_Pin_15);//设置高,灯灭
  139.                                         delay_ms(200);
  140.                                        
  141.                         }
  142.                        
  143.                         get_temp_humi(&temp,&humi);//温湿度的获取
  144.                         if(temp > 0 && humi > 0)
  145.                         {
  146.                                 LCD_ShowxNum(100,130,temp,6,16,0);
  147.                                 LCD_ShowxNum(100,170,humi,6,16,0);
  148.                                
  149.                                 switch(data)
  150.                                 {
  151.                                         case'T':
  152.                                         {
  153.                                                 sprintf(temp_data, "%s %d\r\n", "temp:",temp);
  154.                                                         usart3_send_str(temp_data);
  155.                                                 data =2;
  156.                                         };break;
  157.                                         case'H':
  158.                                         {
  159.                                                 sprintf(humi_data, "%s %d\r\n", "humi:",humi);
  160.                                                         usart3_send_str(humi_data);
  161.                                                 data =2;
  162.                                         };break;
  163.                                         case'P':
  164.                                         {
  165.                                                 sprintf(pm_data, "%s %d\r\n", "pm2.5:",PM_data);
  166.                                                         usart3_send_str(pm_data);
  167.                                                 data =2;
  168.                                         };break;
  169.                                        
  170.                                 }

  171.                                         if(temp > 30 || humi >90)
  172.                                                 Fan_Deflect(1);//风扇正
  173.                                         if(temp < 20 || humi < 40)
  174.                                                 Fan_Deflect(2);//风扇反
  175.                                         if((humi > 50 && humi < 90)  || (temp < 30 && temp > 20))
  176.                                                 Fan_Deflect(0);//风扇ting
  177.                                
  178.                                 if(temp > 38 || humi > 90)
  179.                                 {
  180.                                         GPIO_ResetBits(GPIOB,GPIO_Pin_15);//设置高,灯灭
  181.                                         delay_ms(500);
  182.                                         GPIO_SetBits(GPIOB,GPIO_Pin_15);//设置高,灯灭
  183.                                         delay_ms(500);
  184.                                
  185.                                 }
  186.                         }
  187.                 }       
  188.         }
复制代码

所有资料51hei提供下载:
Detection.7z (264.03 KB, 下载次数: 10)

51hei截图20200421155132.png (78.54 KB, 下载次数: 27)

51hei截图20200421155132.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2020-4-22 02:35 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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