key.h
#ifndef _KEY_H
#define _KEY_H
#include "stm32f4xx.h"
#include "sys.h"
#define KEY_UP_GPIO_PORT GPIOA
#define KEY_UP_GPIO_PIN GPIO_PIN_0
#define KEY0_GPIO_PORT GPIOH
#define KEY0_GPIO_PIN GPIO_PIN_3
#define KEY1_GPIO_PORT GPIOH
#define KEY1_GPIO_PIN GPIO_PIN_2
#define KEY2_GPIO_PORT GPIOC
#define KEY2_GPIO_PIN GPIO_PIN_13
#define KEY_UP HAL_GPIO_ReadPin(KEY_UP_GPIO_PORT,KEY_UP_GPIO_PIN)
#define KEY0 HAL_GPIO_ReadPin(KEY0_GPIO_PORT,KEY0_GPIO_PIN)
#define KEY1 HAL_GPIO_ReadPin(KEY1_GPIO_PORT,KEY1_GPIO_PIN)
#define KEY2 HAL_GPIO_ReadPin(KEY2_GPIO_PORT,KEY2_GPIO_PIN)
#define KEY_UP_PRE 0X01
#define KEY0_PRE 0x02
#define KEY1_PRE 0x03
#define KEY2_PRE 0x04
void KEY_Init(void);
u8 KEY_Scan(void);
#endif
key.c
#include "key.h"
#include "delay.h"
void KEY_Init()
{
GPIO_InitTypeDef KEY_InitStructure;
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
//KEY_UP
KEY_InitStructure.Pin=KEY_UP_GPIO_PIN;
KEY_InitStructure.Mode=GPIO_MODE_INPUT;
KEY_InitStructure.Pull=GPIO_PULLDOWN;
KEY_InitStructure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(KEY_UP_GPIO_PORT,&KEY_InitStructure);
//KEY0
KEY_InitStructure.Pin=KEY0_GPIO_PIN;
KEY_InitStructure.Pull=GPIO_PULLUP;
HAL_GPIO_Init(KEY0_GPIO_PORT,&KEY_InitStructure);
//KEY1
KEY_InitStructure.Pin=KEY1_GPIO_PIN;
HAL_GPIO_Init(KEY1_GPIO_PORT,&KEY_InitStructure);
//KEY2
KEY_InitStructure.Pin=KEY2_GPIO_PIN;
HAL_GPIO_Init(KEY2_GPIO_PORT,&KEY_InitStructure);
}
u8 KEY_Scan(void)
{
if((KEY_UP==1)|(KEY0==0)|(KEY1==0)|(KEY2==0))
{
delay_ms(10);
if(KEY_UP==1) return KEY_UP_PRE;
else if(KEY0==0) return KEY0_PRE;
else if(KEY1==0) return KEY1_PRE;
else if(KEY2==0) return KEY2_PRE;
}
return 0;
}
main
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
int main(void)
{
u8 key;
HAL_Init(); //³õʼ»¯HAL¿â
Stm32_Clock_Init(360,25,2,8); //ÉèÖÃʱÖÓ,180Mhz
delay_init(180); //³õʼ»¯ÑÓʱº¯Êý
LED_Init(); //³õʼ»¯LED
KEY_Init();
while(1)
{
key=KEY_Scan();
switch(key)
{
case KEY_UP_PRE: LED_RED_ON; break;
case KEY0_PRE: LED_RED_OFF; break;
case KEY1_PRE: LED_GREEN_ON; break;
case KEY2_PRE: LED_GREEN_OFF; break;
}
}
}