STM32F4 按键输入实验

本实验用到的硬件资源有:
1) 指示灯 DS0、DS1
2) 蜂鸣器
3) 4 个按键:KEY0、KEY1、KEY2、和 KEY_UP。
DS0、DS1 以及蜂鸣器和 STM32F4 的连接在上两章都已经分别介绍了,在探索者 STM32F4
开发板上的按键 KEY0 连接在 PE4 上、KEY1 连接在 PE3 上、KEY2 连接在 PE2 上、KEY_UP连接在 PA0 上。
在这里插入图片描述

/key.h文件源码/

#ifndef _key_H_
#define _key_H_

#include "sys.h"
#define key0 PEin(4)
#define key1 PEin(3)
#define key2 PEin(2)
#define wk_up PAin(0)

/*初始化*/
void key_Init(void);

//独立按键的扫描
u8 key_scan(u8 mode);

#endif

/key.c文件源码/

#include "key.h"
#include "delay.h"

/*初始化*/
void key_Init(void){
	GPIO_InitTypeDef GPIO_key_up,GPIOE_key;
	//时钟使能
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOE,ENABLE);
	GPIO_key_up.GPIO_Mode = GPIO_Mode_IN;
	GPIO_key_up.GPIO_Pin = GPIO_Pin_0;
	GPIO_key_up.GPIO_PuPd = GPIO_PuPd_DOWN;
	GPIO_key_up.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOA,&GPIO_key_up);
	
	GPIOE_key.GPIO_Mode = GPIO_Mode_IN;
	GPIOE_key.GPIO_Pin = GPIO_Pin_2 |GPIO_Pin_3 |GPIO_Pin_4;
	GPIOE_key.GPIO_PuPd = GPIO_PuPd_UP;
	GPIOE_key.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOA,&GPIOE_key);
}

//独立按键的扫描
/**
	0:表示不支持长按, 1:表示支持长按,
**/
u8 key_scan(u8 mode){
	static u8 key_up = 1;
	if(mode)key_up= 1;
	if(key_up &&(key0==0||key1==0||key2 == 0||wk_up == 1)){
		delay_ms(10);
		key_up = 0;
		if(key0 ==0)return 1;
		else if(key1 == 0) return 2;
		else if(key2 == 0) return 3;
		else if(wk_up == 1) return 4;
	}else if(key0 ==1 && key1 ==1 && key2 == 1 && wk_up ==0)wk_up = 1;
	return 0;// 无按键按下
}

/main.c文件源码/

#include "stm32f4xx.h"  
#include "led.h"
#include "key.h"
#include "delay.h"

 
 int main(void) 
{
	u8 return_keyValue;
	delay_init(168);
	led_Init();
	key_Init();
	GPIO_ResetBits(GPIOF,GPIO_Pin_9);
	while(1){
		return_keyValue = key_scan(0);//得到键值
		if(return_keyValue){
			//GPIO_ResetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);
			switch(return_keyValue){
			case 1:GPIO_ResetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);break;
			case 2:GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);break;
			case 3:GPIO_ResetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);break;
			case 4:GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);break;
			}
		}else{
			delay_ms(20);
		}
		
	}		
 }


版权声明:本文为weixin_48629688原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。