struct io_port
{
GPIO_TypeDef *GPIO_x;
unsigned short GPIO_pin;
};
static struct io_port key_output[4] =
{
{GPIOD, GPIO_Pin_13}, {GPIOD, GPIO_Pin_14},
{GPIOD, GPIO_Pin_15}, {GPIOC, GPIO_Pin_6}
};
static struct io_port key_input[7] =
{
{GPIOC, GPIO_Pin_7}, {GPIOC, GPIO_Pin_8},
{GPIOC, GPIO_Pin_9}, {GPIOA, GPIO_Pin_8},
{GPIOA, GPIO_Pin_11}, {GPIOA, GPIO_Pin_12},
{GPIOA, GPIO_Pin_13}
};
void update_key(void)
{
u8 i=0, j=0;
for(i = 0; i < 4; i++) //i是输出口,依次置低电平
{
GPIO_ResetBits(key_output[i].GPIO_x, key_output[i].GPIO_pin);
OSTimeDly(20); ///
// delay_ms(40);
for(j = 0; j < 7; j++) //j是输入口,当键按下时导通被置为低电平
{
if(GPIO_ReadInputDataBit(key_input[j].GPIO_x, key_input[j].GPIO_pin) == 0)
{
key[i][j] = 1;
}
else
{
key[i][j] = 0;
}
OSTimeDly(20);///
// delay_ms(40);
}
GPIO_SetBits(key_output[i].GPIO_x, key_output[i].GPIO_pin);
}
}
我一般这样做矩阵扫描。
|