1、6.4 可编程键盘/显示器接口 Intel 8279Intel 8279 是一种可编程键盘/显示器接口芯片,它含有键盘输入和显示器输出两种功能。键盘输入时,它提供自动扫描,能与按键或传感器组成的矩阵相连,接收输入信息,它能自动消除开关抖动并能对多键同时按下提供保护。显示输出时,它有一个 168 位显示 RAM,其内容通过自动扫描,可由 8 位或 16 位 LED 数码管显示。 18279 的内部结构和工作原理8279 的内部结构框图如图 6.28 所示。下面分别介绍电路各部分的工作原理。1) I/O 控制及数据缓冲器数据缓冲器是双向缓冲器,连接内外总线,用于传送 CPU 和 8279 之间的命
2、令或数据,对应的引脚为数据总线 D0 D7。I/O 控制线是 CPU 对 8279 进行控制的引线,对应的引脚为数据选择线 A0、片选线、读/写信号线 和 。2) 控制与定时寄存器及定时控制控制与定时寄存器用来寄存键盘及显示工作方式控制字,同时还用来寄存其它操作方式控制字。这些寄存器接收并锁存各种命令,再通过译码电路产生相应的信号,从而完成相应的控制功能。与其对应的引脚为时钟输入端 CLK 及复位端 RESET。定时控制电路由 N 个基本计数器组成,其中,第一个计数器是一个可编程的 N 级计数器,N 为 231 之间的数。定时控制经软件编程,将外部时钟 CLK 分频,得到内部所需的 100 k
3、Hz 时钟,为键盘提供适当的扫描频率和显示扫描时间。与其相关的引脚是显示熄灭控制端 。3) 扫描计数器扫描计数器由键盘和显示器共用,为它们提供扫描信号。扫描计数器有两种工作方式:编码方式和译码方式。按编码方式工作时,计数器作二进制计数,4 位计数状态从扫描线SL0SL3 输出,经外部译码器译码后,为键盘和显示器提供扫描信号。按译码方式工作时,扫描计数器的最低两位被译码后,从 SL0SL3 输出,提供了 4 选 1 的扫描译码。与其相关的引脚是扫描线 SL0 SL3。4) 回复缓冲器、键盘去抖及控制在键盘工作方式下,回复线作为行列式键盘的列输入线,相应的列输入信号称为回复信号,由回复缓冲器缓冲并
4、锁存。在逐行列扫描时,回复线用来搜寻每一行列中闭合的键,当某一键闭合时,去抖电路被置位,延时等待 10 ms 后,再检查该键是否仍处在闭合状态。如不闭合,则当作干扰信号不予理睬;如闭合,则将该键的地址和附加的移位、控制状态等键盘数据送入 8279 内部的 FIFO(先进先出)存储器。键盘数据格式如下:控制和移位(D6、D7) 的状态由两个独立的附加开关决定,而扫描(D5、D4、D3) 和回复(D2、D1 、D0)则是被按键置位的数据。D5、D4 、D3 来自扫描计数器,它们是根据回复信号而确定的行/列编码。在传感器矩阵方式下,回复线的内容直接被送往相应的传感器 RAM(即 FIFO 存储器)
5、。在选通输入方式工作时,回复线的内容在 CNTL/STB 线的脉冲上升沿被送入 FIFO 存储器。与其相关的引脚是回复线 RL0RL7,控制/选通线 CNTL/STB。5) FIFO/传感器 RAM 及其状态寄存器FIFO/ 传感器 RAM 是一个双重功能的 88 RAM。在键盘选通工作方式下,它是 FIFO存储器,其输入/输出遵循先入先出的原则。此时, FIFO 状态寄存器用来存放 FIFO 的工作状态,如 RAM 是满还是空,其中存有多少数据,操作是否出错等。当 FIFO 存储器中有数据时,状态逻辑将产生 IRQ=1 信号,向 CPU 申请中断。在传感器矩阵方式下,这个存储器用作传感器存储
6、器,它存放着传感器矩阵中的每一个传感器状态。在此方式下,若检测出传感器有变化,IRQ 信号就变为高电平,向 CPU 申请中断。与其相关的引脚是中断请求线 IRQ。6) 显示 RAM 和显示寄存器显示 RAM 用来存储显示数据,容量为 168 位。在显示过程中,显示 RAM 存储的显示数据轮流从显示寄存器输出。显示寄存器分为 A、B 两组,OUTA0OUTA3 和OUTB0OUTB3。它们既可单独送数,也可组成一个 8 位(A 组为高 4 位,B 组为低 4 位)的字。显示寄存器的输出与显示扫描配合,不断从显示 RAM 中读出显示数据;同时轮流驱动被选中的显示器件,以达到多路复用的目的,使显示器
7、件呈稳定显示状态。与其相关的引脚是数据显示线 OUTA0OUTA3 和 OUTB0OUTB3 。显示地址寄存器用来寄存由 CPU 进行读/写显示的 RAM 地址,它可以由命令设定,也可以设置成每次读出或写入后自动递增。28279 的引脚和功能8279 采用 40 引脚双列直插封装,其引脚排列及功能分别如图 6.29(a)、(b)所示。8279 的引脚功能如下:D0D7:数据总线,双向三态总线。CLK:系统时钟输入端。RESET:系统复位输入端,高电平有效。复位状态为: 16 个字符显示;编码扫描键盘,双键锁定;程序时钟编程为 31。:片选输入端,低电平有效。A0:数据选择输入端。 A0=1 时
8、,CPU 写入的数据为命令字,读出的为状态字;A0=0时,CPU 读、写的均为数据。、 :读、写信号输入端,低电平有效。IRQ:中断请求输出端,高电平有效。SL0SL3:扫描输出端,用于扫描键盘和显示器。可编程设定为编码 (4 选 1)或译码输出(16 选 1)。RL0RL7:回复线,它们是键盘或传感器的列信号输入端。SHIFT:移位信号输入端,高电平有效。它是 8279 键盘数据的次高位(D6),通常用作键盘上、下挡功能键。在传感器和选通方式下,SHIFT 无效。CNTL/STB:控制/选通输入端,高电平有效。在键盘工作方式下,它是键盘数据的最高位,通常用作控制键。在选通输入方式下,它的上升
9、沿可把来自 RL0RL7 的数据存入FIFO/传感器 RAM 中。在传感器方式下,它无效。OUTA0OUTA3 :A 组显示信号输出端。OUTB0OUTB3:B 组显示信号输出端。:显示熄灭输出端,低电平有效。它在数字切换显示或使用熄灭命令时关显示。3. 8279 的工作方式8279 工作方式的确定是通过 CPU 对 8279 送入命令字来实现的。当数据选择端 A0置 1 时,CPU 对 8279 写入的数据为命令字,读出的数据为状态字。在叙述命令字、状态字前,先说明 8279 的几种工作方式。1) 键盘工作方式通过对键盘/显示方式命令字的设置,可置 8279 为双键互锁方式和 N 键巡回方式
10、。双键互锁是为两键同时按下提供的保护方法。若有两键或多个键同时按下,则无论这些键是以什么次序按下的,它只识别最后一个释放的键,并把该键值送入 FIFO/传感器RAM 中。N 键巡回是为 N 个键同时按下时提供的保护方法。若有多个键同时按下,则键盘扫描时可按按键先后顺序依次将键值送入 FIFO/传感器 RAM 中。2) 显示器工作方式通过对键盘/显示方式命令字和写显示 RAM 命令字的设置,可将显示数据写入显示缓冲器的方式置为左端送入和右端送入两种方式。左端送入为依次填入方式,右端送入为移位方式。3) 传感器矩阵方式通过对读 FIFO/传感器 RAM 命令字的设置可将 8279 设置成传感器矩阵
11、方式,此时,传感器的开关状态直接送到传感器 RAM 中。CPU 对传感器阵列扫描时,如果检测到某个传感器状态发生了变化,则使中断申请信号 IRQ 变为高电平。如果 AI(D4)=0,则对传感器RAM 的第一次读操作即清除 IRQ;如果 AI(D4)=1,则由中断结束命令清除 IRQ。4. 8279 的命令格式和命令字 A0=18279 共有 8 条命令,其格式及功能如下所述。1) 键盘/显示方式设置命令字键盘/显示方式设置命令字的命令格式如下:其中:D7 D6 D5 为 000,是方式设置命令特征位。DD(D4 D3):设定显示方式。其定义如下:00:8 个字符显示,左边输入01:16 个字符
12、显示,左边输入10:8 个字符显示,右边输入11:16 个字符显示,右边输入KKK(D2 D1 D0):可设定 7 种键盘、显示工作方式,其定义如下:000:编码扫描键盘,双键锁定001:译码扫描键盘,双键锁定010:编码扫描键盘,N 键轮回011:译码扫描键盘,N 键轮回100:编码扫描传感器矩阵101:译码扫描传感器矩阵110:选通输入,编码显示扫描111:选通输入,译码显示扫描 2) 时钟编程命令时钟编程命令的命令格式如下:其中:D7 D6 D5 为 001,是时钟编程命令特征位。PPPPP(D4 D3 D2 D1 D0):设定对 CLK 输入端输入的外部时钟信号进行分频的分频数N,用以
13、产生 100 kHz 的内部时钟,N 的取值为 231。若 CLK 输入的时钟频率为 2 MHz,则 N=20,PPPPP=10100B。3) 读 FIFO/传感器 RAM 命令读 FIFO/传感器 RAM 命令的命令格式如下:其中:D7 D6 D5 为 010,是读 FIFO/传感器 RAM 命令特征位。AI(D4)为自动加 1 标志。AAA(D2 D1 D0)为 FIFO/传感器 RAM 地址。键扫描方式下,数据按先进先出的原则读出,与 AI、AAA 无关,D0D4 可为任意值。此时,该命令字可设为 40H。在传感器或选通输入方式下,AAA 为 RAM 地址。当 AI=0 时,每次读完传感
14、器 RAM 的数据后地址不变;当 AI=1 时,每次读完传感器 RAM 的数据后地址自动加 1。这样,下一个数据便从下一个地址读出,不必重新设置读 FIFO/传感器 RAM命令。4) 读显示 RAM 命令读显示 RAM 命令的命令格式如下:其中:D7 D6 D5 为 011,是读显示 RAM 命令特征位。AI(D4)为自动加 1 标志,AI=1 时,每次读数后地址自动加 1。AAAA(D3 D2 D1 D0)为显示 RAM 中的存储单元地址。5) 写显示 RAM 命令写显示 RAM 命令的命令格式如下:其中:D7 D6 D5 为 100,是写显示 RAM 命令特征位。AI(D4)为自动加 1
15、标志,AI=1 时,每次写入数据后地址自动加 1。AAAA(D3 D2 D1 D0)为将要写入的显示 RAM 中的存储单元地址。CPU 将显示数据写入显示 RAM 时必须先设置键盘/ 显示方式设置命令字。若选择 8 个显示器并从左端输入,则键盘应设为双键锁定的编码键盘方式,即设置键盘/显示方式设置命令字为 00H。如每次写入数据后自动加 1,且从 0 地址开始写入,则应设置写显示 RAM命令字为 90H。如要输入 10 个字符,则其输入过程如表 6.8 所示( 依次填入方式)。如将上述键盘/显示方式设置命令字设置为 10H,则可实现从右端输入。其输入过程如表6.9 所示(移位方式)。6) 显示
16、禁止写入/消隐命令显示禁止写入/消隐命令的命令格式如下:其中:D7 D6 D5 为 101,是显示禁止写入/熄灭命令的特征位。IWA 、IWB(D3、D2) 为 A、B 组显示 RAM 写入屏蔽位。因为显示寄存器分成 A、B两组,可以单独送数,所以用两位分别屏蔽。当 IWA=1 时,A 组显示 RAM 禁止写入,此时,从 CPU 写入显示器 RAM 的数据不影响 A 组显示器的显示,这种情况通常用于双 4 位显示器。IWB 的用法与 IWA 相同,可屏蔽 B 组显示器。BLA、BLB(D1、D0)为 A、B 组的消隐设置位。若 BLA (或 BLB)=1,则对应组的显示输出熄灭;若 BLA(或
17、 BLB)=0,则对应组恢复显示。7) 清除命令清除命令的命令格式如下:其中:D7 D6 D5 为 110,是清除命令的特征位。CDCDCD(D4 D3 D2)用来设定清除显示 RAM 方式,具体设置如表 6.10 所示。CF(D1)用于清除 FIFO 存储器,若 CF=1,则清除 FIFO 状态,并使中断输出线复位;同时,传感器 RAM 的读出地址也被清 0。CA(D0)为总清除特征位,兼有 CD 和 CF 的联合功能。CF=1 时,清除显示器和 FIFO的状态。8) 结束中断/出错方式设置命令结束中断/出错方式设置命令的命令格式如下:其中:D7 D6 D5 为 111,是结束中断/出错方式
18、设置命令的特征位。E(D4) 为 1 时,N 键轮回工作方式下,CPU 工作在特殊出错方式(多个键同时按下);传感器矩阵方式下,此命令使 IRQ 变低,结束中断,并允许对 RAM 进一步写入。5. 8279 状态格式与状态字8279 的 FIFO 状态字主要用于键盘和选通工作方式,以指示数据缓冲器 FIFO/传感器RAM 中的字符数和有错误发生。状态字节的读出地址和命令输入地址相同( =0,A0=1)。状态字节格式如下:其中:DU(D7)为显示无效特征位,DU=1 表示显示无效。当显示 RAM 在清除显示或全清命令尚未完成时,DU=1,此时对显示 RAM 操作无效。S/E(D6)为传感器信号结
19、束/错误特征位,在读 FIFO 状态字时被读出,在执行 CF=1 时被复位。在传感器方式下,S/E=1 表示至少有一个键闭合;在特殊出错方式下, S/E=1 表示有多键同时按下。O(D5)为 FIFO/传感器 RAM 溢出标志位,若 FIFO/传感器 RAM 填满时再送入数据,则该位置 1。U(D4)为 FIFO/传感器 RAM 空标志位,当 FIFO/传感器 RAM 中无数据时,如 CPU 读FIFO/传感器 RAM,则该位置 1。F(D3)为 FIFO/传感器 RAM 满标志位,F=1 表示 FIFO/传感器 RAM 中已满。NNN(D2 D1 D0)表示 FIFO/传感器 RAM 中的字
20、符个数,即数据个数。68279 的数据输入/输出 A=0对 8279 输入数据(如显示数据、键输入数据、传感器矩阵数据等) 时,要选择数据输入/输出口地址。8279 的数据输入/输出口地址由 /cs =0 、A=0 确定。在键盘扫描方式下,8279 中的键输入数据按下列格式存放:其中,CNTL(D7) 为控制键 CNTL 的状态位。CNTL 为单独按键,可与其它键连用,构成特殊命令。SHIFT(D6)为控制键 SHIFT 的状态位。SHIFT 为单独按键,用作按键上、下挡控制。行号(D5 D4 D3)为按下键所在的行号,由 RL0RL7 的状态确定。列号(D2 D1 D0)为按下键所在的列号,
21、由 SL0SL2 的状态确定。78279 的内部译码与外部译码在键盘、显示器工作方式下,SL0SL3 为键盘的列扫描线和动态显示的位选线。当选择内部译码(键盘显示方式设置命令字的 D0=1)时,SL0 SL3 每一时刻只有一位为低电平输出,此时,8279 只能外接 4 位显示器和 48 键盘。当选择外部译码(键盘显示方式设置命令字的 D0=0)时,SL0 SL3 以计数分频式波形输出。此时,若外接 4-16 译码器,则译码器的 16 个输出可作为外接 16 位显示器的位信号;若外接 3-8 译码器,则译码器的 8 个输出与 RL0RL7 配合,可构成 88 键盘(键输入数据格式中只有 SL0S
22、L2 确定的 8 个状态有效有效) 。88279 与单片机、键盘/显示器的接口8279 是一种功能较强的键盘/显示器接口电路,可直接与 Intel 公司的各个系列的单片机接口,可以外接多种规格的键盘和显示器。图 6.30 是 8051 与 8279 的一般接口框图。图中,8279 外接 88 键盘、16 位显示器,由 SL0SL2 译出键扫描线,由 4-16 译码器对SL0SL3 译出显示器的位扫描线。在实际应用中,键盘的大小和显示器的位数可以根据具体需要而定。98279 的应用利用键盘/显示器专用接口芯片 8279 能够以较简单的硬件电路和较少的软件开销实现单片机与键盘、LED 显示器的接口。图 6.31 便是 8279 的一种具体应用。如采用图 6.31 所示的电路实现本书 10.1 节的功能,则要修改软件设计。采用 8279 与 8051接口,在 CPU 对 8279 进行初始化后,只需向 8279 传输待显示数据(送数)即可。而且在8279 将键盘中断申请发出后,取键盘数据识别按键(取数) ,即可实现按键识别和动态显示。至于要花费 CPU 大量时间的键盘扫描程序和动态显示程序,全由 8279 硬件自动完成。CPU 再也不必像本书 10.2 节那样不断调用动态显示子程序,不断查询是否有按键按下,这就大大提高了 CPU 的工作效率。