1.自己设置温度湿度阈值,当温度过高时,打开风扇,蜂鸣器报警
2.当湿度比较高时,打开LED1灯,蜂鸣器报警
bee.c
#include"bee.h"
void bee_init()
{
RCC->MP_AHB4ENSETR |= (0x1<<1);
GPIOB->MODER &= (~(0X3<<12));
GPIOB->MODER |= (0X1<<12);
GPIOB->OTYPER &= (~(0X1<<6));
GPIOB->OSPEEDR &= (~(0X3<<12));
GPIOB->PUPDR &= (~(0X3<<12));
GPIOB->ODR &= (~(0X1<<6));
}
void BEE_ON()
{
GPIOB->ODR |= (0X1<<6);
}
void BEE_OFF()
{
GPIOB->ODR &= (~(0X1<<6));
}
fan.c
#include "fan.h"
void fan_init()
{
RCC->MP_AHB4ENSETR |= (0x1<<4);
GPIOE->MODER &= (~(0X3<<18));
GPIOE->MODER |= (0X1<<18);
GPIOE->OTYPER &= (~(0X1<<9));
GPIOE->OSPEEDR &= (~(0X3<<18));
GPIOE->PUPDR &= (~(0X3<<18));
GPIOE->ODR &= (~(0X1<<9));
}
void FAN_ON()
{
GPIOE->ODR |= (0X1<<9);
}
void FAN_OFF()
{
GPIOE->ODR &= (~(0X1<<9));
}
led.c
#include "led.h"
void all_led_init()//led灯的初始化
{
//GPIOE/GPIOF时钟使能
RCC->MP_AHB4ENSETR |= (0x3<<4);
//PE10设置为输出
GPIOE->MODER &= (~(0X3<<20));
GPIOE->MODER |= (0X1<<20);
//PF10设置为输出
GPIOF->MODER &= (~(0X3<<20));
GPIOF->MODER |= (0X1<<20);
//PE8设置为输出
GPIOE->MODER &= (~(0X3<<16));
GPIOE->MODER |= (0X1<<16);
//PE10设置为推挽输出
GPIOE->OTYPER &= (~(0X1<<10));
//PF10设置为推挽输出
GPIOF->OTYPER &= (~(0X1<<10));
//PE8设置为推挽输出
GPIOE->OTYPER &= (~(0X1<<8));
//PE10设置为低速输出
GPIOE->OSPEEDR &= (~(0X3<<20));
//PF10设置为低速输出
GPIOF->OSPEEDR &= (~(0X3<<20));
//PE8设置为低速输出
GPIOE->OSPEEDR &= (~(0X3<<16));
//PE10无上拉下拉电阻
GPIOE->PUPDR &= (~(0X3<<20));
//PF10无上拉下拉电阻
GPIOF->PUPDR &= (~(0X3<<20));
//PE8无上拉下拉电阻
GPIOE->PUPDR &= (~(0X3<<16));
//三盏灯默认输出低电平
GPIOE->ODR &= (~(0X1<<10));
GPIOF->ODR &= (~(0X1<<10));
GPIOE->ODR &= (~(0X1<<8));
}
//led1亮
void LED1_ON()
{
GPIOE->ODR |= (0X1<<10);
}
//led2亮
void LED2_ON()
{
GPIOF->ODR |= (0X1<<10);
}
//led1亮
void LED3_ON()
{
GPIOE->ODR |= (0X1<<8);
}
//LED1灭
void LED1_OFF()
{
GPIOE->ODR &= (~(0X1<<10));
}
//LED2灭
void LED2_OFF()
{
GPIOF->ODR &= (~(0X1<<10));
}
//LED3灭
void LED3_OFF()
{
GPIOE->ODR &= (~(0X1<<8));
}
main.c
#include"led.h"
#include "fan.h"
#include "bee.h"
#include"si7006.h"
int main()
{
// led初始化
all_led_init();
fan_init();
bee_init();
//i2c初始化
i2c_init();
//si7006初始化
si7006_init();
short tem;
unsigned int short hum;
while(1)
{
//读取温度数据
tem=si7006_read_tem();
//读取湿度数据
hum=si7006_read_hum();
//计算温湿度数据
hum=125*hum/65536-6;
tem=175.72*tem/65536-46.85;
printf("hum:%d\n",hum);
printf("tem:%d\n",tem);
if(hum>=75)
{
LED1_ON();
BEE_ON();
}
if(hum<75)
{
LED1_OFF();
}
if(tem>=28)
{
FAN_ON();
BEE_ON();
}
if(tem<28)
{
FAN_OFF();
}
if(tem<28&&hum<75)
{
BEE_OFF();
}
delay(1000);
}
return 0;
}
本文含有隐藏内容,请 开通VIP 后查看