打印

新手关于STM32矩阵键盘问题

[复制链接]
2157|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sanjue|  楼主 | 2012-9-4 14:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先放上代码

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;
}

程序如上的时候,按键什么的输出正常,但是因为没有消除抖动,会有小问题。在去掉程序中的斜杠,加上消抖的时候,程序不正常执行了,按下某一个按键之后,就会死掉,求教为什么啊
沙发
IJK| | 2012-9-4 15:45 | 只看该作者
慢慢调试,其实不是很难。

使用特权

评论回复
板凳
figo20042005| | 2012-9-4 20:52 | 只看该作者
你的死掉是程序跑飞了?

使用特权

评论回复
地板
sanjue|  楼主 | 2012-10-10 14:19 | 只看该作者
我加上了松手识别,好了,这么久才看到以前发的这个帖子

使用特权

评论回复
5
723737969| | 2013-6-12 00:01 | 只看该作者
我现在也遇到同样的问题 求解答

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

50

帖子

1

粉丝