键盘与AVR单片机的接口

2024年9月27日 | 阅读时长 4 分钟

在最低层面上,键盘以行和列的矩阵形式组织。CPU通过端口访问行和列,因此通过两个8位端口,可以将8 X 8矩阵的键与微控制器连接。

当按下某个键时,一列和一行会接通;否则,行和列之间没有连接。在x86 PC键盘中,使用单个微控制器进行键盘的软件和硬件接口。

矩阵键盘与AVR单片机的端口1和端口2的连接如下图所示

Interfacing the Keyboard AVR

扫描和识别按键

上图表示一个连接到两个端口的4 X 4矩阵。行连接到输出端口,列连接到输入端口。如果没有按下任何键,读取输入端口将为所有列提供1,因为它们连接到高电平(VCC)。如果所有行都接地并且按下了一个键,则其中一个列将为0,因为按下的键提供了接地的路径。微控制器的功能是连续扫描键盘以检测和识别按下的键。


接地行并读取列

为了检测按下的键,微控制器通过为输入锁存器提供0来接地所有行,然后读取列。如果从列读取的数据是D3-D0=1111,则表示没有按下任何键,并且该过程会一直继续,直到系统检测到按下了某个键。

但是,如果其中一个列位为零,则表示发生了按键事件。例如,如果D3-D0= 1101,则表示按下了D1列中的某个键。检测到按键后,微控制器将执行识别按键的过程。

从第一行开始,微控制器将其接地,仅为行D0提供低电平;然后它读取列。如果读取的数据全部为1,则表示该行中没有激活任何键,并且该过程将进一步移动到下一行。

识别行和列的过程很容易,因为微控制器随时知道正在访问哪些行和列。

以下是用于读取键盘并将结果发送到端口D的C程序

PC0-PC3连接到列

PC4-PC7连接到行