STM32F407 之 按键实验

1、实验目的:利用板载的四个按键,来控制板载的4个LED等的亮灭。


2、硬件资源

1)LED 灯 D9、D10、D11、D12

2)蜂鸣器

3)四个按键:S7、S8、S9、S1

硬件连接:

STM32F407 之 按键实验_第1张图片


3、软件设计

1、key.c

#include "key.h"
#include "delay.h" 
	 
//按键初始化函数
void KEY_Init(void)
{
	
  GPIO_InitTypeDef  GPIO_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能时钟
 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6; 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
	 
} 

key.h
#ifndef __KEY_H
#define __KEY_H	 
#include "sys.h" 

//通过库函数直接读取IO的电平
#define S1 		GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_3) //PB3
#define S7 		GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)	//PB4 
#define S8 		GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5) //PB5
#define S9   	GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)	//PB6

void KEY_Init(void);	
u8   KEY_Scan(u8);  		
#endif





//按键扫描函数
u8 KEY_Scan(u8 mode)
{	 
	static u8 key_up = 1;
	if(mode)key_up=1;    //Ö§³ÖÁ¬°´		  
	if(key_up&&(S1==0||S7==0||S8==0||S9==0))
	{
		delay_ms(10);
		key_up=0;
		if(S1==0)     return 1;
		else if(S7==0)return 7;
		else if(S8==0)return 8;
		else if(S9==0)return 9;
	} else if(S1==1&&S7==1&&S8==1&&S9==1)key_up=1; 	    
 	return 0;
}

4、函数测试成功!

你可能感兴趣的:(处理器【STM32】,STM32F407ZGT6,按键输入实验,STM32,正点原子)