62 lines
1.9 KiB
C
62 lines
1.9 KiB
C
#include "key.h"
|
||
#include "delay.h"
|
||
//////////////////////////////////////////////////////////////////////////////////
|
||
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
|
||
//ALIENTEK STM32F429开发板
|
||
//KEY驱动代码
|
||
//正点原子@ALIENTEK
|
||
//技术论坛:www.openedv.com
|
||
//创建日期:2016/1/5
|
||
//版本:V1.0
|
||
//版权所有,盗版必究。
|
||
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
|
||
//All rights reserved
|
||
//////////////////////////////////////////////////////////////////////////////////
|
||
|
||
//按键初始化函数
|
||
void KEY_Init(void)
|
||
{
|
||
GPIO_InitTypeDef GPIO_Initure;
|
||
|
||
__HAL_RCC_GPIOA_CLK_ENABLE(); //开启GPIOA时钟
|
||
__HAL_RCC_GPIOC_CLK_ENABLE(); //开启GPIOC时钟
|
||
__HAL_RCC_GPIOH_CLK_ENABLE(); //开启GPIOH时钟
|
||
|
||
GPIO_Initure.Pin=GPIO_PIN_0; //PA0
|
||
GPIO_Initure.Mode=GPIO_MODE_INPUT; //输入
|
||
GPIO_Initure.Pull=GPIO_PULLDOWN; //下拉
|
||
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
|
||
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
|
||
|
||
GPIO_Initure.Pin=GPIO_PIN_13; //PC13
|
||
GPIO_Initure.Mode=GPIO_MODE_INPUT; //输入
|
||
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
|
||
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
|
||
HAL_GPIO_Init(GPIOC,&GPIO_Initure);
|
||
|
||
GPIO_Initure.Pin=GPIO_PIN_2|GPIO_PIN_3; //PH2,3
|
||
HAL_GPIO_Init(GPIOH,&GPIO_Initure);
|
||
}
|
||
|
||
//按键处理函数
|
||
//返回按键值
|
||
//mode:0,不支持连续按;1,支持连续按;
|
||
//0,没有任何按键按下
|
||
//1,WKUP按下 WK_UP
|
||
//注意此函数有响应优先级,KEY0>KEY1>KEY2>WK_UP!!
|
||
u8 KEY_Scan(u8 mode)
|
||
{
|
||
static u8 key_up=1; //按键松开标志
|
||
if(mode==1)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 KEY0_PRES;
|
||
else if(KEY1==0) return KEY1_PRES;
|
||
else if(KEY2==0) return KEY2_PRES;
|
||
else if(WK_UP==1) return WKUP_PRES;
|
||
}else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1;
|
||
return 0; //无按键按下
|
||
}
|