单片机应用系统最常用的显示器是LED(发光二极管显示器)和LCD(液晶显示器),这两种显示器可显示数字、字符及系统的状态,它们的驱动电路简单、易于实现且价格低廉,因此,得到广泛应用。
LED显示和接口
常用的LED显示器有LED状态显示器(俗称发光二极管)、LED七段显示器(俗称数码管)和LED十六段显示器。发光二极管可显示两种状态,用于系统状态显示;数码管用于数字显示;LED十六段显示器用于字符显示。本节重点介绍LED七段显示器。
例7.1 用定时器/计数器模拟生产线产品计件,以按键模拟产品检测,按一次键相当于产品计数一次。检测到的产品数送P1口显示,采用单只数码管显示,计满16次后从头开始,依次循环。系统采用12MHz晶振。
解:根据题意可设计出硬件电路如图7.9所示。
图7.9 模拟生产线产品计件数码管显示电路
其源程序可设计如下:
ORG 1000H
MOV TMOD,#60H ;定时器T1工作在方式2
MOV TH1,#
MOV TL1,#
SETB TR1 ;启动T1
MAIN: MOV A,#00H ;计数显示初始化
MOV P1,#
DISP: JB P3.3,DISP ;监测按键信号
ACALL DELAY ;消抖延时
JB P3.3,DISP ;确认低电平信号
DISP1: JNB P3.3,DISP1 ;监测按键信号
ACALL DELAY ;消抖延时
JNB P3.3,DISP1 ;确认高电平信号
CLR P3.5 ;T0引脚产生负跳变
NOP
NOP
SETB P3.5 ;T0引脚恢复高电平
INC A ;累加器加1
MOV R1,A ;保存累加器计数值
ADD A,#08H ;变址调整
MOVC A,@A+PC ;查表获取数码管显示值
MOV P1,A ;数码管显示查表值
MOV A,R1 ;恢复累加器计数值
JBC TF1,MAIN ;查询T1计数溢出
SJM P DISP ;16次不到继续计数
TAB: DB
DB 0B0H,99H,92H ;3,4,5
DB 82H,
DB 90H,88H,83H, ;9,A,B
DB
DB 8EH ;F
DEALY: MOV R2,#14H ;10ms延时
DELAY1: MOV R3,#0FAH
DJNZ R3,$
DJNZ R2,DEALY1
RET
END
比较例5.4和例7.1可知,同样是显示数字信息,例5.4是通过P1口每一位状态的显示来获取信息,例7.1是直接通过数码管显示的数字来获取信息,显然,后者更加直观、快捷,从获取信息的角度来看,例7.1优于例5.4。由例7.1可具体剖析数码管的结构,分析其工作原理。
1.数码管简介
1)数码管结构
数码管由8个发光二极管(以下简称字段)构成,通过不同的组合可用来显示数字0 ~9、字符A ~ F、H、L、P、R、U、Y、符号“-”及小数点“.”。数码管的外型结构如图7.10(a)所示。数码管又分为共阴极和共阳极两种结构,分别如图7.10(b)和图7.11(c)所示。
(a) 外型结构 (b) 共阴极 (c)共阳极
图7.10 数码管结构图
2)数码管工作原理
共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起,通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起,通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端,当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
例7.1采用共阳极数码管与单片机P1口直接连接,其电路连接如图7.9所示,数码管公共阳极接+5V电源,其它管脚分别接P1口的8个端口,限流电阻为510W,数码管字段导通电流约为6mA(额定字段导通电流一般为5 ~ 20 mA)。
3)数码管字形编码
要使数码管显示出相应的数字或字符必须使段数据口输出相应的字形编码。对照图7.10(a),字型码各位定义如下:
数据线D0与a字段对应,D1字段与b字段对应……,依此类推。如使用共阳极数码管,数据为0表示对应字段亮,数据为1表示对应字段暗;如使用共阴极数码管,数据为0表示对应字段暗,数据为1表示对应字段亮。如要显示“0”,共阳极数码管的字型编码应为:11000000B(即C0H);共阴极数码管的字型编码应为:00111111B(即3FH)。依此类推可求得数码管字形编码如表7.1所示。
表7.1 数码管字型编码表
显示字符 |
字形 |
共 阳 极 |
共 阴 极 | ||||||||||||||||
dp |
g |
f |
e |
d |
c |
b |
a |
字型码 |
dp |
g |
f |
e |
d |
c |
b |
a |
字形码 | ||
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
C0H |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
3FH |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
F9H |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
06H |
2 |
2 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
A4H |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
5BH |
3 |
3 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
B0H |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
4FH |
4 |
4 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
99H |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
66H |
5 |
5 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
92H |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
6DH |
6 |
6 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
82H |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
7DH |
7 |
7 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
F8H |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
07H |
8 |
8 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
80H |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
7FH |
9 |
9 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
90H |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
6FH |
A |
A |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
88H |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
77H |
B |
B |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
83H |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
7CH |
C |
C |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
C6H |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
39H |
D |
D |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
A1H |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
5EH |
E |
E |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
86H |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
79H |
F |
F |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
8EH |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
71H |
H |
H |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
89H |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
76H |
L |
L |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
C7H |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
38H |
P |
P |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
8CH |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
73H |
R |
R |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
CEH |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
31H |
U |
U |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
C1H |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
3EH |
Y |
Y |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
91H |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
6EH |
- |
- |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
BFH |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
40H |
. |
. |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
7FH |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
80H |
熄灭 |
灭 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
FFH |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
00H |
LED七段数码管有静态显示和动态显示两种方式,下面分别加以叙述。
2.静态显示接口
1)静态显示概念
静态显示是指数码管显示某一字符时,相应的发光二极管恒定导通或恒定截止。这种显示方式的各位数码管相互独立,公共端恒定接地(共阴极)或接正电源(共阳极)。每个数码管的8个字段分别与一个8位I/O口地址相连,I/O口只要有段码输出,相应字符即显示出来,并保持不变,直到I/O口输出新的段码。采用静态显示方式,较小的电流即可获得较高的亮度,且占用CPU时间少,编程简单,显示便于监测和控制,但其占用的口线多,硬件电路复杂,成本高,只适合于显示位数较少的场合。
2)多位静态显示接口应用
例7.1是数码管静态显示方式的一种典型应用,其硬件及软件都非常简单,但其只能显示一位,如要用P1口显示多位,则每位数码管都应有各自的锁存、译码与驱动器,还需有相应的位选通电路,位选通电路输出位码。
例7.2 将例7.1中的单位数码管显示改为6位显示,具体要求如下:
(1)右边第一位进行正常计数,显示当前计数状态,其功能与例7.1完全一样。
(2)左边5位分别显示前5次计数状态,当连续计数时,会产生计数数据从左至右移动的感觉。
整体设计思路如下:
P1口控制段码输出,P3口控制位码输出,每个数码管接一个锁存器,锁存器除用来锁存待显示段码外,还兼作显示驱动器直接驱动共阳极数码管。在单片机内部RAM设置待显示数据缓冲区,由查表程序完成显示译码(俗称软件译码),将缓冲区内待显示数据转换成相应的段码,再将段码送P1口显示。
硬件电路设计如下:
P1口的段码输出直接接至锁存器的输入,锁存器采用74LS373(或74LS273、74LS374),锁存器的输出接至数码管的各段,同时还经300W上拉(或限流)电阻接至电源。位选通电路由P3口的P3.0、P3.1 和P3.2与3—8译码器74LS138连接组成,74LS138输出的位码经倒相器74LS04后接至74LS373的使能端G(或74LS273、74LS374的时钟端),以此来控制相应显示位段码数据的刷新。模拟生产线计数的按键信号接至P3.3口,具体电路如图7.11
图7.11 六位数码管静态显示电路
所示。
软件设计如下:
以单片机内部RAM的30H~35H单元作为显示数据缓冲区,六位数码管段码的获取及显示控制由显示子程序完成,单片机每接收一次按键信号(即模拟生产线计数信号),显示缓冲区的待显示数据就被刷新一次,然后再调用一次显示子程序,如连续按键,即可产生计数数据从左至右循环移动的效果。软件流程图如图7.12所示。
图7.12 六位数码管静态显示软件流程图
源程序设计(略)。
3.动态显示接口
1)动态显示概念
动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方式称为位扫描。通常,各位数码管的段选线相应并联在一起,由一个8位的I/O口控制;各位的位选线(公共阴极或阳极)由另外的I/O口线控制。动态方式显示时,各数码管分时轮流选通,要使其稳定显示必须采用扫描方式,即在某一时刻只选通一位数码管,并送出相应的段码,在另一时刻选通另一位数码管,并送出相应的段码,依此规律循环,即可使各位数码管显示将要显示的字符,虽然这些字符是在不同的时刻分别显示,但由于人眼存在视觉暂留效应,只要每位显示间隔足够短就可以给人同时显示的感觉。
采用动态显示方式比较节省I/O口,硬件电路也较静态显示方式简单,但其亮度不如静态显示方式,而且在显示位数较多时,CPU要依次扫描,占用CPU较多的时间。
用8051系列单片机构建数码管动态显示系统时常采用8155可编程I/O扩展接口,其典型应用如图7.13所示。
图中,数码管采用共阴极LED,8155的PA口线经过8路驱动电路后接至数码管的各段,当PA口线输出“1”时,驱动数码管发光。8155的PC口线经过6路驱动电路后接至数码管的公共端,当PC口线输出“0”时,选通相应位的数码管发光。
图7.13 8155构成的六位数码管动态显示电路
A口、C口应定义为基本输出分别控制数码管的段码(段驱动端)和位码(公共端),B口未用,可定义为基本输入,此时,命令寄存器中的PA=1,PB=0,PC1=1,PC2=1;因不用A、B口中断,也不用定时器/计数器,故IEA=0,IEB=0,TM1=1,TM2=0,由此可得命令字为:01001101B=4DH。编程时的步骤如下:
MOV DPTR,#CWR ;选中8155的命令寄存器
MOV A,#4DH ;命令字送A
MOV @DPTR,A ;命令字写入命令寄存器
2)多位动态显示接口应用
采用8051与8155接口,再采用8155的I/O口控制数码管的段码和位码,同时,采用动态扫描方式依次循环点亮各位数码管,即可构成多位动态数码管显示电路。
例7.3 用动态显示方式实现例7.2的所有功能。
整体设计思路如下:
由8155的A口控制段码输出,C口控制位码输出,采用定时器中断方式实现动态扫描,每隔20ms扫描一次,每位数码管点亮的时间为1ms。在单片机内部RAM设置待显示数据缓冲区,由查表程序完成显示译码,将缓冲区内待显示数据转换成相应的段码,再将段码通过8051的P0口送至8155的A口;位码数据由累加器循环左移指令产生,再通过P0口送至8155的C口。
硬件电路设计如下:
图7.14位数码管动态显示电路,其中, 8路驱动采用74LS244总线驱动器,6路驱动采用74LS07OC门驱动器。74LS244输出经300W上拉(或限流)电阻后接至电源,同时,接至数码管的各段,控制数码管的显示字符;74LS07输出经1KW上拉电阻接至电源,同时接至各位数码管的公共端,控制每位数码管的显示时间,实现动态扫描。模拟生产线计数的按键信号接至P3.3口。
软件设计如下:
以单片机内部RAM的30H~35H单元作为显示数据缓冲区,六位数码管段码的获取及每位数码管的显示时间均由显示子程序完成;采用定时器中断方式实现动态扫描,每隔20ms扫描一次,每位数码管点亮的时间为1ms。单片机每接收一次按键信号(即模拟生产线计数信号),显示缓冲区的待显示数据被刷新一次,数码管相应的显示数值也就随之发生变化,如连续按键,即可产生计数数据从左至右循环移动的效果。根据图中IO/、与单片机
图7.14 六位数码管动态显示电路
的连接可知,可以确定命令/状态字A口、B口、C口、计数值低8位寄存器及高6位和方式寄存器地址分别为:0100H、0101H、0102H、0103H、0104H、0105H 。
软件流程图如图7.15所示。
图7.15 六位数码管动态显示软件流程图
源程序设计(略)
比较例7.2与例7.3可知,二者功能完全一样。前者数码管较亮,且显示程序占用CPU的时间较少,但其硬件电路复杂,占用单片机口线多,成本高;后者硬件电路相对简单,成本较低,但其数码管显示亮度偏低,且采用动态扫描方式,显示程序占用CPU的时间较多。具体应用时,应根据实际情况,选用合适的显示方式。
比较实训7与例7.3可知,同样都是动态扫描显示,前者是采用不断调用子程序的方式实现动态扫描显示,亮度相对较高,CPU效率较低;后者是采用定时器中断(20ms中断一次)的方式实现动态扫描显示,亮度较低,CPU效率相对较高;谁优谁劣,各有千秋。
本例中针对数码管显示亮度偏低的情况,可采用提高扫描速度(如由20ms改为10ms),或适当延长单只数码管导通的时间(如导通延时时间由1ms改为2ms)等措施来弥补,但其带来的后果是显示程序占用CPU的时间更多,导致CPU利用率更加下降。
4.典型的键盘、显示接口电路
在单片机应用系统中,键盘和显示器往往须同时使用,为节省I/O口线,可将键盘和显示电路做在一起,构成实用的键盘、显示电路。图7.16是用8155并行扩展I/O口构成的典型的键盘、显示接口电路。
图7.16 8155构成的键盘、显示接口电路
由图可知,LED显示器采用共阴极数码管,8155的B口用作数码管段码输出口,A口用作数码管位码输出口,同时,它还用作键盘列选口,C口用作键盘行扫描信号输入口,当其选用4根口线时,可构成4×8键盘,选用6根口线时,可构成6×8键盘。LED采用动态显示软件译码,键盘采用逐列扫描查询工作方式,LED的驱动采用74LS244总线驱动器。
在本书附录的实训电路板中,就采用了这样的接口方法,实训7是利用这部分电路完成的一个项目,读者通过实训可以了解键盘、显示综合应用编程的方法。由于键盘与显示共用一个接口电路,因此,在软件设计中应综合考虑键盘查询与动态显示,通常可将键盘扫描程序中的去抖动延时子程序用显示子程序代替。关于这点,读者可以参考实训7程序。
键盘、显示器共用一个接口电路的设计方法除上述方案外,还可采用专用的键盘、显示器接口的芯片——8279。
7.2.2 可编程键盘/显示器接口——INTEL 8279
INTEL 8279是一种可编程键盘/显示器接口芯片,它含有键盘输入和显示器输出两种功能。键盘输入时,它提供自动扫描,能与按键或传感器组成的矩阵相连,接收输入信息,它能自动消除开关抖动并能对多键同时按下提供保护。显示输出时,它有一个16×8位显示RAM,其内容通过自动扫描,可由8或16 位LED数码管显示。
1.8279的内部结构和工作原理
8279的内部结构框图如图7.17所示,下面分别介绍电路各部分的工作原理。
图7.17 8279结构框图
1)I/O控制及数据缓冲器
数据缓冲器是双向缓冲器,连接内外总线,用于传送CPU和8279之间的命令或数据,对应的引脚为数据总线D0~D7。
I/O控制线是CPU对8279进行控制的引线,对应的引脚为数据选择线A0、片选线
2)控制与定时寄存器及定时控制
控制与定时寄存器用来寄存键盘及显示工作方式控制字,同时还用来寄存其它操作方式控制字。这些寄存器接收并锁存各种命令,再通过译码电路产生相应的信号,从而完成相应的控制功能。与其对应的引脚为时钟输入端CLK,复位端RESET。
定时控制电路由N个基本计数器组成,其中,第一个计数器是一个可编程的N级计数器,N= 2~31之间的数,由软件编程,将外部时钟CLK分频得到内部所需的100KHz时钟,为键盘提供适当的扫描频率和显示扫描时间。与其相D关的引脚是显示熄灭控制端
3)扫描计数器
键盘和显示器共用,提供键盘和显示器的扫描信号。扫描计数器有两种工作方式,按编码方式工作时,计数器作二进制计数,4位计数状态从扫描线SL0~SL3输出,经外部译码器译码后,为键盘和显示器提供扫描信号。按译码方式工作时,扫描计数器的最低二位被译码后,从SL0~SL3输出,提供了4中选1的扫描译码。与其相关的引脚是扫描线SL0~SL3。
4)回复缓冲器、键盘去抖及控制
在键盘工作方式中,回复线作为行列式键盘的列输入线,相应的列输入信号称为回复信号,由回复缓冲器缓冲并锁存。在逐行列扫描时,回复线用来搜寻每一行列中闭合的键,当某一键闭合时,去抖电路被置位,延时等待10ms后,再检查该键是否仍处在闭合状态,如不是闭合,则当作干扰信号不予理睬;如是闭合,则将该键的地址和附加的移位、控制状态一起形成键盘数据被送入8279内部的FIFO(先进先出)存储器。键盘数据格式如下:
D7 D6 D5D4D3 D2D1D0
控 制 |
移 位 |
扫 描 |
回 复 |
控制和移位(D6、D7)的状态由两个独立的附加开关决定,而扫描(D5、D4、D3)和回复(D2、D1、D0)则是被按键置位的数据。D5、D4、D3来自扫描计数器,它们是根据回复信号而确定的行/列编码。
在传感器开关状态矩阵方式中,回复线的内容直接被送往相应的传感器RAM(即FIFO存储器。在选通输入方式工作时,回复线的内容在CNTL/STB线的脉冲上升沿被送如FIFO存储器。
与其相关的引脚是回复线RL0~RL7,控制/选通线CNTL/STB。
5)FIFO/传感器及其状态寄存器
FIFO/传感器RAM是一个双重功能的8×8RAM。在键盘选通工作方式时,它是FIFO存储器,其输入输出遵循先入先出的原则,此时,FIFO状态寄存器用来存放FIFO的工作状态。例如:RAM是满还是空,其中存有多少数据,操作是否出错等。当FIFO存储器中有数据时,状态逻辑将产生IRQ=1信号,向CPU申请中断。
在传感器矩阵方式工作时,这个存储器用作传感器存储器,它存放着传感器矩阵中的每一个传感器状态。在此方式时中,若检索出传感器的变化,IRQ信号变为高电平,向CPU申请中断。
与其相关的引脚是中断请求线IRQ。
6)显示RAM和显示寄存器
显示RAM用来存储显示数据,容量为16×8位。在显示过程中,存储的显示数据轮流从显示寄存器输出。显示寄存器分位A、B两组,OUTA0~OUTA3和OUTB0~OUTB3,它们即可单独送数,也可组成一个8位(A组为高4位,B组为低4位)的字。显示寄存器的输出与显示扫描配合,不断从显示RAM中读出显示数据,同时,轮流驱动被选中的显示器件,以达到多路复用的目的,使显示器件呈稳定显示状态。与其相关的引脚是数据显示线OUTA0~OUTA3和OUTB0~OUTB3。
显示地址寄存器用来寄存由CPU进行读/写显示RAM的地址,它可以由命令设定,也可以设置成每次读出或写入后自动递增。
2.8279的引脚和功能
8279采用40引脚双列直插封装,其引脚排列及功能分别如图7.18(a)、(b)所示。
其引脚功能如下:
D0~D7:数据总线,双向三态总线。
CLK:系统时钟输入端。
RESET:系统复位输入端,高电平有效,复位状态为:16个字符显示;编码扫描键盘——双键锁定;程序时钟编程为31。
A0:数据选择输入端,A0=1时,CPU写入数据为命令字,读出状态字为状态字;A0=0时,CPU读、写均为数据。
IRQ:中断请求输出端,高电平有效。
SL0~SL3:扫描输出端,用于扫描键盘和显示器。可编程设定为编码(4中选1)或译码输出(16选1)。
(a) 引脚排列图 (b)引脚功能图
图7.18 8279引脚及功能
RL0~RL7:回复线,它们是键盘或传感器的列信号输入端。
SHIFT:移位信号输入端,高电平有效。它是8279键盘数据的次高位(D6),通常用作键盘上、下档功能键。在传感器和选通方式中,SHIFT无效。
CNTL/STB:控制/选通输入端,高电平有效。在键盘工作方式时,它是键盘数据的最高位,通常用作控制键。在选通输入方式时,它的上升沿可把来自RL0~RL7的数据存入FIFO/传感器RAM中。在传感器方式时,它无效。
OUTA0~OUTA3:A组显示信号输出端。
OUTB0~OUTB3:B组显示信号输出端。
3.8279的工作方式
8279工作方式的确定是通过CPU对8279送入命令字实现,当数据选择端A0置“
1)键盘的工作方式
通过对键盘/显示方式命令字的设置,可置为双键互锁方式和N键巡回方式。
双键互锁
双键锁定是为两键同时按下提供的保护方法。若有两键或多个键同时按下,则无论这些键是以什么次序按下的,它只识别最后一个释放的键,并把该键值送入FIFO/传感器RAM中。
N键巡回
N键巡回是为N个键同时按下时提供的保护方法。若有多个键同时按下时,键盘扫描能按按键先后顺序依次将键值送入FIFO/传感器RAM中。
2)显示器工作方式
通过对键盘/显示方式命令字和写显示RAM命令字的设置,显示数据写入显示缓冲器时可置为左端送入和右端送入两种方式。左端送入为依次填入方式,右端送入为移位方式。
3)传感器矩阵方式
通过对读FIFO/传感器RAM命令字的设置可将8279设置成传感器矩阵工作方式,此时,传感器的开关状态直接送到传感器RAM。CPU对传感器阵列扫描时,如果检测到某个传感器状态发生变化时,则中断申请信号IRQ变为高电平。如果AI=0,则对传感器RAM的第一次读操作即清除IRQ;如果AI=1,则由中断结束命令清除IRQ。
4.8279的命令格式和命令字
8279共有8条命令,其格式及功能如下所述。
1)键盘/显示方式设置命令字
其命令格式如下:
D7 D6 D5 D4 D3 D2 D1 D0
0 |
0 |
0 |
D |
D |
K |
K |
K |
其中:
D7、D6、D5为000,是方式设置命令特征位。
DD(D4、D3):设定显示方式,其定义如下:
00:8个字符显示,左边输入
01:16个字符显示,左边输入
10:8个字符显示,右边输入
11:16个字符显示,右边输入
KKK(D2、D1、D0):可设定7种键盘、显示工作方式,其定义如下:
000:编码扫描键盘,双键锁定
001:译码扫描键盘,双键锁定
010:编码扫描键盘,N键轮回
011:译码扫描键盘,N键轮回
100:编码扫描传感器矩阵
101:译码扫描传感器矩阵
110:选通输入,编码显示扫描
111:选通输入,译码显示扫描
2)时钟编程命令
其命令格式如下
D7 D6 D5 D4 D3 D2 D1 D0
0 |
0 |
1 |
P |
P |
P |
P |
P |
其中:
D7、D6、D5为001,是时钟编程命令特征位。
PPPPP(D4、D3、D2、D1、D0):设定对CLK输入端输入的外部时钟信号进行分频的分频数N,用以产生100KHz的内部时钟,N的取值为2~31。若CLK输入的时钟频率为2MHz则N=20,PPPPP=10100B。
3)读FIFO/传感器RAM命令
其命令格式如下:
D7 D6 D5 D4 D3 D2 D1 D0
0 |
1 |
0 |
AI |
× |
A |
A |
A |
其中:
D7、D6、D5为001,是读FIFO/传感器RAM命令特征位。
AI(D4)为自动加1标志。
AAA为FIFO/传感器RAM地址。
键扫描方式时,读取数据按先进先出的原则读出,与AI、AAA无关,D0~D4可为任意值,此时,该命令字可设为40H。在传感器或选通输入方式时,AAA为RAM地址。当AI=0时,每次读完传感器RAM的数据后地址不变;当AI=1时,每次读完传感器RAM的数据后地址自动加1。这样,下一个数据便从下一个地址读出,不必重新设置读FIFO/传感器RAM命令。
4)读显示RAM命令
其命令格式如下:
D7 D6 D5 D4 D3 D2 D1 D0
0 |
1 |
1 |
AI |
A |
A |
A |
A |
其中:
D7、D6、D5为011,是读显示RAM命令特征位。
AI(D4)为自动加1标志,AI=1时,每次读数后地址自动加1。
AAAA(D3、D2、D1、D0)为显示RAM中的存储单元地址。
5)写显示RAM命令
其命令格式如下:
D7 D6 D5 D4 D3 D2 D1 D0
1 |
0 |
0 |
AI |
A |
A |
A |
A |
其中:
D7、D6、D5为100,是写显示RAM命令特征位。
AI(D4)为自动加1标志,AI=1时,每次写入数据后地址自动加1。
AAAA(D3、D2、D1、D0)为将要写入的显示RAM中的存储单元地址。
CPU将显示数据写入显示RAM还必须先设置键盘/显示方式设置命令字,若选择8个显示器并从左端输入,键盘设为双键锁定的编码键盘方式,则应设置键盘/显示方式设置命令字为00H。如每次写入数据后自动加1,且从0地址开始写入,则应设置写显示RAM命令为90H。如要输入10个字符,则其输入过程如表7.2所示(依次填入方式)。
RAM 写入次数 |
AD0 |
AD1 |
AD2 |
AD3 |
AD4 |
AD5 |
AD6 |
AD7 |
第1次 |
1 |
|
|
|
|
|
|
|
第2次 |
1 |
2 |
|
|
|
|
|
|
… |
|
|
|
|
|
|
|
|
第8次 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
第9次 |
9 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
第10次 |
9 |
10 |
3 |
4 |
5 |
6 |
7 |
8 |
如将上述键盘/显示方式设置命令字设置为10H,则可实现从右端输入。其输入过程如表7.3所示(移位方式)。
RAM 写入次数 |
AD7 |
AD6 |
AD5 |
AD4 |
AD3 |
AD2 |
AD1 |
AD0 |
第1次 |
|
|
|
|
|
|
|
1 |
第2次 |
1 |
2 |
|
|
|
|
1 |
2 |
… |
|
|
|
|
|
|
|
|
第8次 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
第9次 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
第10次 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
6)显示禁止写入/消隐命令
其命令格式如下:
D7 D6 D5 D4 D3 D2 D1 D0
1 |
0 |
1 |
× |
IWA |
IWB |
BLA |
BLB |
其中:
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(或BLB)=0则恢复显示。
7)清除命令
其命令格式如下:
D7 D6 D5 D4 D3 D2 D1 D0
1 |
1 |
0 |
CD |
CD |
CD |
CF |
CA |
其中:
D7、D6、D5为110,是清除命令的特征位。
CDCDCD(D4、D3、D2)用来设定清除显示RAM方式,具体设置如表7.4所示。
表7.4 CD位定义的消除
CD (D4) |
CD(D3) |
CD(D2) |
清除方式 |
1 |
0 |
× |
将显示RAM全部清0- |
1 |
0 |
将显示RAM置为20H(A组=0010,B组=0000) | |
1 |
1 |
将显示RAM全部置为1 | |
0 |
不清除(若CA=1,D3、D2仍有效) |
CF(D1)用于清除FIFO存储器,CF=1清除FIFO状态,并使中断输出线复位;同时,传感器RAM的读出地址也被置0。
CA(D0)为总清除特征位,兼有CD和CF的联合功能。CF=1时,清除显示器和FIFO的状态。
8)结束中断/出错方式设置命令
其命令格式如下:
D7 D6 D5 D4 D3 D2 D1 D0
1 |
1 |
1 |
E |
× |
× |
× |
× |
其中:
D7、D6、D5为111,是结束中断/出错方式设置命令的特征位。
E(D4)为1时,N键轮回工作方式可工作在特殊出错方式(多个键同时按下);对传感器工作方式,此命令使IRQ变低结束中断,并允许对RAM进一步写入。
5.8279状态格式与状态字
8279的FIFO状态字,主要用于键盘和选通工作方式,以指示数据缓冲器FIFO/传感器RAM中的字符数和有错误发生,状态字节的读出地址和命令输入地址相同(
D7 D6 D5 D4 D3 D2 D1 D0
DU |
S/E |
O |
U |
F |
N |
N |
N |
其中:
DU(D7)为显示无效特征位,DU=1表示显示无效。显示RAM在清除显示或全清命令尚未完成时,DU=1,此时对显示RAM操作无效。
S/E(D6)为传感器信号结束/错误特征位,在读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中的字符个数,即数据个数。
6.8279的数据输入/输出
对8279输入数据(如显示数据、键输入数据、传感器矩阵数据等)时,要选择数据输入输出口地址。8279的数据输入/输出口地址由
在键盘扫描方式中,8279中键输入数据按下列格式存放:
D7 D6 D5D4D3 D2D1D0
CNTL |
SHIFT |
行 号 |
列 号 |
其中,CNTL(D7)为控制键CNTL的状态位。CNTL为单独按键,可与其它键连用构成特殊命令。
SHIFT(D6)为控制键SHIFT的状态位。SHIFT为单独按键,用作按键上、下档控制。
行号(D5、D4、D3)为按下键所在的行号,由RL0~RL7的状态确定。
列号(D2、D1、D0)为按下键所在的列号,由SL0~SL2的状态确定。
7.8279的内部译码与外部译码
在键盘、显示器工作方式中SL0~SL3为键盘的列扫描线和动态显示的位选线。
当选择内部译码(键盘显示方式设置命令字的D0=1)时,SL0~SL3每一时刻只有一位为低电平输出,此时,8279只能外接4位显示器和4×8键盘。
当选择外部译码(键盘显示方式设置命令字的D0=0)时,SL0~SL3呈计数分频式波形输出,此时, 若外接4~16译码器,则译码器的16个输出可作为外接16位显示器的位信号;若外接3~8译码器,则译码器的8个输出与RL0~RL7配合可构成8×8键盘(键输入数据格式中只能计入SL0~SL2的8中状态)。
8.8279与单片机、键盘/显示器的接口
8279是一种功能较强的键盘/显示接口电路,可直接与Intel公司的各个系列的单片机接口,可以外接多种规格的键盘和显示器。图7.19是8051与8279的一般接口框图,图中8279外接8×8键盘,16位显示器,由SL0~SL2译出键扫描线,由4~16译码器对SL0~SL3译
图7.19 8051与8279的一般接口框图
出显示器的位扫描线。在实际应用中,键盘的大小和显示器的位数可以根据具体需要而定。
9.8279的应用
利用键盘、显示专用芯片8279能够以较简单的硬件电路和较少的软件开销实现单片机与键盘、LED显示器的接口。图7.20便是8279的一种具体应用。
如采用图7.20的电路实现实训7中的功能,软件设计将有所改观。采用8279与8051接口,在CPU对8279进行初始化后,只需向8279传输待显示数据(送数),再就是在8279键盘中断申请发出后,取键盘数据识别按键(取数),即可实现按键识别和动态显示。至于要花费CPU大量时间的键盘扫描程序和动态显示程序,全由8279硬件自动完成,CPU再也不必象实训7那样不断调用动态显示子程序,不断查询是否有按键按下,大大提高了CPU的工作效率。读者可自行编程实现实训7中的所有功能。
图7.20 8279应用电路