原子哥的按键扫描感觉太精彩了,于是乎。。。整理了下留着用。
[mw_shl_code=c,true]#define KEY0 1
#define KEY1 2
#define WK_UP 4
//==============================================================================
//函数名称:key_scan
//功能概要:扫描KEY
//参数说明:是否支持连按?0:都不支持;WK_UP:仅WK_UP支持;KEY1:仅KEY1支持;KEY0:仅KEY0支持
// 支持 或 操作,如 WK_UP|KEY1|KEY0,三键均支持连按
//函数返回:键值
//==============================================================================
uint8_t key_scan(uint8_t state)
{
uint8_t number = 0;
static uint8_t key_up = 1;
if(((key_up == 1)||((state&WK_UP) == WK_UP))&&(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == Bit_SET)) //检测WK_UP按键
{
delay_ms(20);
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == Bit_SET)
{
number = WK_UP;
key_up = 0;
}
}
else if(((key_up == 1)||((state&KEY1) == KEY1))&&(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15) == Bit_RESET)) //检测KEY1按键
{
delay_ms(20);
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15) == Bit_RESET)
{
number = KEY1;
key_up = 0;
}
}
else if(((key_up == 1)||((state&KEY0) == KEY0))&&(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5) == Bit_RESET)) //检测KEY0按键
{
delay_ms(20);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5) == Bit_RESET)
{
number = KEY0;
key_up = 0;
}
}
else if((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == Bit_RESET)&&(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15) == Bit_SET)&&(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5) == Bit_SET))
{
delay_ms(20);
if((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == Bit_RESET)&&(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15) == Bit_SET)&&(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5) == Bit_SET))
{
number = 0;
key_up = 1;
}
}
return number;
}[/mw_shl_code]
|