ARMday5

时间:2024-03-26 08:54:20

风扇蜂鸣器

1.main.c

#include"led.h"
//封装延时函数
void delay(int ms)
{
    int i,j;
    for(i=0;i<ms;i++)
    {
        for(j=0;j<2000;j++)
        {}

    }
}
int main()
{
    //外设初始化
    all_pplout_init();
    while(1)
    {
        BUZZER_ON();
        delay(2000);
        BUZZER_OFF();
        delay(2000);
        MOTOR_ON();
        delay(2000);
        MOTOR_OFF();
        delay(2000);
        FAN_ON();
        delay(2000);
        FAN_OFF();
        delay(2000);
    }
    return 0;
}

2.led.c

#include "led.h"

void all_pplout_init()//led灯的初始化
{
    //GPIOE/GPIOF时钟使能
   RCC  |= (0x3<<4);
   RCC  |= (0x1<<2);
    //PE10设置为输出
    GPIOE.MODER &= (~(0X3<<12));
    GPIOE.MODER |= (0X1<<12);
    //PF10设置为输出
    GPIOE.MODER &= (~(0X3<<18));
    GPIOE.MODER |= (0X1<<18);
    //PE8设置为输出
    GPIOE.MODER &= (~(0X3<<12));
    GPIOE.MODER |= (0X1<<12);
    //PE10设置为推挽输出
    GPIOB.OTYPER &= (~(0X1<<6));
    //PF10设置为推挽输出
    GPIOE.OTYPER &= (~(0X1<<9));
    //PE8设置为推挽输出
    GPIOF.OTYPER &= (~(0X1<<6));
    //PE10设置为低速输出
    GPIOB.OSPEEDR &= (~(0X3<<12));
    //PF10设置为低速输出
    GPIOE.OSPEEDR &= (~(0X3<<18));
    //PE8设置为低速输出
    GPIOF.OSPEEDR &= (~(0X3<<12));
    //PE10无上拉下拉电阻
    GPIOB.OPUPDR &= (~(0X3<<12));
    //PF10无上拉下拉电阻
    GPIOE.OPUPDR &= (~(0X3<<18));
    //PE8无上拉下拉电阻
    GPIOF.OPUPDR &= (~(0X3<<12));

    //三盏灯默认输出低电平
    GPIOB.ODR &= (~(0X1<<6));
    GPIOE.ODR &= (~(0X1<<9));
    GPIOF.ODR &= (~(0X1<<6));
}

//led1亮
void BUZZER_ON()
{
    GPIOB.ODR |= (0X1<<6);
}
//led2亮
void MOTOR_ON()
{
   GPIOE.ODR |= (0X1<<9);
}
//led1亮
void FAN_ON()
{
    GPIOF.ODR |= (0X1<<6);
}

//LED1灭
void BUZZER_OFF()
{
     GPIOB.ODR &= (~(0X1<<6));
}
//LED2灭
void MOTOR_OFF()
{
     GPIOE.ODR &= (~(0X1<<9));
}
//LED3灭
void FAN_OFF()
{
     GPIOF.ODR &= (~(0X1<<6));
}    

3.led.h

#ifndef __LED_H__
#define __LED_H__
typedef struct
{
    unsigned int MODER;
    unsigned int OTYPER;
    unsigned int OSPEEDR;
    unsigned int OPUPDR;
    unsigned int IDR;
    unsigned int ODR;
}gpio_t;

#define RCC (*(unsigned int *)0X50000A28)
#define GPIOB (*(gpio_t *)0X50003000)
#define GPIOE (*(gpio_t *)0X50006000)
#define GPIOF (*(gpio_t *)0X50007000)

void all_pplout_init();
void BUZZER_ON();
void FAN_ON();
void MOTOR_ON();
void BUZZER_OFF();
void FAN_OFF();
void MOTOR_OFF();

#endif