void LocalKey_PE0_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //P0口普推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_ResetBits(GPIOE, GPIO_Pin_0);
GPIO_SetBits(GPIOE, GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4);
}
void LocalKey_PE1_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //P0口普推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_ResetBits(GPIOE, GPIO_Pin_1);
GPIO_SetBits(GPIOE, GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4);
}
void scankey()
{
static uint8_t LocalKey_COUNT1,LocalKey_COUNT2,LocalKey_FLAG1,LocalKey_FLAG2;
LocalKey_PE0_Config();
__ScanKey_temp=(uint8_t)GPIO_ReadInputData(GPIOE);
if((__ScanKey_temp&0x1e)!=0X1e) //不等于有键按下
{
LocalKey_COUNT1++;
if((LocalKey_COUNT1>125)&&(LocalKey_FLAG1==0)) //125个循环周期去抖动
{
LocalKey_FLAG1=1;
__ScanKey_temp=(uint8_t)GPIO_ReadInputData(GPIOE); //再次读回数据
__ScanKey_temp=__ScanKey_temp&0x1e;
switch(__ScanKey_temp)
{
case 0X1c: //分区1
break;
case 0x1a: //分区2
break;
case 0x16: //分区3
break;
case 0x0e: //分区4
break;
default:
;
}
}
}
else //松开或者无按键
{
LocalKey_FLAG1=0;
LocalKey_COUNT1=0;
}
LocalKey_PE1_Config();
__ScanKey_temp=(uint8_t)GPIO_ReadInputData(GPIOE);
if((__ScanKey_temp&0x1d)!=0X1d) //不等于有键按下
{
LocalKey_COUNT2++;
if((LocalKey_COUNT2>125)&&(LocalKey_FLAG2==0)) //15个循环周期去抖动
{
LocalKey_FLAG2=1;
__ScanKey_temp=(uint8_t)GPIO_ReadInputData(GPIOE);
__ScanKey_temp=__ScanKey_temp&0x1d;
switch(__ScanKey_temp)
{
case 0X1c: //分区5
break;
case 0x19: //分区6
break;
case 0x15: //分区7
break;
case 0x0d: //分区8
break;
default:
;
}
}
}
else
{
LocalKey_FLAG2=0;
LocalKey_COUNT2=0;
}
} |