This repository has been archived on 2025-04-28. You can view files and clone it, but cannot push or open issues or pull requests.
CMS3in1/1.Cabin/4.MISC/实验4 外部中断实验/Drivers/BSP/KEY/key.c

128 lines
4.2 KiB
C
Raw Normal View History

/**
****************************************************************************************************
* @file key.c
* @author <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD>(ALIENTEK)
* @version V1.0
* @date 2021-10-14
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @license Copyright (c) 2020-2032, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>޹<EFBFBD>˾
****************************************************************************************************
* @attention
*
* ʵ<EFBFBD><EFBFBD>ƽ̨:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD> ̽<EFBFBD><EFBFBD><EFBFBD><EFBFBD> F407<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ:www.yuanzige.com
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
* <EFBFBD><EFBFBD>˾<EFBFBD><EFBFBD>ַ:www.alientek.com
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ:openedv.taobao.com
*
* <EFBFBD>޸<EFBFBD>˵<EFBFBD><EFBFBD>
* V1.0 20211014
* <EFBFBD><EFBFBD>һ<EFBFBD>η<EFBFBD><EFBFBD><EFBFBD>
*
****************************************************************************************************
*/
#include "./BSP/KEY/key.h"
#include "./SYSTEM/delay/delay.h"
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param <EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
void key_init(void)
{
GPIO_InitTypeDef gpio_init_struct; /* GPIO<49><4F><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD> */
KEY0_GPIO_CLK_ENABLE(); /* KEY0ʱ<30><CAB1>ʹ<EFBFBD><CAB9> */
KEY1_GPIO_CLK_ENABLE(); /* KEY1ʱ<31><CAB1>ʹ<EFBFBD><CAB9> */
KEY2_GPIO_CLK_ENABLE(); /* KEY2ʱ<32><CAB1>ʹ<EFBFBD><CAB9> */
WKUP_GPIO_CLK_ENABLE(); /* WKUPʱ<50><CAB1>ʹ<EFBFBD><CAB9> */
gpio_init_struct.Pin = KEY0_GPIO_PIN; /* KEY0<59><30><EFBFBD><EFBFBD> */
gpio_init_struct.Mode = GPIO_MODE_INPUT; /* <20><><EFBFBD><EFBFBD> */
gpio_init_struct.Pull = GPIO_PULLUP; /* <20><><EFBFBD><EFBFBD> */
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* <20><><EFBFBD><EFBFBD> */
HAL_GPIO_Init(KEY0_GPIO_PORT, &gpio_init_struct); /* KEY0<59><30><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
gpio_init_struct.Pin = KEY1_GPIO_PIN; /* KEY1<59><31><EFBFBD><EFBFBD> */
gpio_init_struct.Mode = GPIO_MODE_INPUT; /* <20><><EFBFBD><EFBFBD> */
gpio_init_struct.Pull = GPIO_PULLUP; /* <20><><EFBFBD><EFBFBD> */
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* <20><><EFBFBD><EFBFBD> */
HAL_GPIO_Init(KEY1_GPIO_PORT, &gpio_init_struct); /* KEY1<59><31><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
gpio_init_struct.Pin = KEY2_GPIO_PIN; /* KEY2<59><32><EFBFBD><EFBFBD> */
gpio_init_struct.Mode = GPIO_MODE_INPUT; /* <20><><EFBFBD><EFBFBD> */
gpio_init_struct.Pull = GPIO_PULLUP; /* <20><><EFBFBD><EFBFBD> */
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* <20><><EFBFBD><EFBFBD> */
HAL_GPIO_Init(KEY2_GPIO_PORT, &gpio_init_struct); /* KEY2<59><32><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
gpio_init_struct.Pin = WKUP_GPIO_PIN; /* WKUP<55><50><EFBFBD><EFBFBD> */
gpio_init_struct.Mode = GPIO_MODE_INPUT; /* <20><><EFBFBD><EFBFBD> */
gpio_init_struct.Pull = GPIO_PULLDOWN; /* <20><><EFBFBD><EFBFBD> */
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* <20><><EFBFBD><EFBFBD> */
HAL_GPIO_Init(WKUP_GPIO_PORT, &gpio_init_struct); /* WKUP<55><50><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><EFBFBD><EFBFBD>
* @note <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>(ͬʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>): WK_UP > KEY2 > KEY1 > KEY0!!
* @param mode:0 / 1, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* @arg 0, <EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><EFBFBD><EFBFBD>ʱ, ֻ<EFBFBD>е<EFBFBD>һ<EFBFBD>ε<EFBFBD><EFBFBD>û<EFBFBD>ؼ<EFBFBD>ֵ,
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD><EFBFBD>Ժ<EFBFBD>, <EFBFBD>ٴΰ<EFBFBD><EFBFBD>²Ż<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ)
* @arg 1, ֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><EFBFBD><EFBFBD>ʱ, ÿ<EFBFBD>ε<EFBFBD><EFBFBD>øú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD>ֵ)
* @retval <EFBFBD><EFBFBD>ֵ, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* KEY0_PRES, 1, KEY0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* KEY1_PRES, 2, KEY1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* KEY2_PRES, 3, KEY2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* WKUP_PRES, 4, WKUP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
uint8_t key_scan(uint8_t mode)
{
static uint8_t key_up = 1; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD>־ */
uint8_t keyval = 0;
if (mode) key_up = 1; /* ֧<><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (key_up && (KEY0 == 0 || KEY1 == 0 || KEY2 == 0 || WK_UP == 1)) /* <20><><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD>־Ϊ1, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
{
delay_ms(10); /* ȥ<><C8A5><EFBFBD><EFBFBD> */
key_up = 0;
if (KEY0 == 0) keyval = KEY0_PRES;
if (KEY1 == 0) keyval = KEY1_PRES;
if (KEY2 == 0) keyval = KEY2_PRES;
if (WK_UP == 1) keyval = WKUP_PRES;
}
else if (KEY0 == 1 && KEY1 == 1 && KEY2 == 1 && WK_UP == 0) /* û<><C3BB><EFBFBD>κΰ<CEBA><CEB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ɿ<EFBFBD> */
{
key_up = 1;
}
return keyval; /* <20><><EFBFBD>ؼ<EFBFBD>ֵ */
}