STM32F407系按键输入控制LED及蜂鸣器实验

实验要求:开发板上有4个按钮分别是KEY_UP、KEY_0、KEY_1、KEY_2
1.KEY_UP控制BEEP蜂鸣器,按一次叫,再按一次停
2.KEY_0同时控制DS0和DS1,按一次他们的状态翻转一次
3.KEY_1控制DS1,按一次翻转一次
4.KEY_2控制DS0,按一次翻转一次
硬件图如下
STM32F407系按键输入控制LED及蜂鸣器实验_第1张图片
STM32F407系按键输入控制LED及蜂鸣器实验_第2张图片
注意:KEY_0、KEY_1、KEY_2是低电平有效,而KEY_UP是高电平才有效的

一、新建.c文件,写入GPIO初始化的代码
STM32F407系按键输入控制LED及蜂鸣器实验_第3张图片
可以看到我们先定义了一个结构体变量用于初始化GPIO,然后同时使能了我们要用到的GPIOA、GPIOE、GPIOF的时钟,然后配置了个IO口所需
二、紧跟着再下面创建一个函数,写入检测按键的代码

int KEY_go(void)
{
	short key_number;
	delay_init(168);
	
	if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0))//检查KEY_UP键是否按下
	{
		delay_ms(1);//延时消抖
		if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0))
		{
			while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0));//等待松手
			return 1;
		}
	}
	else if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0 || GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==0 
			|| GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==0)
	{
		delay_ms(1);
		if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0 || GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==0 
			|| GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==0)
		{
			if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==0)
			{
				while(!GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4));//等待松手
				return 2;
			}
				else if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==0)
					 {
						while(!GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3));//等待松手
						return 3;
					 }
						else if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0)
							 {
								while(!GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2));//等待松手
								return 4;
							 }
		}
	}
	
	return 0;
	
}

三、编写.c的头文件,并加入头文件寻找路径
STM32F407系按键输入控制LED及蜂鸣器实验_第4张图片
KEY_go会按照题目1234种情况,返回1234数字

四、main函数编写
根据返回的1234值,执行对应的操作
STM32F407系按键输入控制LED及蜂鸣器实验_第5张图片

总结:
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0))这种类似代码,其实可以在头文件中写
#define GPIOA0in PAin(0)
#define LED1 PFin(10)
#define BEEP PFin(8)
这样写了后这种类似代码就可写成
if(GPIOA0in)
可简化代码,使其更短 看起来更明了方便

你可能感兴趣的:(STM32F4单片机)