1

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

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

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

4

2 回答 2

2

一种可能的方法:

硬件:

  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. 阅读 RC2。如果高,4则被按下
  6. 阅读 RC3。如果高,5则被按下

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

于 2014-12-10T18:26:34.370 回答
0

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

于 2014-12-10T18:31:16.183 回答