首先放上代码
struct io_port
{
GPIO_TypeDef *GPIO_x;
unsigned short GPIO_pin;
};
static struct io_port key_output[6] = {
{GPIOC, GPIO_Pin_1}, {GPIOC, GPIO_Pin_2},
{GPIOC, GPIO_Pin_3}, {GPIOC, GPIO_Pin_4},
{GPIOC, GPIO_Pin_5}, {GPIOC, GPIO_Pin_6}
};
static struct io_port key_input[6] = {
{GPIOC, GPIO_Pin_9}, {GPIOC, GPIO_Pin_10},
{GPIOC, GPIO_Pin_11}, {GPIOC, GPIO_Pin_12},
{GPIOC, GPIO_Pin_13}, {GPIOC, GPIO_Pin_14}
};
unsigned char key[6][6];
void keyboard_init(void) //GPIOC_1-GPIOC_6是输出,全部置1
{
unsigned char i;
for(i = 0; i < 6; i++)
{
GPIO_SetBits(key_output.GPIO_x, key_output.GPIO_pin);
}
}
void update_key(void)
{
unsigned char i, j;
for(i = 0; i < 6; i++) //i是输出口,依次置低电平
{
GPIO_ResetBits(key_output.GPIO_x, key_output.GPIO_pin);
for(j = 0; j < 6; j++) //j是输入口,当键按下时导通被置为低电平
{
// if(GPIO_ReadInputDataBit(key_input[j].GPIO_x, key_input[j].GPIO_pin) == 0)
/// {
// delay(10);
if(GPIO_ReadInputDataBit(key_input[j].GPIO_x, key_input[j].GPIO_pin) == 0)
key[j] = 1;
else
key[j] = 0;
// }
}
GPIO_SetBits(key_output.GPIO_x, key_output.GPIO_pin);
}
}
int key_value(void)
{
unsigned char keydata;
keyboard_init();
update_key();
if(key[0][0]) keydata=1;
else if(key[0][1]) keydata=2;
else if(key[0][2]) keydata=3;
else if(key[0][3]) keydata=4;
else if(key[0][4]) keydata=5;
else if(key[0][5]) keydata=6;
else if(key[1][0]) keydata=7;
else if(key[1][1]) keydata=8;
else if(key[1][2]) keydata=9;
else if(key[1][3]) keydata=10;
else if(key[1][4]) keydata=11;
else if(key[1][5]) keydata=12;
else if(key[2][0]) keydata=13;
else if(key[2][1]) keydata=14;
else if(key[2][2]) keydata=15;
else if(key[2][3]) keydata=16;
else if(key[2][4]) keydata=17;
else if(key[2][5]) keydata=18;
else if(key[3][0]) keydata=19;
else if(key[3][1]) keydata=20;
else if(key[3][2]) keydata=21;
else if(key[3][3]) keydata=22;
else if(key[3][4]) keydata=23;
else if(key[3][5]) keydata=24;
else if(key[4][0]) keydata=25;
else if(key[4][1]) keydata=26;
else if(key[4][2]) keydata=27;
else if(key[4][3]) keydata=28;
else if(key[4][4]) keydata=29;
else if(key[4][5]) keydata=30;
else if(key[5][0]) keydata=31;
else if(key[5][1]) keydata=32;
else if(key[5][2]) keydata=33;
else if(key[5][3]) keydata=34;
else if(key[5][4]) keydata=35;
else if(key[5][5]) keydata=36;
else ;
return keydata;
}
程序如上的时候,按键什么的输出正常,但是因为没有消除抖动,会有小问题。在去掉程序中的斜杠,加上消抖的时候,程序不正常执行了,按下某一个按键之后,就会死掉,求教为什么啊 |