8279键盘与8085微处理器接口
在这里,我们将了解如何使用8279芯片将矩阵键盘与8085微处理器连接。该芯片可以用于键盘/显示器接口模式或作为锁存输入端口。但通常,它用作键盘接口。
键盘接口方案也可以分为两种模式。这些模式是:
译码工作模式
编码工作模式
译码工作模式
在这种模式下,矩阵键盘只能有四行。这四行可以使用SL3-0选择线进行选择。有八列。可以使用RL7-0选择这八列线。因此,共有4 * 8 = 32个按键。在每一行和每一列的交点处,都有一个按键。还有另外两个按键。这些按键是Shift键和Ctrl键,这两个按键不属于矩阵的一部分。按键结构如下:
在译码模式下,8279通过一次使每一行的逻辑电平为0来扫描按键,然后读取每一列。下表显示了8279为扫描键盘而显示的SL3-0模式。
SL3-0 | 正在扫描的行 |
---|---|
1110 | 行0 |
1101 | 行1 |
1011 | 行2 |
0111 | 行3 |
让我们来看一个键盘扫描机制的例子。假设当前它正在通过发送选择线值0111来扫描行3,并且从RL7-0接收到的信息为10111111。这表示RL6的逻辑电平为0。因此,对于此数据,FIFO RAM将如下加载。
指示行3 | 指示列6 | ||||||
---|---|---|---|---|---|---|---|
Ctrl | Shift | 0 | 1 | 1 | 1 | 1 | 0 |
LS的3位指示列号(此处110表示列6),接下来的3位指示行号(此处011表示行3)。由于键盘有四行,因此2位就足够了,但是行选择有三位(一位额外位)。
当Ctrl和Shift按钮没有按下时,这两个字段将保持为1。扫描键盘按键后,8279会激活IRQ。该IRQ连接到8085的中断请求引脚。当处理器读取FIFO RAM时,IRQ引脚变为0。当处理器处于中断禁用状态时,按键内容存储到FIFO RAM中。如果此时按下另一个按键,则该信息将在FIFO RAM中作为队列结构添加到上一个按键信息之后。
状态寄存器
状态寄存器保存有关FIFO RAM的重要信息。该寄存器的结构如下所示。
Du | S/E | O | U | F | N | N | N |
最后三位用于表示FIFO RAM中存在的字符数。它从000开始,每次递增1。当通过使IRQ引脚有效发送一个按键数据并且处理器正在读取FIFO RAM的内容时,这些值将递减1。
当处理器的中断被禁用,并且用户按下七个按键时,最后三位的值将为111。因此,如果再按下另一个按键,F标志将设置为1,三位将变为000。此标志将指示FIFO RAM已满。现在,如果FIFO RAM已满时再按下另一个按键,它将覆盖FIFO RAM的最后一个字符。它将生成溢出错误。它将设置O标志。此O标志指示溢出错误。类似地,当F标志为0,最后三位也为000时,表示FIFO RAM未满并且也没有要读取的字符。在这种情况下,如果处理器尝试读取FIFO RAM,它将通过使U标志有效来生成下溢错误。
编码工作模式
在译码模式下,只有四行。在大多数情况下,8279用于编码工作模式。在这种模式下,我们可以设置八行和八列来连接64个按键。与译码模式一样,它也具有Shift和Ctrl键。因此,将这两个键与64个键相加,共有66个键。
从该图可以看出,使用了一个外部的3:8译码器。SL2-0连接到译码器。SL3未使用。译码器的输出连接到矩阵的八行。下表显示了8279为扫描键盘而显示的SL2-0模式。
SL2-0 | 正在扫描的行 |
---|---|
000 | 行0 |
001 | 行1 |
010 | 行2 |
011 | 行3 |
100 | 行4 |
101 | 行5 |
110 | 行6 |
111 | 行7 |
让我们来看一个键盘扫描机制的例子。假设当前它正在通过发送选择线值101来扫描行5,并且从RL7-0接收到的信息为10111111。这表示RL6的逻辑电平为0。因此,对于此数据,FIFO RAM将如下加载。
指示行5 | 指示列6 | ||||||
---|---|---|---|---|---|---|---|
Ctrl | Shift | 1 | 0 | 1 | 1 | 1 | 0 |
LS的3位指示列号(此处110表示列6),接下来的3位指示行号(此处101表示行5)。FIFO RAM中也存在另外两个按键区域。