嵌入式系统——使用GPIO固件库综合编程(通过按键控制LED灯与蜂鸣器的状态)

led.h

#ifndef LED_H
#define LED_H

#include "stm32f4xx.h"

typedef enum LED_ID_T{
	LED_D1 = 1,
	LED_D2,
	LED_D3,
	LED_D4
} LED_ID;

void led_init(void);
void led_one_on(LED_ID num);
void led_one_off(LED_ID num);
void delay(int num);
void led_loop(void);

#endif

led.c

#include "LED.h"
#include "systick.h"
#define Total_time 0x2000000

void led_init(){
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF, ENABLE);
	
	GPIO_InitTypeDef p;
	p.GPIO_Mode = GPIO_Mode_OUT;
	p.GPIO_OType = GPIO_OType_PP;
	p.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
	p.GPIO_PuPd = GPIO_PuPd_NOPULL;
	p.GPIO_Speed = 	GPIO_Speed_50MHz;
	GPIO_Init(GPIOF, &p);
	p.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14;
	GPIO_Init(GPIOE, &p);
	
	GPIO_SetBits(GPIOF, GPIO_Pin_9 | GPIO_Pin_10);
	GPIO_SetBits(GPIOE, GPIO_Pin_13 | GPIO_Pin_14);
}

void led_one_on(LED_ID led_now){
	if(led_now == 1){
		GPIO_ResetBits(GPIOF, GPIO_Pin_9);
		GPIO_SetBits(GPIOF, GPIO_Pin_10);
		GPIO_SetBits(GPIOE, GPIO_Pin_13 | GPIO_Pin_14);
	}
	else if(led_now == 2){
		GPIO_ResetBits(GPIOF, GPIO_Pin_10);
		GPIO_SetBits(GPIOF, GPIO_Pin_9);
		GPIO_SetBits(GPIOE, GPIO_Pin_13 | GPIO_Pin_14);
	}
	else if(led_now == 3){
		GPIO_ResetBits(GPIOE, GPIO_Pin_13);
		GPIO_SetBits(GPIOF, GPIO_Pin_9 | GPIO_Pin_10);
		GPIO_SetBits(GPIOE, GPIO_Pin_14);
	}
	else if(led_now == 4){
		GPIO_ResetBits(GPIOE, GPIO_Pin_14);
		GPIO_SetBits(GPIOF, GPIO_Pin_9 | GPIO_Pin_10);
		GPIO_SetBits(GPIOE, GPIO_Pin_13);
	}
}

void led_one_off(LED_ID led_now){
	if(led_now == 1){
		GPIO_SetBits(GPIOF, GPIO_Pin_9);
	}
	else if(led_now == 2){
		GPIO_SetBits(GPIOF, GPIO_Pin_10);
	}
	else if(led_now == 3){
		GPIO_SetBits(GPIOE, GPIO_Pin_13);
	}
	else if(led_now == 4){
		GPIO_SetBits(GPIOE, GPIO_Pin_14);
	}
}


void delay(int num){
	while(num--);
}

void led_loop(){
	LED_ID led_now = LED_D1;
	for (led_now = LED_D1;led_now <= LED_D4;led_now++){
		led_one_on(led_now);
		delay(Total_time);
		//Delay_ms(2000);
	}
}



key.h

#ifndef KEY_H
#define KEY_H

#include "stm32f4xx.h"
#include "beep.h"
#include "LED.h"

void key_init();
void key_check();
#endif


key.c

#include "key.h"
int tmp0 = 0;

void key_init(){
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOE, ENABLE);
	GPIO_InitTypeDef P;
	P.GPIO_Pin= GPIO_Pin_0;
	P.GPIO_Mode = GPIO_Mode_IN;
	P.GPIO_Speed = GPIO_Speed_50MHz;
		//P.GPIO_OType = GPIO_OType_PP;
	P.GPIO_PuPd = GPIO_PuPd_NOPULL;	
	GPIO_Init(GPIOA,&P); //初始化key0
	P.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
	GPIO_Init(GPIOE,&P); //初始化key1,key2,key3
}

void key_check(){
	if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)){//key0被按下
		//flag1 ? led_one_on(LED_D1) : led_one_off(LED_D1); flag1 ^= 1;
		//GPIO_ToggleBits(GPIOF, GPIO_Pin_9);
		tmp0 = 1;
		//delay(5500);
	}
	else if(!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)){//key1被按下
		//flag2 ? led_one_on(LED_D2) : led_one_off(LED_D2); flag2 ^= 1;
		GPIO_ToggleBits(GPIOF, GPIO_Pin_10);
		delay(5500);
	}
	else if(!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3)){//key2被按下
		GPIO_ToggleBits(GPIOE, GPIO_Pin_13);
		delay(5500);
	}
	else if(!GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4)){//key3被按下
		GPIO_ToggleBits(GPIOE, GPIO_Pin_14);
		delay(5500);
		GPIO_SetBits(GPIOF, GPIO_Pin_8);//置1,蜂鸣器响起
		delay(0x666666);
		GPIO_ResetBits(GPIOF, GPIO_Pin_8);//置0
	}
}


beep.h

#ifndef BEEP_H
#define BEEP_H

#include "stm32f4xx.h"
#include "systick.h"

void beep_init(int f);
void music_fun();

#endif

beep.c

#include "beep.h"
void beep_init(int f){
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
	
	GPIO_InitTypeDef P;
	P.GPIO_Pin= GPIO_Pin_8;
	P.GPIO_Mode = GPIO_Mode_OUT;
	P.GPIO_Speed = GPIO_Speed_50MHz;
	P.GPIO_PuPd = GPIO_PuPd_NOPULL;
	GPIO_Init(GPIOF,&P); //初始化BEEP
	GPIO_PinAFConfig(GPIOF, GPIO_PinSource8, GPIO_AF_TIM13);
	GPIO_ResetBits(GPIOF, GPIO_Pin_8);//初始化置0
}

main.c

led_init();//初始化LED
  key_init();//初始化key
  beep_init();//初始化蜂鸣器
while (1)
  {
  	key_check();//等待key响应
  	
  }
posted @ 2021-05-29 16:09  wsl_lld  阅读(768)  评论(0编辑  收藏  举报