K60 系列 C 语言的 GPIO 键盘

K60 family GPIO keyboard in C

我正在尝试为 MK60D10 设置 4x4 矩阵键盘。我正在使用端口 A.

我的键盘是这样连接到 PTAxx 的:

#define KEYBOARD_ROW_1 8 // P1(23)
#define KEYBOARD_ROW_2 10 // P1(24)
#define KEYBOARD_ROW_3 6 // P1(25)
#define KEYBOARD_ROW_4 11 // P1(26)
#define KEYBOARD_COL_1 7 // P1(27)
#define KEYBOARD_COL_2 9 // P1(28)
#define KEYBOARD_COL_3 27 // P1(35)
#define KEYBOARD_COL_4 29 // P1(36)

其中 xx 是定义的数字。

我理解应该将 ROW 设置为输出,将 COL 设置为输入,所以我已经像这样设置端口 a 的数据方向

PTA->PDDR = GPIO_PDDR_PDD(0b110101000000);

现在我不太明白如何读取按下了哪个键。 我正在尝试理解概念并且我知道如果 ROW 1 设置为 0(输出)并且 COL 1 设置为 1(输入)并且我按下按钮 1(这是这两个的交集),它们连接,但是发生了什么变化?

感谢您的帮助。

我假设你的键盘有常开触点。下面是常用的方法,但是可以反极性(使用下拉等)。

首先,您的输入引脚需要上拉,否则它们可能会浮动。未按下的按钮将读取为 1。然后,行的正常状态为“1”(全部向上),即,您必须将它们大部分时间保持在高位。

那你就要主动轮询键盘了

每个轮询周期都包括降低一行,稍等片刻,然后读取输入;只有那些通过按下按钮为低电平的输入才会读为“0”。因此,如果您读取一个引脚为 0,则按下连接您驱动的那一行和您已读取的那一列的单个按钮。按顺序一个接一个地拉下行。在任何给定时刻,只有一行必须是低的。

希望这是清楚的。