回复 2楼 linlulu001
#include "key.h"
#include "delay.h"
#include "stm32f10x.h"
#include "sys.h"
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init(GPIOE, &GPIO_InitStruct);//使能IO口E的引脚2,3,4。设置IO口为输入上拉模式。
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPD;
GPIO_Init(GPIOA, &GPIO_InitStruct);//使能IO口A的引脚0。设置IO口为输入下拉模式,
}
/*u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;
if(mode)
{
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 WK_UP_PRES;
}
else if(key_up&&KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)
key_up=0;
return 0;
}*/
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//按键按松开标志
if(mode)key_up=1;
//支持连按
if((key_up==1)&&(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 WK_UP_PRES;
}else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)
key_up=1;
return 0;// 无按键按下
}