通过一个温湿度传感器来获取环境温度和湿度,用stm32自带的光敏传感器来获取环境光强。再通过stm32内部的adc转换为数字信号,并在屏幕上显示出来。然后,屏幕上同时也会显示我们设置的温度,湿度以及光强通过板子上自带的wifi模块与手机相连接,通过手机来设置相应的温度,湿度,以及光强。当环境温度高于设定温度的时候,其中一个电机就会转动起来吹风模拟给环境降温。当环境温度低于设置温度的时候电机就会停转。当环境湿度低于设置湿度的时候,这时其中的一个抽水电机就会运转起来抽水,模拟给环境增加湿度,当湿度高于环境湿度的时候,抽水电机就会停止运转。同样,光强也是如此,当环境光强低于设置光强的时候,这时就会驱动一只灯泡亮起来,当高于设置光强的时候灯泡就会熄灭。
单片机源程序如下:
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "lcd.h"
- #include "key.h"
- #include "usmart.h"
- #include "sram.h"
- #include "malloc.h"
- #include "w25qxx.h"
- #include "sdio_sdcard.h"
- #include "ff.h"
- #include "exfuns.h"
- #include "fontupd.h"
- #include "text.h"
- #include "usmart.h"
- #include "touch.h"
- #include "usart3.h"
- #include "common.h"
- #include "rtc.h"
- #include "dht11.h"
- #include "adc3.h"
- #include "lsens.h"
- #include "remote.h"
- #include "mypid.h"
- #include "pwm.h"
- #include "timer.h"
- int main(void)
- {
- u8 key,fontok=0;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
- delay_init(168); //初始化延时函数
- uart_init(115200); //初始化串口波特率为115200
- usart3_init(115200); //初始化串口3波特率为115200
- LED_Init(); //初始化LED
- LCD_Init(); //LCD初始化
- KEY_Init(); //按键初始化
- W25QXX_Init(); //初始化W25Q128
- tp_dev.init(); //初始化触摸屏
- usmart_dev.init(168); //初始化USMART
- 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.
- My_RTC_Init();
- TIM13_PWM_Init(1000-1,4-1);
- TIM14_PWM_Init(1000-1,4-1); //84M/84=1Mhz的计数频率,重装载值500,所以PWM频率为 1M/500=2Khz.
- // TIM_SetCompare1(TIM14,550);
- TIM5_CH1_Cap_Init(0XFFFFFFFF,84-1); //以1Mhz的频率计数
- TIM2_Int_Init(4999,8399); //计数0.5s发生一次中断
-
- usmart_dev.init(168); //初始化USMART
- 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.
- Remote_Init(); //红外接收初始化
- Lsens_Init(); //初始化
-
- key=KEY_Scan(0);
- if(key==KEY0_PRES) //强制校准
- {
- LCD_Clear(WHITE); //清屏
- TP_Adjust(); //屏幕校准
- TP_Save_Adjdata();
- LCD_Clear(WHITE); //清屏
- }
- fontok=font_init(); //检查字库是否OK
- if(fontok||key==KEY1_PRES)//需要更新字库
- {
- LCD_Clear(WHITE); //清屏
- POINT_COLOR=RED; //设置字体为红色
- LCD_ShowString(60,50,200,16,16,"ALIENTEK STM32");
- while(SD_Init()) //检测SD卡
- {
- LCD_ShowString(60,70,200,16,16,"SD Card Failed!");
- delay_ms(200);
- LCD_Fill(60,70,200+60,70+16,WHITE);
- delay_ms(200);
- }
- LCD_ShowString(60,70,200,16,16,"SD Card OK");
- LCD_ShowString(60,90,200,16,16,"Font Updating...");
- key=update_font(20,110,16,"0:");//从SD卡更新
- while(key)//更新失败
- {
- LCD_ShowString(60,110,200,16,16,"Font Update Failed!");
- delay_ms(200);
- LCD_Fill(20,110,200+20,110+16,WHITE);
- delay_ms(200);
- }
- LCD_ShowString(60,110,200,16,16,"Font Update Success!");
- delay_ms(1500);
- LCD_Clear(WHITE);//清屏
- }
- atk_8266_test(); //进入ATK_ESP8266测试
- }
复制代码
所有资料51hei提供下载:
温室大棚监测系统.rar
(3.44 MB, 下载次数: 194)
|