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);
//
// __TEMP=GPIO_ReadInputData(GPIOE);
// GPIO_Write(GPIOE, ((__TEMP&0xffe0)|0X001e));
__ScanKey_temp=(uint8_t)GPIO_ReadInputData(GPIOE);
if((__ScanKey_temp&0x1e)!=0X1e) //不等于有键按下
{
LocalKey_COUNT1++;
if((LocalKey_COUNT1>125)&&(LocalKey_FLAG1==0)) //15个循环周期去抖动
{
LocalKey_FLAG1=1;
// SYSTICK_BUZZ_FUN(200);
ZONE_FLAG=1; //标志分区键按下
__ScanKey_temp=(uint8_t)GPIO_ReadInputData(GPIOE);
__ScanKey_temp=__ScanKey_temp&0x1e;
// SYSTICK_KEY_WAIT_FUN(30000); //如果指有分区按键按下,30S秒还没功能键按下
switch(__ScanKey_temp)
{
case 0X1c: //分区1
ZONE[0]|=0x01; SYSTICK_BUZZ_FUN(200);
break;
case 0x1a: //分区2
ZONE[0]|=0x02; SYSTICK_BUZZ_FUN(200);
break;
case 0x16: //分区3
ZONE[0]|=0x04; SYSTICK_BUZZ_FUN(200);
break;
case 0x0e: //分区4
ZONE[0]|=0x08; SYSTICK_BUZZ_FUN(200);
break;
default:
ZONE_FLAG=0;
}
}
}
else //松开或者无按键
{
LocalKey_FLAG1=0;
LocalKey_COUNT1=0;
}
// delay(200);
// LocalKey_PE1_Config();
// __TEMP=GPIO_ReadInputData(GPIOE);
// GPIO_Write(GPIOE, ((__TEMP&0xffe0)|0X001d));
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;
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);
__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;
// SYSTICK_KEY_WAIT_FUN(30000);//30s时间等待
ZONE_FLAG=1;
switch(__ScanKey_temp)
{
case 0X1c: //分区5
ZONE[0]|=0x10;SYSTICK_BUZZ_FUN(200);
break; //分区6
case 0x19:
ZONE[0]|=0x20; SYSTICK_BUZZ_FUN(200);
break;
case 0x15: //分区7
ZONE[0]|=0x40;SYSTICK_BUZZ_FUN(200);
break;
case 0x0d: //分区8
ZONE[0]|=80; SYSTICK_BUZZ_FUN(200);
break;
}
}
}
else
{
LocalKey_FLAG2=0;
LocalKey_COUNT2=0;
}
谁能帮我看一下,这个完整的矩阵键盘扫描
为什么我单独一组四个按键都能扫到,两个全部运行怎么就扫描不到了?
|