c - PIC 微 Controller : Scan inputs on a 4x4 Keypad, 在 C 中仅使用端口 C RC0-RC3

标签 c microcontroller pic keypad

我是 PIC 微 Controller 和 C 编程的新手,我的任务是创建我自己的键盘扫描方法,该方法专门用于端口 C(16F877A 微 Controller )。具体来说,使用此方法的程序仅使用数字 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. 阅读 RC2。如果高,则 4 被按下
  6. 阅读 RC3。如果高,则 5 被按下

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

关于c - PIC 微 Controller : Scan inputs on a 4x4 Keypad, 在 C 中仅使用端口 C RC0-RC3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27407950/

相关文章:

c - 非常奇怪的错误***glibc检测到** free()无效指针

检查程序是否正在被管道传输

c - 如何在 C/C++ 中实现进程调节器?

linux - 为什么SRAM常用于高速缓冲存储器?

c - pic Controller 中如何将字符串转换为int

c - 内联关键字与 MPLab 相关吗?

c - 如何用 C 语言编写这些循环而不是使用#define?

arm - 如何修复 STM32CubeProgrammer 未找到 STM32 目标

c - 读取双值 PIC18F67K22

c - 为什么在 C 中使用静态函数?