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

相关推荐
子朔不言2 小时前
[ARM-2D 专题]6.脏矩形定义的宏使用技巧和分析
c语言·arm开发·arm2d·显控开发-新龙微
x2lab2 小时前
国产化 ARM 环境mysql-mariadb 部署
arm开发·mysql·docker·mariadb
清风fu杨柳3 小时前
centos7 arm版本编译qt5.6.3详细说明
开发语言·arm开发·qt
清风fu杨柳3 小时前
麒麟服务器工作站SP1 arm环境qt5.6.3源码编译
服务器·arm开发·qt
7yewh4 小时前
嵌入式硬件实战提升篇(一)-泰山派RK3566制作多功能小手机
linux·arm开发·驱动开发·嵌入式硬件·物联网·智能手机·硬件架构
陌夏微秋9 小时前
51单片机基础02 动态数码管显示-并串转换
arm开发·单片机·嵌入式硬件·51单片机·硬件工程·信息与通信·信号处理
烬奇小云1 天前
使用 unicorn 和 capstone 库来模拟 ARM Thumb 指令的执行,并实现多个钩子(hook)来监控代码执行、系统调用和内存读写操作(二)
java·arm开发·python
CYRUS STUDIO2 天前
Android 下内联汇编,Android Studio 汇编开发
android·汇编·arm开发·android studio·arm
艾格北峰2 天前
STM32 BootLoader 刷新项目 (九) 跳转指定地址-命令0x55
arm开发·stm32·单片机·嵌入式硬件
橘色的喵3 天前
嵌入式ARM平台Linux网络实时性能优化
linux·网络·arm开发·性能优化·实时·内核优化