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; } } }