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

时间:2014-12-10 18:09:44

标签: c microcontroller pic keypad

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

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

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

2 个答案:

答案 0 :(得分:2)

一种可能的方法:

设备:

  1. 将RC0连接到第0行
  2. 将RC1连接到第1行
  3. 将RC2连接到第0列
  4. 将RC3连接到第1列
  5. 软件:

    设定:

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

      1. 将RC0设为高电平,RC1设为低电平
      2. 阅读RC2。如果为高,则1被按下
      3. 阅读RC3。如果为高,则2被按下
      4. 将RC0设为低电平,RC1设为高电平
      5. 阅读RC2。如果为高,则4被按下
      6. 阅读RC3。如果为高,则5被按下
      7. 添加适当的上拉/下拉和去抖是留给读者的练习。

答案 1 :(得分:0)

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