PIC 微控制器:扫描 4x4 键盘上的输入,仅使用 C 中的端口 C RC0-RC3



我是PIC微控制器和C编程的新手,我的任务是创建自己的键盘扫描方法,该方法仅适用于端口C(16F877A微控制器)。具体来说,使用此方法的程序仅使用数字 1、2、4 和 5 - 因此为了高效起见,扫描仪方法是仅使用 RC0、RC1、RC2 和 RC3 作为指定的输入/输出(我不允许使用 RC4-RC7)。这实质上是将 4x4 键盘变成 2x2 键盘。

我知道扫描的概念将端口行设置为行高,行设置为输入列 - 当按下按钮时,这会读取端口的低半字节以检测按钮。

不幸的是,我不知道如何用 C 语言对此进行编码,尤其是使用上面指定的端口行。任何人都可以阐明这个问题并指出我正确的方向吗?谢谢!

一种可能的方法:

硬件:

  1. 将 RC0 连接到第 0 行
  2. 将 RC1 连接到第 1 排
  3. 将 RC2 连接到第 0 列
  4. 将 RC3 连接到第 1 列

软件:

设置:

  1. 将 RC0 和 RC1 配置为输出
  2. 将 RC2 和 RC3 配置为输入

读数:

  1. 将 RC0 设置为高,RC1 设置为低电平
  2. 阅读 RC2。如果高,则1被按下
  3. 阅读 RC3。如果高,则2被按下
  4. RC0 设置为低电平,将 RC1 设置为高
  5. 电平
  6. 阅读 RC2。如果高,则4被按下
  7. 阅读 RC3。如果高,则5被按下

添加适当的上拉/下拉和去抖动留给读者作为练习。

它的工作方式是在 4 列中的一列上启用输出电压。然后读取 4 位行数据,以确定按下哪些键来完成电路。然后循环浏览其他列。然后,您可以使用列 * 4 + 行,其中一个或多个(或多个)键已关闭,以确定按下了哪个键矩阵位置键。通常,这不会直接映射到预期的键值,因此您可以使用查找表或某些#define语句进行转换。此外,逻辑可能会颠倒。

最新更新