前段时间进行了说STM32的学习,现在把学习成果共享出来,仅供参考。
实验目标:对环境温度湿度以及光照值进行检测(传感器)和控制(按键)。
硬件资源:STM32开发板、DHT11温湿度传感器和光敏传感器。
#include "stm32f4xx.h"
#include "gpio.h"
#include "led.h"
#include "buzz.h"
#include "key.h"
#include "exit.h"
#include "delay.h"
#include "timer.h"
#include "oled.h"
#include "simi2c.h"
#include "dht11.h"
#include "adc.h"
#include <stdio.h>
char fl[10];
char f2[10];
char lig[10];
char hums[10];
char temps[10];
int adcx;
int light=300; //光照阈值
int humyz=55; //湿度阈值
int temp=40; //温度阈值
int main(void)
{
delay_init(168);
EXTIX_Init();
gpioInit();
IIC_Init();
InitOLed();
dht11Init();
Adc_Init();
OLed_ShowTemp();
OLed_ShowLight();
OLed_Showhum();
OLed_Showzhnyhyn();
OLed_ShowASCII(80,6,"300");
while(1)
{
adcx=Get_Adc(ADC_Channel_0); //光照检测
sprintf(lig,"%d",adcx*3280/4095);
OLed_ShowASCII(35,6,lig);
dht11ReadData(); //温湿度检测
sprintf(hums,"%d",hum);
sprintf(temps,"%d",tem);
OLed_ShowASCII(35,2,temps);
OLed_ShowASCII(35,4,hums);
delay_ms(10);
sprintf(f2,"%d",humyz);
OLed_ShowASCII(80,4,f2);
sprintf(fl,"%d",temp);
OLed_ShowASCII(80,2,fl);
if(tem >= temp)
LED1_ON;
if(tem < temp )
LED1_OFF;
if(hum >= humyz)
LED2_ON;
if(hum < humyz)
LED2_OFF;
if(adcx*3280/4095 < light)
{
LED3_ON;
BUZZ_ON;
}
if(adcx*3280/4095 > light)
{
LED3_OFF;
BUZZ_OFF;
}
//按键12加减 温度值
if(KEY1==0)
{
delay_ms(10);
if(KEY1==0)
temp--;
}
if(KEY2==0)
{
delay_ms(10);
if(KEY2==0)
temp++;
}
//按键34加减 湿度值
if(KEY3==0)
{
delay_ms(10);
if(KEY3==0)
humyz--;
}
if(KEY4==0)
{
delay_ms(10);
if(KEY4==0)
humyz++;
}
}
}
需要的朋友直接留邮箱或私信我,我还有其他两个版本。