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"motor.h"
// #include"uart4.h"
// #include"key_inc.h"
#include"si7006.h"
//封装延时函数
// void delay(int ms)
// {
// int i,j;
// for(i=0;i<ms;i++)
// {
// for(j=0;j<2000;j++)
// {}
// }
// }
int main()
{
// led初始化
all_led_init();
fan_init();
bee_init();
// motor_init();
//串口初始化
//uart4_init();
//char i;
// key1_it_config();
// key2_it_config();
// key3_it_config();
//i2c初始化
i2c_init();
//si7006初始化
si7006_init();
short tem;
unsigned int short hum;
while(1)
{
// i=getchar();
// putchar(i);
// printf("in main pro\n");
// delay(1000);
//读取温度数据
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;
}