您的位置:

矩阵按键的工作原理

一、矩阵按键的基本概念

矩阵按键是指多个按键组成的矩阵状结构,通过按键与行线和列线的交叉点来判断按键的输入状态。在单片机、键盘、电子手表等电子设备中广泛应用。

矩阵按键通常由多个行线和多个列线交错而成形成矩阵,每个按键相当于矩阵中的一个元素,当按键被按下后,与之相交的行线和列线会形成一条路径,通过单片机的输入输出口获取按键信息,使用特定的算法来判断按键输入状态。

二、矩阵按键的硬件实现

矩阵按键的实现需要借助硬件电路,通常需要使用行列扫描电路。其中行扫描电路由多个行输出口和一个输入口组成,列扫描电路由多个列输入口和一个输出口组成。当按键被按下时,右下方的行列交叉点处会形成一条路径。这样,矩阵按键可以通过扫描行列线路来确定键位信息。


int get_key()
{
  int r, c;
  for (r = 0; r < ROWS; r++)
  {
    ROW_OUTPUT_PORT = (0x01 << r);
    for (c = 0; c < COLS; c++)
    {
      if (~COL_INPUT_PORT & (0x01 << c))
      {
        return (r * COLS + c);
      }
    }
  }
  return -1;
}

上述代码具体实现了从矩阵按键中获取按键信息的函数get_key,其中ROWS和COLS分别为矩阵按键的行数和列数,ROW_OUTPUT_PORT和COL_INPUT_PORT分别为行列扫描电路的输出口和输入口。

三、矩阵按键的软件实现

软件实现部分需要借助中断技术,当按键被按下时,行列扫描电路中的相应引脚状态会改变,触发中断服务程序,中断服务程序会调用相应函数,使程序跳转到中断处理程序中,在中断处理程序中对按键信息进行获取,判断是哪个按键被按下,从而达到响应的目的。


#define KEY1_PORT GPIO_PORTB_DATA_R
#define KEY2_PORT GPIO_PORTF_DATA_R
#define KEY3_PORT GPIO_PORTF_DATA_R

#define KEY1_PIN GPIO_PIN_0
#define KEY2_PIN GPIO_PIN_4
#define KEY3_PIN GPIO_PIN_0

void GPIO_PortE_Handler()
{
  int code = get_key();
  switch (code) 
  {
    case 0:
      KEY1_PORT ^= KEY1_PIN;
      break;
    case 1:
      KEY2_PORT ^= KEY2_PIN;
      break;
    case 2:
      KEY3_PORT ^= KEY3_PIN;
      break;
  }
  GPIO_PORTE_ICR_R |= (1 << 0);
}

int main()
{
  SYSCTL_RCGCGPIO_R |= (1 << 4) | (1 << 5) | (1 << 8);
  GPIO_PORTE_DIR_R &= ~(1 << 0);
  GPIO_PORTE_IS_R &= ~(1 << 0);
  GPIO_PORTE_IBE_R &= ~(1 << 0);
  GPIO_PORTE_IEV_R &= ~(1 << 0);
  GPIO_PORTE_ICR_R |= (1 << 0);
  GPIO_PORTE_IM_R |= (1 << 0);
  NVIC_PRI1_R |= (1 << 5);
  NVIC_EN0_R |= (1 << 4);
  while (1);
}

上述代码是使用ARM Cortex-M3处理器实现的矩阵按键程序,使用GPIO来实现处理引脚的输入输出,使用NVIC来实现中断相关功能。

四、矩阵按键的优缺点

矩阵按键作为一种常见的输入设备,在各类小型电子设备中广泛应用,它的主要优点有以下几个方面:

1、矩阵按键的成本较低,适合大批量生产;

2、在同样数量的引脚数量情况下,使用矩阵按键可以大大减少需要使用的引脚数量,从而简化了电路结构;

3、可以通过修改输入输出口实现按键功能的扩展。

矩阵按键的缺点如下:

1、没有明确的按键连接状态,需要使用软件进行判断;

2、某些情况下可能会出现反复按压或者按键失灵的问题。

五、总结

矩阵按键在电子设备中有着广泛的应用,了解矩阵按键的工作原理以及矩阵按键的优缺点,对于我们的开发工作也有着很重要的意义。如果我们能够有效地利用矩阵按键,可以大大简化我们的开发工作。