ARM day8作业

1.自己设置温度湿度阈值,当温度过高时,打开风扇,蜂鸣器报警

2.当湿度比较高时,打开LED1灯,蜂鸣器报警

//蜂鸣器

bz.h

cs 复制代码
#ifndef __BZ_H__
#define __BZ_H__

#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"

void all_bz_init();
void bz_on();
void bz_off();

#endif

bz.c

cs 复制代码
#include "bz.h"

//PB6
void all_bz_init()
{
    //GPIOB时钟使能
    RCC->MP_AHB4ENSETR  |= (0x1<<1);

    //PB6设置为输出
    GPIOB->MODER &= (~(0X3<<12));
    GPIOB->MODER |= (0X1<<12);

    //PB6设置为推挽输出
    GPIOB->OTYPER &= (~(0X1<<6));

    //PB6设置为低速输出
    GPIOB->OSPEEDR &= (~(0X3<<12));

    //PB6无上拉下拉电阻
    GPIOB->PUPDR &= (~(0X3<<12));

    //默认输出低电平
    GPIOB->ODR &= (~(0X1<<6));
}

void bz_on()
{
    GPIOB->ODR |= (0X1<<6);
}

void bz_off()
{
    GPIOB->ODR &= (~(0X1<<6));
}

//风扇

fan.h

cs 复制代码
#ifndef __FAN_H__
#define __FAN_H__

#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"

void all_fan_init();
void fan_on();
void fan_off();

#endif

fan.c

cs 复制代码
#include "fan.h"

//风扇 PE9
void all_fan_init()
{
    //GPIOE时钟使能
    RCC->MP_AHB4ENSETR  |= (0x1<<4);

    //PE9设置为输出
    GPIOE->MODER &= (~(0X3<<18));
    GPIOE->MODER |= (0X1<<18);

    //PE9设置为推挽输出
    GPIOE->OTYPER &= (~(0X1<<9));

    //PE9设置为低速输出
    GPIOE->OSPEEDR &= (~(0X3<<9));

    //PE9无上拉下拉电阻
    GPIOE->PUPDR &= (~(0X3<<18));

    //默认输出低电平
    GPIOE->ODR &= (~(0X1<<9));
}

void fan_on()
{
    GPIOE->ODR |= (0X1<<9);
}

void fan_off()
{
    GPIOE->ODR &= (~(0X1<<9));
}

main.c

cs 复制代码
#include"si7006.h"
#include"led.h"
#include"fan.h"
#include"bz.h"
//PE9 fan   PB6 bz
int main()
{

    //i2c初始化
    i2c_init();
    //si7006初始化
    si7006_init();
    //led,fan,bz初始化
    all_bz_init();
    all_led_init();
    all_fan_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<=55)
        {
            LED1_OFF();
        }
        else
        {
            LED1_ON();   
        }
        if(tem>=25)
        {
            fan_on();
            bz_on();
        }
        else{
            fan_off();
            bz_off();
        }
        //串口打印
        delay(1000);
        printf("hum:%d\n",hum);
        printf("tem:%d\n",tem);

    }
    return 0;
}

现象视频

VID_20240325_195625

相关推荐
逆鱼_0419 小时前
ARM—LED,看门狗关闭,按钮,时钟,PWM定时器,蜂鸣器
arm开发
钡铼技术物联网关2 天前
ARM边缘计算时代:BLIoTLink如何打通设备互联任督二脉
arm开发·人工智能·边缘计算
一道微光2 天前
mac air m系列arm架构芯片安装虚拟机 UTM+debian 浏览器firefox和chrome
arm开发·macos·架构
小蘑菇二号2 天前
ARM 架构--通用寄存器/状态寄存器/控制寄存器/特殊用途寄存器
arm开发·架构
磨十三3 天前
ARM-----数据处理、异常处理、模式切换
arm开发
最后一个bug3 天前
教你快速理解linux中的NUMA节点探测是干什么用的?
linux·c语言·开发语言·arm开发·嵌入式硬件
磨十三4 天前
初始ARM
arm开发
Xuan-ZY5 天前
【KEIL5.3.7以上版本ARM compiler5 version】
arm开发
一枝小雨6 天前
ARM异常处理流程与中断机制总结,与常见丢中断情况
arm开发·嵌入式硬件·架构·系统架构·arm
钡铼技术物联网关7 天前
模块化革命:树莓派CM5嵌入式工业计算机如何重构嵌入式系统开发边界
linux·arm开发·边缘计算