一、8279特点
(1) 可同时进行键盘扫描及文字显示;
(2) 键盘扫描模式(Scanned Keyboard Mode);
(3) 传感器扫描模式(Scanned Sensor Mode);
(4) 激发输入模式(Strobe Input Entry Mode);
(5) 8乘8键盘FIFO(先进先出);
(6) 具有接点消除抖动,2键锁定及N键依此读出模式;
(7) 双排8位数或双排16位数的显示器;
(8) 右边进入或左边进入。16位字节显示存储器。
二、8279引脚说明
8279采用单±5V电源供电,40脚封装。
RL2-- 1 40 --VCC
RL3-- 2 39 --RL 1
CLK-- 3 38 --RL 0
IRQ-- 4 37 --CNTL/STB
RL4-- 5 36 --SHIFT
RL5-- 6 35 --SL 3
RL6-- 7 34 --SL 2
RL7-- 8 33 --SL 1
RESRT-- 9 32 --SL 0
RD-- 10 31 --OUT B0
WR-- 11 30 --OUT B1
DB0-- 12 29 --OUT B2
DB1-- 13 28 --OUT B3
DB2-- 14 27 --OUT A0
DB3-- 15 26 --OUT A1
DB4-- 16 25 --OUT A2
DB5-- 17 24 --OUT A3
DB6-- 18 23 --BD
DB7-- 19 22 --CS
VSS-- 20 21 --A0
DB0~DB7:双向数据总线,用来传送8279与CPU之间的数据和命令。
CLK:时钟输入线,用以产生内部定时的时钟脉冲。
RESET:复位输入线,8279复位后被置为字符显示左端输入,二键闭锁的触点回弹型式,程序时钟前置分频器被置为31,RESET信号为高电平有效。
CS:片选输入线,低电平有效,单片机在CS端为低时可以对8279读/写操作。
A0:缓冲器低位地址,当A0为高电平时,表示数据总线上为命令或状态,当为低电平时,表示数据总线上为数据。
RD:读信号输入线,低电平有效,将缓冲器读出,数据送往外部总线。
WR:写信号输入线,低电平有效,将缓立器读出,将数据从外部数据总线写入8279的缓冲器。
IRQ:中断请求输出线,高电平有效,在键盘工作方式下,当FIFO/传感器RAM中有数据时,此中断线变为高电平,在FIFO/传感器RAM每次读出时,中断线就下降为低电平,若在RAM中还有信息,则此线重又变为高电平。在传感器工作方式中,每当探测到传感器信号变化时,中断线就变为高电平。
SL0~SL3:扫描线,用来扫描按键开关,传感器阵列和显示数字,这些可被编程或被译码。
RL0~RL7:回送线,经过按键或传感器开关与扫描线联接,这些回送线内部设置有上拉电路,使之保持为高电平,只有当一个按闭合时,对应的返回线变为低电平;无按键闭合时,均保持高电平。
SHIFT:换位功能,当有开关闭合时被拉为低电平,没有按下SHIFT开关时,SHIFT输入端保持高电平,在键盘扫描方式中,按键一闭合,按键位置和换位输入状态一起被存贮起来。
CNTL/STB:当CNTL/STB开关闭合时将其拉到低电平,否则始终保持高电平, 对于键盘输入方式,此线用作控制输入端,当键被按下时,按键位置就和控制输入状态一起被存贮起来,在选通输入方式中,作选通用,把数据存入FIFO RAM中。
OUTA3~OUTA0及OUTB3~OUTB0:显示输出A口及B口,这两个口是16×4切换的数字显示。这个端口可被独立控制,也可看成一个8位端口。
BD:空格显示,此输出端信号用于在数字转换时将显示空格或者用显示空格命令控制其显示空格字符。
VCC:+5V电源输入线。
VSS:地线输入线。
三、8279的编程方法
1. 8279可按其功能分为:键盘功能块;显示功能块;控制功能块;与CPU接口功能块控制功能块包括控制和定时寄存器,定时和控制,扫描计数器三部分,它主要用来控制键盘和显示功能块工作。
::控制和定时寄存器:用于存贮来自CPU的编程命令,CPU对8279编程以确定键盘与显示器工作方式和其它工作条件时,先把命令控制数据放到数据总线上,然后使A0=1,WR=0,CS=0,并在WR上升沿把命令键存在控制和定时寄存器中,并经译码,建立适当的功能。
::定时和控制:它含基本的定时计数器,第一个计数器是一个分频系数为2-31的前置定时器,分频系数可由程序预置,使内部频率为100KHz,从而能给出5.1ms键盘扫描时间和10.3ms反跳时间,其它计数器将此基本频率分频后,提供适当的按键扫描、行扫描、键盘阵列扫描、以及显示器扫描次数。
::扫描计数器:扫描计数器有两种工作方式。在编码工作方式时,计数器提供一种二进制计数,通过管脚SL0-SL3输出后经外部译码才能提供给键盘和显示器的扫描作用;在译码工作方式时,扫描计数器对最低二位进行译码,SL0-SL3输出4选1的译码信号,作为显示器和键盘的译码扫描。
::键盘功能块包括:返回缓冲器,键盘反跳及控制,8x8 FIFO传感器RAM,FIFO/传感器RAM状态。
2. 返回缓冲器与键盘反跳及控制
8条返回线被返回缓冲器缓冲,在键盘工作方式中,这几条线被逐个检测,以找出该行键中闭合的键,如果反跳电路测知某键闭合,则它等待10.3ms,然后重核此键是否仍然闭合,如果仍闭合,那么该键在矩阵中的行列地址以及SHIFT和CNTL的状态一起被送到FIFO RAM中,其在FIFO RAM中的数据格式如下:
D7 D6 D5 D4 D3 D2 D1 D0
CNTL SHIFT SCAN RET URN
数据格式中,最高位CNTL,次高位为SHIFT状态,D5-D3来自扫描计数器,D2-D0来自返回计数器,扫描线计数器和回扫线计数器的值分别反映出被按下键的行、列的值,如果在传感器阵列中,返回线上的数据直接进入传感器RAM中相应于阵列中正被扫中的那行,这样每个开关位置就直接反映为一个传感器RAM的位置。
::FIFO/传感器RAM:一个8x8 RAM,在键盘方式和选通方式中它是一个先入先出(FIFO)存贮器,每一条新的信息顺次写入,然后又按写入顺序读出,在传感器阵列扫描方式时,存贮器作为传感器RAM,这时RAM中的各行存着传感器阵列中相应行的状态。
::FIFO/传感器RAM状态:在键盘或选通方式中,FIFO状态跟踪FIFO中字符数量注意它是"满"还是"空",写入或读出过多均被认作出错,当FIFO非空时,状态逻辑提供一个中断申请IRQ信号,在传感器阵列扫描方式中,若测知某一传感器变化时,IRQ则为有效高电平。FIFO状态字的低3位表示FIFO中的字符数,F表示FIFO RAM已满;O(over mn)表示越限错误,即试图向已满的FIFO送另一字符;U(Under done)表示取空错误,即试图读取已空的FIFO。S/F有两种含义:在传感器扫描方式时,S/F表示在传感器RAM中至少包含了一个传感器闭合指示,在特殊错误方式时S/F位是出错标志,用来指示是否发生了多路同时闭合错误,Du位表示由于CLEAR DISPLAY或CLEAR ALL命令尚末完成其消除操作而使显示RAM尚不可用。
3. 显示功能块包括:显示寄存器,16X8显示RAM,显示地址寄存器。
::显示RAM和显示寄存器:8279内部有16X8的显示RAM,通过显示寄存器和两个四位端口0UT A0-3,0UT B0-3来刷新显示,显示器可以是白炽灯,也可以是8段数码管,显示RAM可以是16X8的形式,也可以构成两个16x4的RAM形式,显示RAM可由CPU进行读写,被读写的RAM字节地址由显示地址寄存器指示。
::显示地址寄存器保存当前CPU读或写的那个RAM地址,以及正显示着的那两个4位半字节的地址,读写地址由CPU命令编程,也可置为每次读写后地址自动加1的工作方式,在设置了正确的工作方式后,显示RAM可直接由CPU读出,半字节A和半字节B地址自动由8279更新,以适应由CPU送入的数据,A和B半字节可独立送入,也可作为一个字送入,随CPU所设置的工作方式而定。
4. I/O 接口功能块
8279通过数据缓冲器与I/O控制使8279与CPU系统总线接口。I/O控制部分用CS、A0、RD和WR四条线控制CPU与8279之间的数据交换,数据缓冲器是数据交换的双向通道,控制信号与数据交换间的逻辑关系见下表:
CS A0 WR RD
1 0CPU从8279读状态
0 1 0 1 CPU向8279写状态
10 CPU从8279读数据
0 0 1CPU向8279写数据
1 X X X 数据缓冲器输出呈三态
x为任意数(0或1)
四、8279的操作
由前所述,8279可适应各种键盘和显示器的不同工作方式,这是由于8279内的各功能块的工作是可程控的,用户可根据自己的要求,利用向8279写命令字的方法对8279的工作方式等进行编程,从上表可见,只要同时使CS=0 WR=0 A0=1,则可向8279写命令字,并在wR的上升沿把命令打入8279。
对CPU而言,8279只有两个口地址,一个用于读写命令和状态(CS=0,A0=1),一个用于读写数据(CS=0,A0=0)。但用于编程命令字却有多种,在8279中用于区别各种不同命令字的方法是命令字代码的高3位(D7,D6,D5)编码,而低5位是命令字的真正内容。
8279的编程命令
a. 键盘/显示器方式设置
最高位 最低位
命令代码 0 0 0 D D K K K
其中DD为显示方式,KKK为键盘方式
D D
0 0 8个8位字符显示--左端传入
0 1 16个8位字符显示--左端送入
1 0 8个8位字符显示--右端送入
1 116个8位字符显示--右端送入
所谓左端送入是显示器根据用户送的先后,从左端一位开始,向右逐位排列,到最右端一位之后,下一位再从最左端显示,在这种显示方式中,显示器的每个显示管和8279中的显示RAM单元一一对应,RAM中的0地址对应最左面的显示字符,而15号单元对应最右端的显示字符。而右端送入方式是电子计算器中常用的显示方式,第一个送入的数在最右端的显示字符上,而以后每送入一个新数,显示先左移一位,然后把送入的数仍放在最右端显示字符上。
KK K
0 0 0 编码扫描键盘--2键连锁
0 0 1 译码扫描键盘--2键连锁
0 1 0 编码扫描键盘--N键巡回
0 1 1 译码扫描键盘--N键巡回
1 0 0 编码扫描传感器阵列
1 0 1 译码扫描传感器阵列
1 1 0 选通输入,编码显示扫描
1 1 1 选通输入,译码显示扫描
其中2键连锁和N键巡回是8279对键盘中被按下键的两种处理方式,编码扫描和译码扫描是SL0-SL3 对链盘和显示器的两种扫描形式。
b. 程序时钟
命令代码 0 0 1 P P P P P
此命令确定定时和控制中的前置定标器的分频系数,代码PPPPP可形成2-31的数,前置定标器可对外部时钟分频,以得到内部基频,选基频为100kHz,可得到前面规定的扫描和反跳时间,则分频系数为;外部时钟100kHz复位脉冲过后若无代码送入则自动为31。
c. 读FIFO/传感器RAM
命令代码 0 1 0 AI X A A A X=任意
此命令用于确定CPU读操作的对象是8279中的FIFO/传感器RAM,并确定8个RAM字节中哪一个被读。其中,AAA表示CPU要读的行,AI为自动加1特征位,在键盘扫描方式中这两者互不相干,对随后的每次读取8279都按照数据第一次进入的FIFO的同一顺序自动送出数据,所有随后发生的读,都是读自FIFO,直到写入新命令为止。
在传感器阵列方式中,AAA选择传感器RAM 8行中的一行若AI=1,则下一次读取便读自传感器RAM中的下一行。
d. 读显示器RAM
命令代码 0 1 1 AI A A A A
CPU对8279写此命令,则确定了CPU以显示器RAM为数据源进行读操作,其中AAAA为显示器RAM的地址,AI 为自动加1特征位,若AI=1,则每读一行RAM之后,行地址自动加1。
e. 写显示器RAM
命令代码 1 0 0 AI A A A A
CPU向8279写此命令,规定了下一步要对8279的显示RAM进行写,寻址方式和自动加1功能均与读显示器RAM相同。
f. 显示器写入禁止/空格
命令代码 1 0 1 X IW IW BL BL X=任意
A B A B
此命令用于屏蔽A或B端口输出及使显示器显示空格,如果显示器用作双排4位显示,则必须把其中一个4位屏蔽掉,这样CPU送入显示器的信息就不会影响另一半,IW为屏蔽特征位,若对某一端口设置IW=1,则该端口就被屏蔽,有必要注意的是:B0与D0对应,BL为显示空格标志位,若某一端口的BL置1,则此端口显示空格。当要使一个单8位输出格式的显示器空格时,则必须使两个BL标志全都置位,以使显示完全空格。
g. 消除
命令代码 1 1 0 CD CD CD CF CA
此命令用于按一定格式清显示器RAM的FIFO状态,其中CD规定清除格式:
CD CD CD
0 X 全"0"(x为任意)
1 0 AB =16 进制
1 0 20(0 O 1 0 0 0 0 0)
1 1 全册"1"
当为"1"时允许清除显示器(或用CA=1)
CF清除FIFO状态(包括中断),若CF=1,则清除FIFO状态,并对中断线复位,自传感器RAM的指示器亦被置于0行。CA为总清,其效果相当于CD和CF的合成,当CA=1时,利用CD指示的清除格式清除显示器RAM,并清除FIFO状态,C孔也使内部定时重新同步。在显示器RAM被清除期间(约16us)不能写入,同时在此期间FIFO的最高有效位被置"1",当显示RAM再度变为可用时即自动复位。
h. 中断结束/出错方式设置
命令代码 1 1 1 E X X X X X=任意
在传感器阵列方式时,此命令使IRQ线变低,并允许对RAM再写(检测到一个传感器位变化时,IRQ线可能已升高了,因此这样做可阻止在其复位以前把信息再度写入RAM)。在N键巡回工作方式,若E位被编程为"1",则芯片电路将在特殊出错方式下运行。
在N键巡回方式的特殊出错方式下主要用于检查键的多重按下,若在一个回弹周期中发现两个键被按下,即可看成同时多重按下,并建立出错标志,阻止任何对FIFO的进一步写入,同时设置中断(如中断尚末设置的话),在此方式中,可用读FIFO状态字命令读出错误标志,而发CF=1的清除命令,可使出错标志复位。
五、8279 编程举例
通用键盘显示接口板,能直接挂在Z80、8031、6502总线上,编程方法全部相同,通常可按下列顺序:
设定分频系数(复位后分频系数为31);选择键盘/显示工作方式;消除显示RAM和FIFO状态;将显示的数据写入显示RAM中……
下面用8031汇编程序对8279初始化
ORG 0000H
MOV DPTR,#7000H ;指向8279数据口
INC DPTR ;指向8279控制口
MOV A, #00H ;设定8279工作方式
M0VX @DPTR,A
MOV A , #0GFH ;清除8279内部显示RAM状态
MOVX @DPTR, A
MOV A , #22H
MOVX @DPTR , A ;设定8279分频系数
LOOP: MOVX A , @DPTR
JB ACC.7 , LOOP ;显示RAM清除完毕吗?
MOV A , 80H ;指向第一位数码管
MOVX @DPTR , A
MOV A , 9FH ;输出"1"一个字形
MOV DPTR ,#7000H
MOVX @DPTR , A
INC DPTR
LOOP1:M0VX A , @DPTR
AND A , #07H
CJNE A , #00H,L00P2
AJMP LOOP1 ;无键按下转
LOOP2:MOV DPTR ,#7000H ;有键按下将键值送累加器A
MOVX A , @DPTR
.
.
.
键值,由8279的行扫描信号(SL0-SL3)与列信号(RL0-RL7)组成,不同组合的矩阵将得到不同键,但在同一矩阵中不会有相同的键值,这对初学者编制键显示程序大为方便。下表是通用键盘板键值:
名称 0 1 2 3 4 5 6 7 8 9
键值 C1 C8 C9 D0 D8 E0 C2 CA D1 D9
名称 A B C D E F LAST NEXT EXEC
键值 DA C3 CB D2 D3 DB E3 E2 E1
字形,与数码管的极性、连接方式有关,8279上一般选用共阴极数码管,通用键盘板字形代码如下:
字形 0 1 2 3 4 5 6 7
代码 0C 9F 4A 0B 99 29 28 8F
字形 8 9 A B C D E F
代码 08 09 88 38 6C 1A 68F8
要点亮一个数码管必须选通位和字形,键盘显示板的8个数码管的位地址如下:
数码管 LED1 LED2 LED3 LED4 LED5 LED6 LED7 LED8
位地址 80 81 82 83 84 85 86 87