3.25 ARM day8

发布于:2024-03-29 ⋅ 阅读:(19) ⋅ 点赞:(0)

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 后查看