1
第 7章 80C51的系统扩展
7.1 存储器的扩展
7.2 输入 /输出及其控制方式
7.3 并行接口的扩展
7.4 8279接口芯片
7.5 显示器及键盘接口
2
7.1 存储器的扩展
7.1.1 程序存储器的扩展
一、扩展总线
3
74LS373是有输出三态门的电平允许 8D锁存器 。 当 G
( 使能端 ) 为高电平时, 锁存器的数据输出端 Q的状态与
数据输入端 D相同 ( 透明的 ) 。 当 G端从高电平返回到低电
平时 ( 下降沿后 ), 输入端的数据就被锁存在锁存器中,
数据输入端 D的变化不再影响 Q端输出 。
G Q
D
G
D
D
D
Q
Q
Q
O E
:
:
:
G Q
D
G Q
D
7
4
L
S
3
7
3
O E
G
A L E
8 0 C 3 1
D 7
:
:
D 0
Q 7
:
:
Q 0
P 2
P 0
A B
D B
4
二、片外 ROM操作时序
进行 ROM的扩展,其扩展方法较为简单容易,这
是由单片机的优良扩展性能决定的。单片机的地址
总线为 16位,扩展的片外 ROM的最大容量为 64KB,
地址为 0000H~ FFFFH。扩展的片外 RAM的最大容
量也为 64KB,地址为 0000H~ FFFFH。
?由于 80C51采用不同的控制信号和指令, 尽管
ROM与 RAM的 地址 是重叠 的,也不会发生混乱。
?80C51对 片内和片外 ROM的访问 使用相同的指令,
两者的选择是由硬件实现的。
芯片选择现在 多采用线选法,地址译码法用的渐少。
ROM与 RAM共享数据总线和地址总线。
5
访问片外 ROM的时序,
S 1 S 2 S 3 S 4 S 5 S 6 S 1 S 2 S 3 S 4 S 5 S 6 S 1 S 2
输 出 P C H
输 出 P C H 输 出 P C H 输 出 P C H
P C L P C L P C L P C L P C L
第 1 个 机 器 周 期 第 2 个 机 器 周 期
A L E
P S E N
P 2 口
P 0 口 指 令
指 令
指 令
指 令
80C51系列单片机的 CPU在访问片外 ROM的一个机器周期内,
信号 ALE出现两次(正脉冲),ROM选通信号也两次有效,
这说明 在一个机器周期内,CPU两次访问片外 ROM,也即在
一个机器周期内可以处理两个字节的指令代码,所以在
80C51系列单片机指令系统中有很多单周期双字节指令。
6
三,ROM芯片及扩展方法
1,EPROM存储器及扩展
常用的 EPROM芯片有 2732,2764,27128,27256、
27512等 。
1
2
3
4
5
6
7
8
9
1 0
1 1
1 2
1 3
1 4
2 8
2 7
2 6
2 5
2 4
2 3
2 2
2 1
2 0
1 9
1 8
1 7
1 6
1 5
2 7 6 4
2 7 1 2 8
2 7 2 5 6
2 7 5 1 2
2 7 6 4
V c c
P G M
N C
A 8
A 9
A 1 1
O E
A 1 0
C E
Q 7
Q 6
Q 5
Q 4
Q 3
2 7 1 2 8
V c c
P G M
A 1 3
A 8
A 9
A 1 1
O E
A 1 0
C E
Q 7
Q 6
Q 5
Q 4
Q 3
2 7 2 5 6
V c c
A 1 4
A 1 3
A 8
A 9
A 1 1
O E
A 1 0
C E
Q 7
Q 6
Q 5
Q 4
Q 3
2 7 5 1 2
V c c
A 1 4
A 1 3
A 8
A 9
A 1 1
O E /V p p
A 1 0
C E
Q 7
Q 6
Q 5
Q 4
Q 3
2 7 6 4
V p p
A 1 2
A 7
A 6
A 4
A 4
A 3
A 2
A 1
A 0
Q 0
Q 1
Q 2
G N D
2 7 2 5 6
V p p
A 1 2
A 7
A 6
A 4
A 4
A 3
A 2
A 1
A 0
Q 0
Q 1
Q 2
G N D
2 7 1 2 8
V p p
A 1 2
A 7
A 6
A 4
A 4
A 3
A 2
A 1
A 0
Q 0
Q 1
Q 2
G N D
2 7 5 1 2
A 1 5
A 1 2
A 7
A 6
A 4
A 4
A 3
A 2
A 1
A 0
Q 0
Q 1
Q 2
G N D
7
EPROM存储器扩展电路:
O E
2 7 6 4 A
A 7
:
:
A 0
A 8 - A 1 2
C E
D 0 ~ D 7
7
4
L
S
3
7
3
O E
G
A L E
8 0 C 3 1
D 7
:
:
D 0
Q 7
:
:
Q 0
P S E N
E A
P 2, 0 - P 2, 4
P 0
8
2,EEPROM存储器及扩展
常用的 EEPROM芯片有 2864,2817等 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
28
27
26
25
24
23
22
21
20
19
18
17
16
15
2864A
Vcc
WE
NC
A8
A9
A11
OE
A10
CE
I/O7
I/O6
I/O5
I/O4
I/O3
NC
A12
A7
A6
A5
A4
A3
A2
A1
A0
I/O0
I/O1
I/O2
GND
1
2
3
4
5
6
7
8
9
10
11
12
13
14
28
27
26
25
24
23
22
21
20
19
18
17
16
15
2817A
Vcc
WE
NC
A8
A9
A11
OE
A10
CE
I/O7
I/O6
I/O5
I/O4
I/O3
RDY/BUSY
A12
A7
A6
A5
A4
A3
A2
A1
A0
I/O0
I/O1
I/O2
GND
9
7.1.2 数据存储器的扩展
一,RAM扩展原理
扩展 RAM和扩展 ROM类似,由 P2口提供高 8位地址,P0口分时
地作为低 8位地址线和 8位双向数据总线。 外部 RAM读时序为,
S 1 S 2 S 3 S 4 S 5 S 6 S 1 S 2 S 3 S 4 S 5 S 6 S 1 S 2
输 出 P C H
输 出 D P H
P C L
D P L
第 1 个 机 器 周 期 第 2 个 机 器 周 期
A L E
P S E N
P 2 口
P 0 口
指 令 数 据 入
输 出 P C H
P C L
指 令
R D
10
外部 RAM写 时序为:S 1 S 2 S 3 S 4 S 5 S 6 S 1 S 2 S 3 S 4 S 5 S 6 S 1 S 2
输 出 P C H
输 出 D P H
PCL
DPL
第 1 个 机 器 周 期 第 2 个 机 器 周 期
ALE
PSEN
P 2 口
P 0 口
指 令 数 据 出
输 出 P C H
PCL
指 令
WR
11
二,RAM扩展方法
1、数据存储器
常用的数据存储器 SRAM芯片有 6116﹑ 6264﹑ 62256等。
1
2
3
4
5
6
7
8
9
1 0
1 1
1 2
1 3
1 4
2 8
2 7
2 6
2 5
2 4
2 3
2 2
2 1
2 0
1 9
1 8
1 7
1 6
1 5
6 2 6 4
V c c
W E
C S
A 8
A 9
A 1 1
O E
A 1 0
C E
D 7
D 6
D 5
D 4
D 3
N C
A 1 2
A 7
A 6
A 4
A 4
A 3
A 2
A 1
A 0
D 0
D 1
D 2
G N D
N C
A 1 2
A 7
A 6
A 4
A 4
A 3
A 2
A 1
A 0
D 0
D 1
D 2
G N D
A 1 4
A 1 2
A 7
A 6
A 4
A 4
A 3
A 2
A 1
A 0
D 0
D 1
D 2
G N D
V c c
W E
A 1 3
A 8
A 9
A 1 1
O E
A 1 0
C E
D 7
D 6
D 5
D 4
D 3
V c c
W E
A 1 3
A 8
A 9
A 1 1
O E / R F S H
A 1 0
C E
D 7
D 6
D 5
D 4
D 3
6 2 2 5 6 6 2 1 2 8 6 2 6 4 6 2 6 6 6 2 1 2 8 6 2 2 5 6
1
2
3
4
5
6
7
8
9
1 0
1 1
1 2
2 4
2 3
2 2
2 1
2 0
1 9
1 8
1 7
1 6
1 5
1 4
1 3
6 1 1 6
6 2 1 2 8
6 2 2 5 6
A 7
A 6
A 4
A 4
A 3
A 2
A 1
A 0
D 0
D 1
D 2
G N D
V c c
A 8
A 9
W E
O E
A 1 0
C E
D 7
D 6
D 5
D 4
D 3
6 1 1 6
12
2、数据存储器扩展电路
O E
6 2 6 4
A 7
:
:
A 0
A 8 - A 1 2
D 0 ~ D 7
7
4
L
S
3
7
3
O E
G
A L E
8 0 C 3 1
D 7
:
:
D 0
Q 7
:
:
Q 0
R D
E A
P 2, 0 - P 2, 4
P 0
C S
+ 5 V
W E
W R
P 2, 7
C E
13
7.2 输入 /输出及其控制方式
? 原始数据或现场信息要利用输入设备输入到单片
机中,单片机对输入的数据进行处理加工后,还
要输出给输出设备。常用的输入设备有键盘、开
关及各种传感器等,常用的输出设备有 LED(或
LCD)显示器、微型打印机及各种执行机构等。
? 80C51单片机内部有四个并行口和一个串行口,
对于简单的 I/O设备可以直接连接。当系统较为复
杂时,往往要借助 I/O接口电路(简称 I/O接口)
完成单片机与 I/O设备的连接。现在,许多 I/O接
口已经系列化、标准化,并具有可编程功能。
14
单片机与 I/O设备的关系:
7.2.1 输入 /输出接口的功能
7
4
L
S
3
7
3
O E
G
A L E
8 0 C 5 1
D 7
:
:
D 0
Q 7
:
:
Q 0
P 2
P 0
I N T X
R D,W R
2
2
数 据 端 口
状 态 端 口
控 制 端 口
I / O 接 口
I / O 设 备
控 制 信 号
状 态 信 号
数 据
15
I/O接口的功能是:
1、对单片机输出的数据锁存
锁存数据线上瞬间出现的数据,以解决单片机与 I/O设备的
速度协调问题。
2、对输入设备的三态缓冲
外设传送数据时要占用总线,不传送数据时必须对总线呈
高阻状态。利用 I/O接口的三态缓冲功能,可以 实现 I/O设备与
数据总线的隔离,便于其它设备的总线挂接。
3、信号转换
信号类型(数字与模拟、电流与电压)、信号电平(高与
低、正与负)、信号格式(并行与串行)等的转换。
4、时序协调
不同的 I/O设备定时与控制逻辑是不同的,并与 CPU的时序
往往是不一致的,这就需要 I/O接口进行时序的协调。
16
一、无条件传送
适用于对 简单的 I/O设备 (如开关,LED显示器、继电
器等)的操作,或者 I/O设备的定时固定或已知的场合。
二、查询状态传送
效率低 。
三、中断传送方式
效率大大提高 。
四、直接存储器存取( DMA)方式
适于 高速外设以及成组交换数据 的场合 。
7.2.2 单片机与 I/O设备的数据传送方式
17
7.3 并行接口的扩展
7.3.1 并行输入 /输出口的简单扩展
A L E
8 0 C 3 1
R D
P 0
W R
P 2, 7
7
4
L
S
2
7
3
≥ 1
C P
Q 1
Q 2
Q 3
Q 4
Q 5
Q 6
Q 7
Q 8
C L R
D 1
D 2
D 3
D 4
D 5
D 6
D 7
D 8
≥ 1
7
4
L
S
2
4
4
1 G
1 A 1
1 A 2
1 A 3
1 A 4
2 A 1
2 A 2
2 A 3
2 A 4
2 G
1 Y 1
1 Y 2
1 Y 3
1 Y 4
2 Y 1
2 Y 2
2 Y 3
2 Y 4
+ 5 V
18
7.3.2 可编程接口 8155的扩展
一,8155的引脚及结构
1
2
3
4
5
6
7
8
9
1 0
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
2 0
4 0
3 9
3 8
3 7
3 6
3 5
3 4
3 3
3 2
3 1
3 0
2 9
2 8
2 7
2 6
2 5
2 4
2 3
2 2
2 1
P C 3
P C 4
T I M E R I N
R E S E T
P C 5
T I M E R O U T
I O / M
C E
R D
W R
A L E
A D 0
A D 1
A D 2
A D 3
A D 4
A D 5
A D 6
A D 7
G N D
V C C
P C 2
P C 1
P C 0
P B 7
P B 6
P B 5
P B 4
P B 3
P B 2
P B 1
P B 0
P A 7
P A 6
P A 5
P A 4
P A 3
P A 2
P A 1
P A 0
8
1
5
5
2 5 6 × 8
静 态 R A M
计 数 器
A
B
C
A D 0 ~ A D 7
I O / M
C E
R D
W R
R E S E T
A L E
T I M E R I N
T I M E R O U T
V C C
G N D
P A 0 ~ P A 7
P B 0 ~ P B 7
P C 0 ~ P C 5
命 令 / 状 态
寄 存 器
19
二,8155的内部编址
内部 RAM地址为,00H~ FFH。
内部端口地址为,000-----------命令 /状态寄存器
001-----------A口
010-----------B口
011-----------C口
100-----------计数器低 8位
101-----------计数器高 6位及计数
器方式设置位
20
三、工作方式设置及状态字格式
1、方式设置
8155的工作方式设置通过将命令字写入命令寄存器实现。
PA,A口数据传送方向设置位。 0--输入; 1--输出。
PB,B口数据传送方向设置位。 0--输入; 1--输出。
PC1,PC2,C口工作方式设置位。
21
IEA,A口的中断允许设置位。 0--禁止; 1--允许。
IEB,B口的中断允许设置位。 0--禁止; 1--允许。
TM2,TM1:计数器工作方式设置位。
22
2、状态字格式
8155的状态寄存器由 8位锁存器组成,其最高位为任意值。
通过读 C/S寄存器的操作 (即用输入指令 ),读出的是状态寄存
器的内容。
?INTRX:中断请求标志。此处 X表示 A或 B。 INTRX =1,表示 A或 B口有
中断请求; INTRX=0,表示 A或 B口无中断请求。
?BFX:口缓冲器空 /满标志。 BFX=1,表示口缓冲器已装满数据,可由
外设或单片机取走; BFX=0,表示口缓冲器为空,可以接受外设或单片
机发送数据。
?INTEX:口中断允许 /禁止标志。 INTEX=1,表示允许口中断;
INTEX=0,表示禁止口中断。
?TIMER:计数器计满标志。 TIMER=1,表示计数器的原计数初值已计
满回零; TIMER=0,表示计数器尚未计满。
23
四、计数器输出模式
计数器是一个 14位的减法计数器,它能对输入的脉冲进行计数,
在到达最后一个计数值时,输出一个矩形波或脉冲。
装入计数长度寄存器的值为 2H~3FFFH。 15,14两位用于规定
计数器的输出方式 。
24
五、选通 I/O的组态
对 8155命令字的 PC2﹑ PC1位编程,使 A或 B口工作在选通方
式时,C口的 PC0~ PC5就被定义 为 A或 B口选通 I/O方式的应
答和控制线。
25
选通方式的组态逻辑,
R D
W R
P A 0 ~ P A 7
P B 0 ~ P B 7
P C 0
P C 1
P C 2
P C 3
P C 4
P C 5
A
B
I N T E A
&
I N T E B
&
A D 0 ~ A D 7
I N T R A
I N T R B
B F B
S T B B
S T B A
B F A
26
六,8155芯片与单片机的接口
80C51系列单片机可以与 8155直接连接而不需要附加任何电路。
使系统增加 256字节的 RAM,22位 I/O线及一个计数器。
A L E
8 0 C 3 1
R D
P 0
W R
P 2, 7
A D 0 ~ A D 7
P 2, 0
R D
W R
A L E
I O / M
C E
8 1 5 5
E A
R E S E T R E S E T
B
A
C
T I M E I N
T I M E O U T
27
8155中 RAM地址 因 P2.7( A15) =0 及 P2.0( A8)
=0,故可选为 01111110 00000000B( 7E00H) ~
01111110 11111111B( 7EFFH);
I/O端口的地址 为,7F00H~7F05H。
28
若 A口,B口定义为基本输入方式,计数器作为方波发
生器,对 80C31输入脉冲进行 24分频(但需要注意 8155
的计数最高频率约为 4MHZ),则 8155 I/O口初始化程
序如下:
START,MOV DPTR,#7F04H ;指向计数寄存器低 8位
MOV A,#18H ;设计数器初值 #18H( 24D)
MOVX @DPTR,A ;计数器寄存器低 8位赋值
INC DPTR ;指向计数器寄存器高 6位及方式位
MOV A,#40H ;计数器为连续方波方式
MOVX @DPTR,A ;计数寄存器高 6位赋值
MOV DPTR,#7F00H ;指向命令寄存器
MOV A,#0C2H ;设命令字
MOVX @DPTR,A ;送命令字
29
7.4 8279接口芯片
?由 80C51系列单片机构成的小型测控系统或智能仪
表中,常常需要扩展显示器和键盘以实现人机对话
功能。 8279芯片在扩展显示器和键盘时功能强、使
用方便。
?8279是 Intel公司为 8位微处理器设计的通用键盘 /
显示器接口芯片,其 功能是:接收来自键盘的输入
数据并作预处理;完成数据显示的管理和数据显示
器的控制 。单片机应用系统采用 8279管理键盘和显
示器,软件 编程极为简单,显示稳定,且减少了主
机的负担 。
30
7.4.1 8279的结构
数 据
缓 冲 器
I/O控 制
FIFO/传
感 器 RAM
状 态
控 制 及 定
时 寄 存 器
8× 8FIFO
/传 感 器
RAM
键 盘 消 抖
及 控 制
定 时
及 控 制
扫 描
计 数 器
回 送
缓 冲 器
显 示 地 址
寄 存 器
16× 8
显 示 RAM
显 示
寄 存 器
RESETCLK DB0~ DB7
WR
RD
CS A0 IRQ
SL0~ SL3BD
OUTA0~ OUTA3
OUTB0~ OUTB3
RL0~ SL7
CNTL/STB
SHIFT
显 示 输 出
键 盘 输 入
扫 描 输 出
至 CPU
内 部 数 据 总 线
31
?数据缓冲器 将双向三态 8位内部数据总线 D0~D7与
系统总线相连,用于传送 CPU与 8279之间的命令和
状态。
?控制和定时寄存器 用于寄存键盘和显示器的工作方
式,锁存操作命令,通过译码器产生相应的控制信
号,使 8279的各个部件完成相应的控制功能。
?定时器 包含一些计数器,其中有一个可编程的 5位
计数器(计数值在 2~ 31间),对 CLK输入的时钟
信号进行分频,产生 100 KHz的内部定时信号 (此
时扫描时间为 5.1ms,消抖时间为 10.3ms)。外部
输入时钟信号周期不小于 500ns。
32
?扫描计数器 有两种输出方式,一是编码方式,计数
器以二进制方式计数,4位计数状态从扫描线 SL3~SL0 输
出,经外部译码器可以产生 16位的键盘和显示器扫描信号;
另一种是译码方式,扫描计数器的低两位经内部译码后从
SL3~SL0 输出,直接作为键盘和显示器的扫描信号。
?回送缓冲器、键盘消抖及控制 完成对键盘的自动
扫描以搜索闭合键,锁存 RL7~RL0的键输入信息,
消除键的抖动,将键输入数据写入内部先进先出存
储器( FIFO RAM)。 RL7~RL0为回送信号线作为键
盘的检测输入线,由回送缓冲器缓冲并锁存,当某一键闭
合时,附加的移位状态 SHIFT、控制状态 CNTL及扫描码和
回送信号拼装成一个字节的“键盘数据”送入 8279内部的
FIFO(先进先出) RAM。
33
键盘的数据格式为,
在传感器矩阵方式和选通方式时,回送线 RL7~RL0的内
容被直接送往相应的 FIFO RAM。输入数据即为
RL7~RL0。数据格式为,
34
FIFO/传感器 RAM是具有双功能的 8× 8 RAM
?在键盘或选通方式时,它作为 FIFO RAM,依
先进先出的规则输入或读出,其状态存放在
FIFO/传感器 RAM状态寄存器中。只要 FIFO
RAM不空,状态逻辑将置中断请求 IRQ=1;
?在传感器矩阵方式,作为传感器 RAM,当检
测出传感器矩阵的开关状态发生变化时,中断
请求信号 IRQ=1。在外部译码扫描方式时,可
对 8× 8矩阵开关的状态进行扫描,在内部译码
扫描方式时,可对 4× 8矩阵开关的状态进行扫
描。
35
显示 RAM用来存储显示数据,容量是 16× 8位
?在显示过程中,存储的显示数据轮流从显示寄
存器输出。显示寄存器输出分成两组,即
OUTA0~OUTA3和 OUTB0~OUTB3,两组可以
单独送数,也可以组成一个 8位的字节输出,该
输出与位选扫描线 SL0~SL3配合就可以实现动态
扫描显示。
?显示地址寄存器用来寄存 CPU读 /写显示 RAM的
地址,可以设置为每次读出或写入后自动递增。
36
7.4.2 8279的引脚定义
DB7~DB0为双向外部数据总线 ;
为片选信号线,低电平有效;
和 为读和写选通信号线;
IRQ为中断请求输出线。
RL7~RL0为键盘回送线。
SL3~SL0为扫描输出线。
OUTB3~OUTB0,OUTA3~OUTA0
为显示寄存器数据输出线。
RESET为复位输入线。
SHIFT为换档键输入线。
CNTL/STB为控制 /选通输入线。
CLK为外部时钟输入线。
为显示器消隐控制线 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
RL2
RL3
CLK
IRQ
RL4
RL5
RL6
RL7
RESET
RD
WR
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7
GND
V CC
RL1
RL0
CNTL/STB
SHIFT
SL3
SL2
SL1
SL0
OUTB0
OUTB1
OUTB2
OUTB3
OUTA0
OUTA1
OUTA2
OUTA3
BD
CS
A0
8
2
7
9
CS
RD WR
BD
37
7.4.3
8279的
操作命
令
38
一、显示器和键盘方式设置命令
D7 D6 D5=000 是键盘 /显示方式命令特征字。
D4 D3=DD 为显示器方式设置位。
D2 D1 D0 =KKK 为键盘工作方式设置位。
8279 可外接 8位或 16位 LED 显示器,显示器的每
一位对应一个 8位的显示器缓冲单元。 左端输入 方
式较为简单,显示缓冲器 RAM地址 0~15分别对应
于显示器的 0位 (左 )~15位 (右 )。 CPU依次从 0地址
或某一地址开始将段数据写入显示缓冲器。 右端输
入方式 是移位,输入数据总是写入右端的显示缓冲
器,数据写入显示缓冲器后,原来缓冲器的内容左
移一个字节。
39
?内部译码 的扫描方式时,扫描信号由
SL3~SL0输出,仅能提供 4选 1扫描线。
?外部译码 工作方式时,内部计数器作二进制
计数,4位二进制计数器的计数状态从扫描线
SL3~SL0输出,并在外部进行译码。可为键
盘 /显示器提供 16选 1扫描线。
?双键互锁 工作方式时,键盘中同时有两个以
上的键被按下,任何一个键的编码信息均不能
进入 FIFO RAM,直至仅剩下一个键闭合时,
该键的编码信息方能进入 FIFO RAM。
40
?N键轮回 工作方式时,如有多个键按下,键盘
扫描能够根据发现它们的顺序,依次将它们的
状态送入 FIFO RAM。
?传感器矩阵 工作方式,是指片内的去抖动逻
辑被禁止掉,传感器的开关状态直接输入到
FIFO RAM中。因此,传感器开关的闭合或断
开均可使 IRQ马上为 1,向 CPU快速申请中断。
41
二、时钟编程命令
D7D6D5=001 为时钟编程命令特征位。
8279的内部定时信号是由外部输入时钟经分
频后产生的,分频系数由时钟编程命令确定。
D4~D0 用来设定对 CLK端输入时钟的分频次
数 N,N=2~31。利用这条命令,可以将来自
CLK引脚的外部输入时钟分频,以取得
100KHz的内部时钟信号。例如 CLK输入时钟
频率为 2MHz,获得 100KHz的内部时钟信号,
则需要 20分频。
42
三、读 FIFO /传感器 RAM命令
D7D6D5=010 为该命令的特征位。
D2~D0( AAA)为起始地址。 D4( AI)为多
次读出时的地址自动增量标志,D3无用。在键
扫描方式中,AIAAA均被忽略,CPU总是按先
进先出的规律读键输入数据,直至输入键全部
读出为止。在传感器矩阵方式中,若 AI=1,则
CPU从起始地址开始依次读出,每读出一个数
据地址自动加 1; AI=0,CPU仅读出一个单元
的内容。
43
四、读显示 RAM命令
D7D6D5=011为该命令的特征位。
D3~D0( AAAA)用来寻址显示 RAM的 16个存
储单元,AI为自动增量标志,若 AI=1,则每次
读出后地址自动加 1。
五、写显示 RAM命令
D7 D6 D5=100为该命令的特征位。
D4( AI)为自动增量标志,D3~D0( AAAA)
为起始地址,数据写入按左端输入或右端输入
方式操作。若 AI=1,则每次写入后地址自动加
1,直至所有显示 RAM全部写完 。
44
六,显示器写禁止 /消隐命令
D7 D6 D5=101为该命令的特征位。该命令
用以禁止写 A组和 B组显示 RAM。
在双 4位显示器使用时,即
OUTA3~OUTA0和 OUTB3~OUTB0独立地
作为两个半字节输出时,可改写显示 RAM
中的低半字节而不影响高半字节的状态,
反之亦可改写高半字节而不影响低半字节。
D1,D0位是消隐显示器特征位,要消隐两
组显示器,必须使之同时为 1,为 0时则恢
复显示。
45
七、清除命令
D7 D6 D5=110为该命令的特征位。 CPU将清除命
令写入 8279,使显示缓冲器呈初态(暗码),该
命令同时也能清除输入标志和中断请求标志。
D4 D3 D2( CDCDCD)用来设定清除显示 RAM的
方式。
D1( CF) =1为清除 FIFO RAM的状态标志,FIFO
RAM被置成空状态(无数据),并复位中断请求
线 IRQ时,传感器 RAM的读出地址也被置成 0。
D0( CA)是总清的特征位,它兼有 CD和 CF 的联
合效用。当 CA =1时,对显示 RAM的清除方式仍
由 D3﹑ D2编码确定。
46
八、结束中断 /错误方式设置命令
D7 D6 D5=101为该命令的特征位。此命令用来
结束传感器 RAM的中断请求。
D4( E) =0 为结束中断命令。在传感器工作方式
中使用。每当传感器状态出现变化时,扫描检测
电路就将其状态写入传感器 RAM,并启动中断逻
辑使 IRQ变高,向 CPU请求中断,并且禁止写入
传感器 RAM。此时,若传感器 RAM读出地址的
自动增量特征位未设置( AI=0),则中断请求
IRQ在 CPU第一次从传感器 RAM读出数据时就被
清除。若 AI=1,则 CPU对传感器 RAM读出并不
能清除 IRQ,而必须通过给 8279写入结束中断 /设
置出错方式命令才能使 IRQ变低。
47
D4( E) =1 为特定错误方式命令。在 8279
已被设定为键盘扫描 N键轮回方式后,如果
CPU给 8279又写入结束中断 /错误方式命令
( E=1),则 8279将以一种特定的错误方
式工作。这种方式的特点是:在 8279消抖
周期内,如果发现多个按键同时按下,则
FIFO状态字中的错误特征位 S/E将置 1,并
产生中断请求信号和阻止写入 FIFO RAM。
48
7.5 显示器及键盘接口
7.5.1,七段显示器的原理
一、七段显示器的原理
a
b
c
d
e
f
g
d p
c o m
a b
f
g
c o m
c
d p
d
e
c o m
ab
fg
c
d p
d
e
c o m
ab
fg
c
d p
d
e
49
二、显示方式及接口
1、静态显示
8 0 C 5 1
P 0
W R
P 2, 7 P 2, 6 P 2, 5
7
4
L
S
3
7
3
≥ 1
G
Q 1
Q 2
Q 3
Q 4
Q 5
Q 6
Q 7
Q 8
D 1
D 2
D 3
D 4
D 5
D 6
D 7
D 8
+ 5 V
1
a
b
c
d
e
f
g
d p
7
4
L
S
3
7
3
G
Q 1
Q 2
Q 3
Q 4
Q 5
Q 6
Q 7
Q 8
D 1
D 2
D 3
D 4
D 5
D 6
D 7
D 8
+ 5 V
a
b
c
d
e
f
g
d p
7
4
L
S
3
7
3
G
Q 1
Q 2
Q 3
Q 4
Q 5
Q 6
Q 7
Q 8
D 1
D 2
D 3
D 4
D 5
D 6
D 7
D 8
a
b
c
d
e
f
g
d p
≥ 1
1
≥ 1
1
7 4 L S 1 3 8
C B A
Y 0
Y 1
Y 2
+ 5 V并
行
输
出:
50
串
行
输
出:
80C51
RXD
7
4
L
S
1
6
4
&
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
A
+5V
a
b
c
d
e
f
g
dp
+5V
a
b
c
d
e
f
g
dp
a
b
c
d
e
f
g
dp
TXD
B
CP
7
4
L
S
1
6
4
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
A
B
CP
A
B
CP
7
4
L
S
1
6
4
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
P1.0
1K× 8
1K× 8
1K× 8
+5V
51
2、动态显示
8 1 5 5
P B 7
共 阴 极
L E D
abc
de
f
g
d p
+ 5 V
1 0 0 Ω × 8
7 4 0 7 × 2
7 4 0 6
P B 6
P B 5
P B 4
P B 3
P B 2
P B 1
P B 0
P A 5
P A 4
P A 3
P A 2
P A 1
P A 0
去 8 0 C 5 1
52
DIS,MOV R0,#79H ;显示数据缓冲区首地址送 R0
MOV R3,#01H ;使显示器最右边位亮
MOV A,R3 ;
LD0,MOV DPTR,#7F01H ;数据指针指向 A口
MOVX @DPTR,A ;送扫描值
INC DPTR ;数据指针指向 B口
MOV A,@R0 ;取欲显示的数据
ADD A,#0DH ;加上偏移量
MOVC A,@A+PC ;取出字型码
MOVX @DPTR,A ;送显示
ACALL DL1 ;调用延时子程序
INC R0 ;指向下一个显示段数据地址
MOV A,R3 ;
JB ACC.5,ELD1 ;扫描到第六个显示器否?
RL A ;未到,扫描码左移 1位
MOV R3,A
AJMP LD0
ELD1,RET
53
DSEG,DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH,77H,7CH
DB 39H,5EH,79H,71H,40H,00H
DL1,MOV R7,#02H ;延时 1ms子程序
DL,MOV R6,#0FFH
DL6,DJNZ R6,DL6
DJNZ R7,DL
RET
54
7.5.2 键盘及其接口
按键在闭合和断开时,触点会存在抖动现象:
按 下 抖 动
释 放 抖 动
理 想 波 形
实 际 波 形
稳 定 闭 合
+ 5 V
+ 5 V
A
B
无 抖 动
有 抖 动
55
一,独立式按键及其接口
芯片内有上拉电阻 芯片内无上拉电阻
8 0 C 5 1
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
7 4 L S 3 7 3
D1
D2
D3
D4
D5
D6
D7
D8
+5V
Q1
Q2
Q3
Q4
Q5
Q6
Q7
Q8
0
1
2
3
4
5
6
7
56
随机扫描程序(也可以用定时扫描或中断扫描)如下:
SMKEY,ORL P1,#0FFH ;置 P1口为输入方式
MOV A,P1 ;读 P1口信息
JNB ACC.0,P0F ; 0号键按下,转 0号键处理
JNB ACC.1,P1F ; 1号键按下,转 1号键处理
… …
JNB ACC.7,P7F ; 7号键按下,转 7号键处理
LJMP SMKEY
P0F,LJMP PROG0
P1F,LJMP PROG1
… …
P7F,LJMP PROG7
PROG0,… …
LJMP SMKEY
PROG1,… …
LJMP SMKEY
… …
PROG7,… …
LJMP SMKEY
57
二、矩阵式键盘及其接口
8 0 C 5 1
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
8 1 5 5
PC0
PC1
PC2
PC3
PA0
PA1
PA2
PA3
+5V
PA4
PA5
PA6
PA7
X0
X1
X2
X3
Y0 Y1 Y2 Y3
5.1K× 4
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
判有无键按下;
判按下的是哪一键;
键处理。
58
SMKEY,MOV P1,#0FH ;置 P1口高 4位为,0”、低 4位为输入状
态
MOV A,P1 ;读 P1口
ANL A,# 0FH ;屏蔽高 4位
CJNE A,# 0FH,HKEY ;有键按下,转 HKEY
SJMP SMKEY ;无键按下转回
HKEY,LCALL DELAY10 ;延时 10ms,去抖
MOV A,P1 ;
ANL A,# 0FH ;
CJNE A,# 0FH,WKEY ;确认有键按下,转判哪一键按下
SJMP SMKEY ; 是抖动转回
WKEY,MOV P1,# 1110 1111B ;置扫描码,检测 P1.4列
MOV A,P1 ;
ANL A,# 0FH ;
CJNE A,# 0FH,PKEY ; P1.4列( Y0)有键按下,转键处理
59
MOV P1,# 1101 1111B ;置扫描码,检测 P1.5列
MOV A,P1 ;
ANL A,# 0FH ;
CJNE A,# 0FH,PKEY ; P1.5列( Y1)有键按下,转键处理
MOV P1,# 1011 1111B ;置扫描码,检测 P1.6列
MOV A,P1 ;
ANL A,# 0FH ;
CJNE A,# 0FH,PKEY ; P1.6列( Y2)有键按下,转键处理
MOV P1,# 0111 1111B ;置扫描,检测 P1.7列
MOV A,P1 ;
ANL A,# 0FH ;
CJNE A,# 0FH,PKEY ; P1.7列( Y3)有键按下,转键处理
LJMP SMKEY ;
PKEY,… … ;键处理
60
线反转法示例程序,
SMKEY,MOV P1,#0FH ;置 P1口高 4位为,0”、低 4位为输入状态
MOV A,P1 ;读 P1口
ANL A,# 0FH ;屏蔽高 4位
CJNE A,# 0FH,HKEY ;有键按下,转 HKEY
SJMP SMKEY ;无键按下转回
HKEY,LCALL DELAY10 ;延时 10ms,去抖
MOV A,P1 ;
ANL A,# 0FH ;
MOV B,A ;行线状态在 B的低 4位
CJNE A,# 0FH,WKEY ;确认有键按下,转判哪一键按下
SJMP SMKEY ; 是抖动转回
WKEY,MOV P1,# 0F0H ;置 P1口高 4位为输入、低 4位为,0”
MOV A,P1 ;
ANL A,# 0F0H ;屏蔽低 4位
ORL A,B ;列线状态在高 4位,与行线状态合成于 B中
… … ;键处理
61
?键处理 。键处理是根据所按键散转进入相应的功能
程序。为了散转的方便,通常应先得到按下键的键
号。键号是键盘的每个键的编号,可以是 10进制或
16进制。键号一般通过键盘扫描程序取得的键值求
出。键值是各键所在行号和列号的组合码。如图所
示接口电路中的键,9”所在行号为 2,所在列号为 1,
键值可以表示为,21H”(也可以表示为‘ 12H’,表
示方法并不是唯一的,要根据具体按键的数量及接
口电路而定)。根据键值中行号和列号信息就可以
计算出键号,如:
? 键号=所在行号 × 键盘列数+所在列号,
即 2× 4+ 1= 9
根据键号就可以方便地通过散转进入相应键的功能程序。
62
7.5.3 键盘和显示器接口示例
一,8155的键盘及显示接口
8 1 5 5
P B 7
共 阴 极
L E D
abc
de
f
g
d p
+ 5 V
1 0 0 Ω × 8
7 4 0 7 × 2
7 4 0 6
P B 6
P B 5
P B 4
P B 3
P B 2
P B 1
P B 0
P A 5
P A 4
P A 3
P A 2
P A 1
P A 0
去 8 0 C 5 1
5, 1 K Ω × 3
P C 2
P C 1
P C 0
012345
67
8
9
1 0
1 1
1 2
1 31 41 51 61 7
63
KD1:MOV A,#00000011B; 8155初始化,PA,PB为基本输出,PC为输入
MOV DPTR,#7F00H ;
MOVX @DPTR,A ;
KEY1:ACALL KS1 ;查有无键按下
JNZ LK1 ;有,转键扫描
ACALL DIS ;调显示子程序
AJMP KEY1 ;
LK1,ACALL DIS ;键扫描
ACALL DIS ;两次调显示子程序,延时 12ms
ACALL KS1 ;
JNZ LK2 ;
ACALL DIS ;调显示子程序
AJMP KEY1
64
LK2,MOV R2,#0FEH ;从首列开始
MOV R4,#00H ;首列号送 R4
LK4,MOV DPTR,#7F01H ;
MOV A,R2 ;
MOVX A,@DPTR ;
INC DPTR ;
INC DPTR ;指向 C口
MOVX @DPTR,A ;
JB ACC.0,LONE ;第 0行无键按下,转查第 1行
MOV A,#00H ;第 0行有键按下,该行首键号送 A
AJMP LKP ;转求键号
LONE,JB ACC.1,LTWO ;第 1行无键按下,转查第 2行
MOV A,#08H ;第 1行有键按下,该行首键号送 A
AJMP LKP ;转求键号
LTWO,JB ACC.2,NEXT ;第 2行无键按下,转查下一列
MOV A,#10H ;第 2行有键按下,该行首键号送 A
LKP,ADD A,R4 ;求键号。键号=行首键号+列号
PUSH ACC ;保护键号
LK3,ACALL DIS ;等待键释放
ACALL KS1 ;
JNZ LK3 ;
POP ACC ;
RET ;键扫描结束。此时 A的内容为按下键的键号
65
NEXT:INC R4 ;指向下一列
MOV A,R2 ;
JNB ACC.5,KND ;判 6列扫描完没有。
RL A ;未完,扫描字对应下一列
MOV R2,A ;
AJMP LK4 ;转下一列扫描
KND,AJMP KEY1 ;扫完,转入新一轮扫描
KS1,MOV DPTR,#7F01H ;查有无键按下子程序。先指向 A口
MOV A,#00H ;
MOVX @DPTR,A ;送扫描字,00H”
INC DPTR ;
INC DPTR ;指向 C口
MOVX A,@DPTR ;
CPL A ;变正逻辑
ANL A,#0FH ;屏蔽高位
RET ;子程序出口,A的内容非 0则有键按下
66
二,8279的键盘及显示接口
8 2 7 9
O U T A 3
共 阴 极
L E D
abc
de
f
g
d p
+ 5 V
1 0 0 Ω × 8
7 4 0 7 × 2
7 4 0 6
O U T A 2
O U T A 1
O U T A 0
O U T B 3
O U T B 2
O U T B 1
O U T B 0
去 8 0 C 5 1
R L 2
R L 1
R L 0
234567
1 81 9
2 0
2 1
2 2
2 3
2 6
2 7
2 82 93 03 1
R L 3
0
1
1 6
1 7
2 4
Y 0
Y 7
C
B
A
G 2 A
G 2 B
7 4 L S 1 3 8
S L 2
S L 1
S L 0
2 5
1 01 1
1 2
1 3
1 4
1 5
8
9
S H I F T
C N T L
67
初始化程序如下:
INIT:MOV DPTR,#7FFFH ;置 8279命令 /状态口地址
MOV A,#0D1H ;置清显示命令字
MOVX @DPTR,A ;送清显示命令
WEIT:MOVX A,@DPTR ;读状态
JB ACC.7,WEIT ;等待清显示 RAM结束
MOV A,#34H ;置分频系数,晶振 12MHz
MOVX @DPTR,A ;送分频系数
MOV A,#00H ;置键盘 /显示命令
MOVX @DPTR,A ;送键盘 /显示命令
MOV IE,#84H ;允许 8279中断
RET
68
显示子程序如下:
DIS:MOV DPTR,#7FFFH ;置 8279命令 /状态口地址
MOV R0,#30H ;字段码首地址
MOV R7,#08H ; 8位显示
MOV A,#90H ;置显示命令字
MOVX @DPTR,A ;送显示命令
MOV DPTR,#7FFEH ;置数据口地址
LP:MOV A,@R0 ;取显示数据
ADD A,#6 ;加偏移量
MOVC A,@A+ PC ;查表,取得数据的段码
MOVX @DPTR,A ;送段码显示
INC R0 ;调整数据指针
DJNZ R7,LP ;
RET
69
SEG:DB 3FH,06H,5BH,4FH,66H,6DH;字符 0,1,2,3,4,5段码
DB 7DH,07H,7EH,6FH,77H,7CH;字符 6,7,8,9,A,b段码
DB 39H,5EH,79H,71H,73H,3EH;字符 C,d,E,F,P,U段码
DB 76H,38H,40H,6EH,FFH,00H;字符 H,L,-,Y、日、“空”段码
70
键盘中断子程序如下:
KEY:PUSH PSW
PUSH DPL
PUSH DPH
PUSH ACC
PUSH B
SETB PSW.3
MOV DPTR,#7FFFH ;置状态口地址
MOVX A,@DPTR ;读 FIFO状态
ANL A,#0FH ;
JZ PKYR ;
MOV A,#40H ;置读 FIFO命令
MOVX @DPTR,A ;送读 FIFO命令
MOV DPTR,#7FFEH ;置数据口地址
MOVX A,@DPTR ;读数据
LJMP KEY1 ;转键值处理程序
PKYR,POP B
POP ACC
POP DPH
POP DPL
POP PSW
RETI ;
KEY1,… … ;键值处理程序
71
三、串行口键盘及显示接口电路
8 0 C 5 1
RXD
74LS164
&
Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7
A
+5V
a
b
c
d
e
f
g
dp
a
b
c
d
e
f
g
dp
TXD
B
CP
7
4
L
S
1
6
4
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
A
B
CP
A
B
CP
7
4
L
S
1
6
4
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
P1.2
1K× 8
1K× 8
+5V
P1.1
P1.0
0 1 2 3 4 5 6 7
F E D C B A 9 8
72
思考题与习题
1、试以 80C31为主机,用 2片 2764 EPROM扩展 16K ROM,画出硬件接线
图。
2、设计扩展 2KB RAM和 4KB EPROM的电路图。
3、当单片机应用系统中数据存储器 RAM地址和程序存储器 EPROM地址重
叠时,是否会发生数据冲突,为什么?
4,80C51单片机在应用中 P0和 P2是否可以直接作为输入 /输出连接开关、
指示灯等外围设备?
5、七段 LED显示器有动态和静态两种显示方式,这两种显示方式要求
80C51系列单片机如何安排接口电路?
6、设计 80C51键盘显示接口,采用中断扫描方式扩展 3× 6共 18个键分别为
0~9,A~F,RUN和 RESET键,具体要求如下:
a、按下 RESET键后,单片机复位。
b、按下 RUN键后,系统进入地址为 2000H的用户程序。
c、按下 0~9,A~F键后,键值存入内部 RAM,首地址为 40H。
试画出接口电路的硬件连接图并编写相应程序。
7、试编写图 7-27所示接口电路的实现程序
第 7章 80C51的系统扩展
7.1 存储器的扩展
7.2 输入 /输出及其控制方式
7.3 并行接口的扩展
7.4 8279接口芯片
7.5 显示器及键盘接口
2
7.1 存储器的扩展
7.1.1 程序存储器的扩展
一、扩展总线
3
74LS373是有输出三态门的电平允许 8D锁存器 。 当 G
( 使能端 ) 为高电平时, 锁存器的数据输出端 Q的状态与
数据输入端 D相同 ( 透明的 ) 。 当 G端从高电平返回到低电
平时 ( 下降沿后 ), 输入端的数据就被锁存在锁存器中,
数据输入端 D的变化不再影响 Q端输出 。
G Q
D
G
D
D
D
Q
Q
Q
O E
:
:
:
G Q
D
G Q
D
7
4
L
S
3
7
3
O E
G
A L E
8 0 C 3 1
D 7
:
:
D 0
Q 7
:
:
Q 0
P 2
P 0
A B
D B
4
二、片外 ROM操作时序
进行 ROM的扩展,其扩展方法较为简单容易,这
是由单片机的优良扩展性能决定的。单片机的地址
总线为 16位,扩展的片外 ROM的最大容量为 64KB,
地址为 0000H~ FFFFH。扩展的片外 RAM的最大容
量也为 64KB,地址为 0000H~ FFFFH。
?由于 80C51采用不同的控制信号和指令, 尽管
ROM与 RAM的 地址 是重叠 的,也不会发生混乱。
?80C51对 片内和片外 ROM的访问 使用相同的指令,
两者的选择是由硬件实现的。
芯片选择现在 多采用线选法,地址译码法用的渐少。
ROM与 RAM共享数据总线和地址总线。
5
访问片外 ROM的时序,
S 1 S 2 S 3 S 4 S 5 S 6 S 1 S 2 S 3 S 4 S 5 S 6 S 1 S 2
输 出 P C H
输 出 P C H 输 出 P C H 输 出 P C H
P C L P C L P C L P C L P C L
第 1 个 机 器 周 期 第 2 个 机 器 周 期
A L E
P S E N
P 2 口
P 0 口 指 令
指 令
指 令
指 令
80C51系列单片机的 CPU在访问片外 ROM的一个机器周期内,
信号 ALE出现两次(正脉冲),ROM选通信号也两次有效,
这说明 在一个机器周期内,CPU两次访问片外 ROM,也即在
一个机器周期内可以处理两个字节的指令代码,所以在
80C51系列单片机指令系统中有很多单周期双字节指令。
6
三,ROM芯片及扩展方法
1,EPROM存储器及扩展
常用的 EPROM芯片有 2732,2764,27128,27256、
27512等 。
1
2
3
4
5
6
7
8
9
1 0
1 1
1 2
1 3
1 4
2 8
2 7
2 6
2 5
2 4
2 3
2 2
2 1
2 0
1 9
1 8
1 7
1 6
1 5
2 7 6 4
2 7 1 2 8
2 7 2 5 6
2 7 5 1 2
2 7 6 4
V c c
P G M
N C
A 8
A 9
A 1 1
O E
A 1 0
C E
Q 7
Q 6
Q 5
Q 4
Q 3
2 7 1 2 8
V c c
P G M
A 1 3
A 8
A 9
A 1 1
O E
A 1 0
C E
Q 7
Q 6
Q 5
Q 4
Q 3
2 7 2 5 6
V c c
A 1 4
A 1 3
A 8
A 9
A 1 1
O E
A 1 0
C E
Q 7
Q 6
Q 5
Q 4
Q 3
2 7 5 1 2
V c c
A 1 4
A 1 3
A 8
A 9
A 1 1
O E /V p p
A 1 0
C E
Q 7
Q 6
Q 5
Q 4
Q 3
2 7 6 4
V p p
A 1 2
A 7
A 6
A 4
A 4
A 3
A 2
A 1
A 0
Q 0
Q 1
Q 2
G N D
2 7 2 5 6
V p p
A 1 2
A 7
A 6
A 4
A 4
A 3
A 2
A 1
A 0
Q 0
Q 1
Q 2
G N D
2 7 1 2 8
V p p
A 1 2
A 7
A 6
A 4
A 4
A 3
A 2
A 1
A 0
Q 0
Q 1
Q 2
G N D
2 7 5 1 2
A 1 5
A 1 2
A 7
A 6
A 4
A 4
A 3
A 2
A 1
A 0
Q 0
Q 1
Q 2
G N D
7
EPROM存储器扩展电路:
O E
2 7 6 4 A
A 7
:
:
A 0
A 8 - A 1 2
C E
D 0 ~ D 7
7
4
L
S
3
7
3
O E
G
A L E
8 0 C 3 1
D 7
:
:
D 0
Q 7
:
:
Q 0
P S E N
E A
P 2, 0 - P 2, 4
P 0
8
2,EEPROM存储器及扩展
常用的 EEPROM芯片有 2864,2817等 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
28
27
26
25
24
23
22
21
20
19
18
17
16
15
2864A
Vcc
WE
NC
A8
A9
A11
OE
A10
CE
I/O7
I/O6
I/O5
I/O4
I/O3
NC
A12
A7
A6
A5
A4
A3
A2
A1
A0
I/O0
I/O1
I/O2
GND
1
2
3
4
5
6
7
8
9
10
11
12
13
14
28
27
26
25
24
23
22
21
20
19
18
17
16
15
2817A
Vcc
WE
NC
A8
A9
A11
OE
A10
CE
I/O7
I/O6
I/O5
I/O4
I/O3
RDY/BUSY
A12
A7
A6
A5
A4
A3
A2
A1
A0
I/O0
I/O1
I/O2
GND
9
7.1.2 数据存储器的扩展
一,RAM扩展原理
扩展 RAM和扩展 ROM类似,由 P2口提供高 8位地址,P0口分时
地作为低 8位地址线和 8位双向数据总线。 外部 RAM读时序为,
S 1 S 2 S 3 S 4 S 5 S 6 S 1 S 2 S 3 S 4 S 5 S 6 S 1 S 2
输 出 P C H
输 出 D P H
P C L
D P L
第 1 个 机 器 周 期 第 2 个 机 器 周 期
A L E
P S E N
P 2 口
P 0 口
指 令 数 据 入
输 出 P C H
P C L
指 令
R D
10
外部 RAM写 时序为:S 1 S 2 S 3 S 4 S 5 S 6 S 1 S 2 S 3 S 4 S 5 S 6 S 1 S 2
输 出 P C H
输 出 D P H
PCL
DPL
第 1 个 机 器 周 期 第 2 个 机 器 周 期
ALE
PSEN
P 2 口
P 0 口
指 令 数 据 出
输 出 P C H
PCL
指 令
WR
11
二,RAM扩展方法
1、数据存储器
常用的数据存储器 SRAM芯片有 6116﹑ 6264﹑ 62256等。
1
2
3
4
5
6
7
8
9
1 0
1 1
1 2
1 3
1 4
2 8
2 7
2 6
2 5
2 4
2 3
2 2
2 1
2 0
1 9
1 8
1 7
1 6
1 5
6 2 6 4
V c c
W E
C S
A 8
A 9
A 1 1
O E
A 1 0
C E
D 7
D 6
D 5
D 4
D 3
N C
A 1 2
A 7
A 6
A 4
A 4
A 3
A 2
A 1
A 0
D 0
D 1
D 2
G N D
N C
A 1 2
A 7
A 6
A 4
A 4
A 3
A 2
A 1
A 0
D 0
D 1
D 2
G N D
A 1 4
A 1 2
A 7
A 6
A 4
A 4
A 3
A 2
A 1
A 0
D 0
D 1
D 2
G N D
V c c
W E
A 1 3
A 8
A 9
A 1 1
O E
A 1 0
C E
D 7
D 6
D 5
D 4
D 3
V c c
W E
A 1 3
A 8
A 9
A 1 1
O E / R F S H
A 1 0
C E
D 7
D 6
D 5
D 4
D 3
6 2 2 5 6 6 2 1 2 8 6 2 6 4 6 2 6 6 6 2 1 2 8 6 2 2 5 6
1
2
3
4
5
6
7
8
9
1 0
1 1
1 2
2 4
2 3
2 2
2 1
2 0
1 9
1 8
1 7
1 6
1 5
1 4
1 3
6 1 1 6
6 2 1 2 8
6 2 2 5 6
A 7
A 6
A 4
A 4
A 3
A 2
A 1
A 0
D 0
D 1
D 2
G N D
V c c
A 8
A 9
W E
O E
A 1 0
C E
D 7
D 6
D 5
D 4
D 3
6 1 1 6
12
2、数据存储器扩展电路
O E
6 2 6 4
A 7
:
:
A 0
A 8 - A 1 2
D 0 ~ D 7
7
4
L
S
3
7
3
O E
G
A L E
8 0 C 3 1
D 7
:
:
D 0
Q 7
:
:
Q 0
R D
E A
P 2, 0 - P 2, 4
P 0
C S
+ 5 V
W E
W R
P 2, 7
C E
13
7.2 输入 /输出及其控制方式
? 原始数据或现场信息要利用输入设备输入到单片
机中,单片机对输入的数据进行处理加工后,还
要输出给输出设备。常用的输入设备有键盘、开
关及各种传感器等,常用的输出设备有 LED(或
LCD)显示器、微型打印机及各种执行机构等。
? 80C51单片机内部有四个并行口和一个串行口,
对于简单的 I/O设备可以直接连接。当系统较为复
杂时,往往要借助 I/O接口电路(简称 I/O接口)
完成单片机与 I/O设备的连接。现在,许多 I/O接
口已经系列化、标准化,并具有可编程功能。
14
单片机与 I/O设备的关系:
7.2.1 输入 /输出接口的功能
7
4
L
S
3
7
3
O E
G
A L E
8 0 C 5 1
D 7
:
:
D 0
Q 7
:
:
Q 0
P 2
P 0
I N T X
R D,W R
2
2
数 据 端 口
状 态 端 口
控 制 端 口
I / O 接 口
I / O 设 备
控 制 信 号
状 态 信 号
数 据
15
I/O接口的功能是:
1、对单片机输出的数据锁存
锁存数据线上瞬间出现的数据,以解决单片机与 I/O设备的
速度协调问题。
2、对输入设备的三态缓冲
外设传送数据时要占用总线,不传送数据时必须对总线呈
高阻状态。利用 I/O接口的三态缓冲功能,可以 实现 I/O设备与
数据总线的隔离,便于其它设备的总线挂接。
3、信号转换
信号类型(数字与模拟、电流与电压)、信号电平(高与
低、正与负)、信号格式(并行与串行)等的转换。
4、时序协调
不同的 I/O设备定时与控制逻辑是不同的,并与 CPU的时序
往往是不一致的,这就需要 I/O接口进行时序的协调。
16
一、无条件传送
适用于对 简单的 I/O设备 (如开关,LED显示器、继电
器等)的操作,或者 I/O设备的定时固定或已知的场合。
二、查询状态传送
效率低 。
三、中断传送方式
效率大大提高 。
四、直接存储器存取( DMA)方式
适于 高速外设以及成组交换数据 的场合 。
7.2.2 单片机与 I/O设备的数据传送方式
17
7.3 并行接口的扩展
7.3.1 并行输入 /输出口的简单扩展
A L E
8 0 C 3 1
R D
P 0
W R
P 2, 7
7
4
L
S
2
7
3
≥ 1
C P
Q 1
Q 2
Q 3
Q 4
Q 5
Q 6
Q 7
Q 8
C L R
D 1
D 2
D 3
D 4
D 5
D 6
D 7
D 8
≥ 1
7
4
L
S
2
4
4
1 G
1 A 1
1 A 2
1 A 3
1 A 4
2 A 1
2 A 2
2 A 3
2 A 4
2 G
1 Y 1
1 Y 2
1 Y 3
1 Y 4
2 Y 1
2 Y 2
2 Y 3
2 Y 4
+ 5 V
18
7.3.2 可编程接口 8155的扩展
一,8155的引脚及结构
1
2
3
4
5
6
7
8
9
1 0
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
2 0
4 0
3 9
3 8
3 7
3 6
3 5
3 4
3 3
3 2
3 1
3 0
2 9
2 8
2 7
2 6
2 5
2 4
2 3
2 2
2 1
P C 3
P C 4
T I M E R I N
R E S E T
P C 5
T I M E R O U T
I O / M
C E
R D
W R
A L E
A D 0
A D 1
A D 2
A D 3
A D 4
A D 5
A D 6
A D 7
G N D
V C C
P C 2
P C 1
P C 0
P B 7
P B 6
P B 5
P B 4
P B 3
P B 2
P B 1
P B 0
P A 7
P A 6
P A 5
P A 4
P A 3
P A 2
P A 1
P A 0
8
1
5
5
2 5 6 × 8
静 态 R A M
计 数 器
A
B
C
A D 0 ~ A D 7
I O / M
C E
R D
W R
R E S E T
A L E
T I M E R I N
T I M E R O U T
V C C
G N D
P A 0 ~ P A 7
P B 0 ~ P B 7
P C 0 ~ P C 5
命 令 / 状 态
寄 存 器
19
二,8155的内部编址
内部 RAM地址为,00H~ FFH。
内部端口地址为,000-----------命令 /状态寄存器
001-----------A口
010-----------B口
011-----------C口
100-----------计数器低 8位
101-----------计数器高 6位及计数
器方式设置位
20
三、工作方式设置及状态字格式
1、方式设置
8155的工作方式设置通过将命令字写入命令寄存器实现。
PA,A口数据传送方向设置位。 0--输入; 1--输出。
PB,B口数据传送方向设置位。 0--输入; 1--输出。
PC1,PC2,C口工作方式设置位。
21
IEA,A口的中断允许设置位。 0--禁止; 1--允许。
IEB,B口的中断允许设置位。 0--禁止; 1--允许。
TM2,TM1:计数器工作方式设置位。
22
2、状态字格式
8155的状态寄存器由 8位锁存器组成,其最高位为任意值。
通过读 C/S寄存器的操作 (即用输入指令 ),读出的是状态寄存
器的内容。
?INTRX:中断请求标志。此处 X表示 A或 B。 INTRX =1,表示 A或 B口有
中断请求; INTRX=0,表示 A或 B口无中断请求。
?BFX:口缓冲器空 /满标志。 BFX=1,表示口缓冲器已装满数据,可由
外设或单片机取走; BFX=0,表示口缓冲器为空,可以接受外设或单片
机发送数据。
?INTEX:口中断允许 /禁止标志。 INTEX=1,表示允许口中断;
INTEX=0,表示禁止口中断。
?TIMER:计数器计满标志。 TIMER=1,表示计数器的原计数初值已计
满回零; TIMER=0,表示计数器尚未计满。
23
四、计数器输出模式
计数器是一个 14位的减法计数器,它能对输入的脉冲进行计数,
在到达最后一个计数值时,输出一个矩形波或脉冲。
装入计数长度寄存器的值为 2H~3FFFH。 15,14两位用于规定
计数器的输出方式 。
24
五、选通 I/O的组态
对 8155命令字的 PC2﹑ PC1位编程,使 A或 B口工作在选通方
式时,C口的 PC0~ PC5就被定义 为 A或 B口选通 I/O方式的应
答和控制线。
25
选通方式的组态逻辑,
R D
W R
P A 0 ~ P A 7
P B 0 ~ P B 7
P C 0
P C 1
P C 2
P C 3
P C 4
P C 5
A
B
I N T E A
&
I N T E B
&
A D 0 ~ A D 7
I N T R A
I N T R B
B F B
S T B B
S T B A
B F A
26
六,8155芯片与单片机的接口
80C51系列单片机可以与 8155直接连接而不需要附加任何电路。
使系统增加 256字节的 RAM,22位 I/O线及一个计数器。
A L E
8 0 C 3 1
R D
P 0
W R
P 2, 7
A D 0 ~ A D 7
P 2, 0
R D
W R
A L E
I O / M
C E
8 1 5 5
E A
R E S E T R E S E T
B
A
C
T I M E I N
T I M E O U T
27
8155中 RAM地址 因 P2.7( A15) =0 及 P2.0( A8)
=0,故可选为 01111110 00000000B( 7E00H) ~
01111110 11111111B( 7EFFH);
I/O端口的地址 为,7F00H~7F05H。
28
若 A口,B口定义为基本输入方式,计数器作为方波发
生器,对 80C31输入脉冲进行 24分频(但需要注意 8155
的计数最高频率约为 4MHZ),则 8155 I/O口初始化程
序如下:
START,MOV DPTR,#7F04H ;指向计数寄存器低 8位
MOV A,#18H ;设计数器初值 #18H( 24D)
MOVX @DPTR,A ;计数器寄存器低 8位赋值
INC DPTR ;指向计数器寄存器高 6位及方式位
MOV A,#40H ;计数器为连续方波方式
MOVX @DPTR,A ;计数寄存器高 6位赋值
MOV DPTR,#7F00H ;指向命令寄存器
MOV A,#0C2H ;设命令字
MOVX @DPTR,A ;送命令字
29
7.4 8279接口芯片
?由 80C51系列单片机构成的小型测控系统或智能仪
表中,常常需要扩展显示器和键盘以实现人机对话
功能。 8279芯片在扩展显示器和键盘时功能强、使
用方便。
?8279是 Intel公司为 8位微处理器设计的通用键盘 /
显示器接口芯片,其 功能是:接收来自键盘的输入
数据并作预处理;完成数据显示的管理和数据显示
器的控制 。单片机应用系统采用 8279管理键盘和显
示器,软件 编程极为简单,显示稳定,且减少了主
机的负担 。
30
7.4.1 8279的结构
数 据
缓 冲 器
I/O控 制
FIFO/传
感 器 RAM
状 态
控 制 及 定
时 寄 存 器
8× 8FIFO
/传 感 器
RAM
键 盘 消 抖
及 控 制
定 时
及 控 制
扫 描
计 数 器
回 送
缓 冲 器
显 示 地 址
寄 存 器
16× 8
显 示 RAM
显 示
寄 存 器
RESETCLK DB0~ DB7
WR
RD
CS A0 IRQ
SL0~ SL3BD
OUTA0~ OUTA3
OUTB0~ OUTB3
RL0~ SL7
CNTL/STB
SHIFT
显 示 输 出
键 盘 输 入
扫 描 输 出
至 CPU
内 部 数 据 总 线
31
?数据缓冲器 将双向三态 8位内部数据总线 D0~D7与
系统总线相连,用于传送 CPU与 8279之间的命令和
状态。
?控制和定时寄存器 用于寄存键盘和显示器的工作方
式,锁存操作命令,通过译码器产生相应的控制信
号,使 8279的各个部件完成相应的控制功能。
?定时器 包含一些计数器,其中有一个可编程的 5位
计数器(计数值在 2~ 31间),对 CLK输入的时钟
信号进行分频,产生 100 KHz的内部定时信号 (此
时扫描时间为 5.1ms,消抖时间为 10.3ms)。外部
输入时钟信号周期不小于 500ns。
32
?扫描计数器 有两种输出方式,一是编码方式,计数
器以二进制方式计数,4位计数状态从扫描线 SL3~SL0 输
出,经外部译码器可以产生 16位的键盘和显示器扫描信号;
另一种是译码方式,扫描计数器的低两位经内部译码后从
SL3~SL0 输出,直接作为键盘和显示器的扫描信号。
?回送缓冲器、键盘消抖及控制 完成对键盘的自动
扫描以搜索闭合键,锁存 RL7~RL0的键输入信息,
消除键的抖动,将键输入数据写入内部先进先出存
储器( FIFO RAM)。 RL7~RL0为回送信号线作为键
盘的检测输入线,由回送缓冲器缓冲并锁存,当某一键闭
合时,附加的移位状态 SHIFT、控制状态 CNTL及扫描码和
回送信号拼装成一个字节的“键盘数据”送入 8279内部的
FIFO(先进先出) RAM。
33
键盘的数据格式为,
在传感器矩阵方式和选通方式时,回送线 RL7~RL0的内
容被直接送往相应的 FIFO RAM。输入数据即为
RL7~RL0。数据格式为,
34
FIFO/传感器 RAM是具有双功能的 8× 8 RAM
?在键盘或选通方式时,它作为 FIFO RAM,依
先进先出的规则输入或读出,其状态存放在
FIFO/传感器 RAM状态寄存器中。只要 FIFO
RAM不空,状态逻辑将置中断请求 IRQ=1;
?在传感器矩阵方式,作为传感器 RAM,当检
测出传感器矩阵的开关状态发生变化时,中断
请求信号 IRQ=1。在外部译码扫描方式时,可
对 8× 8矩阵开关的状态进行扫描,在内部译码
扫描方式时,可对 4× 8矩阵开关的状态进行扫
描。
35
显示 RAM用来存储显示数据,容量是 16× 8位
?在显示过程中,存储的显示数据轮流从显示寄
存器输出。显示寄存器输出分成两组,即
OUTA0~OUTA3和 OUTB0~OUTB3,两组可以
单独送数,也可以组成一个 8位的字节输出,该
输出与位选扫描线 SL0~SL3配合就可以实现动态
扫描显示。
?显示地址寄存器用来寄存 CPU读 /写显示 RAM的
地址,可以设置为每次读出或写入后自动递增。
36
7.4.2 8279的引脚定义
DB7~DB0为双向外部数据总线 ;
为片选信号线,低电平有效;
和 为读和写选通信号线;
IRQ为中断请求输出线。
RL7~RL0为键盘回送线。
SL3~SL0为扫描输出线。
OUTB3~OUTB0,OUTA3~OUTA0
为显示寄存器数据输出线。
RESET为复位输入线。
SHIFT为换档键输入线。
CNTL/STB为控制 /选通输入线。
CLK为外部时钟输入线。
为显示器消隐控制线 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
RL2
RL3
CLK
IRQ
RL4
RL5
RL6
RL7
RESET
RD
WR
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7
GND
V CC
RL1
RL0
CNTL/STB
SHIFT
SL3
SL2
SL1
SL0
OUTB0
OUTB1
OUTB2
OUTB3
OUTA0
OUTA1
OUTA2
OUTA3
BD
CS
A0
8
2
7
9
CS
RD WR
BD
37
7.4.3
8279的
操作命
令
38
一、显示器和键盘方式设置命令
D7 D6 D5=000 是键盘 /显示方式命令特征字。
D4 D3=DD 为显示器方式设置位。
D2 D1 D0 =KKK 为键盘工作方式设置位。
8279 可外接 8位或 16位 LED 显示器,显示器的每
一位对应一个 8位的显示器缓冲单元。 左端输入 方
式较为简单,显示缓冲器 RAM地址 0~15分别对应
于显示器的 0位 (左 )~15位 (右 )。 CPU依次从 0地址
或某一地址开始将段数据写入显示缓冲器。 右端输
入方式 是移位,输入数据总是写入右端的显示缓冲
器,数据写入显示缓冲器后,原来缓冲器的内容左
移一个字节。
39
?内部译码 的扫描方式时,扫描信号由
SL3~SL0输出,仅能提供 4选 1扫描线。
?外部译码 工作方式时,内部计数器作二进制
计数,4位二进制计数器的计数状态从扫描线
SL3~SL0输出,并在外部进行译码。可为键
盘 /显示器提供 16选 1扫描线。
?双键互锁 工作方式时,键盘中同时有两个以
上的键被按下,任何一个键的编码信息均不能
进入 FIFO RAM,直至仅剩下一个键闭合时,
该键的编码信息方能进入 FIFO RAM。
40
?N键轮回 工作方式时,如有多个键按下,键盘
扫描能够根据发现它们的顺序,依次将它们的
状态送入 FIFO RAM。
?传感器矩阵 工作方式,是指片内的去抖动逻
辑被禁止掉,传感器的开关状态直接输入到
FIFO RAM中。因此,传感器开关的闭合或断
开均可使 IRQ马上为 1,向 CPU快速申请中断。
41
二、时钟编程命令
D7D6D5=001 为时钟编程命令特征位。
8279的内部定时信号是由外部输入时钟经分
频后产生的,分频系数由时钟编程命令确定。
D4~D0 用来设定对 CLK端输入时钟的分频次
数 N,N=2~31。利用这条命令,可以将来自
CLK引脚的外部输入时钟分频,以取得
100KHz的内部时钟信号。例如 CLK输入时钟
频率为 2MHz,获得 100KHz的内部时钟信号,
则需要 20分频。
42
三、读 FIFO /传感器 RAM命令
D7D6D5=010 为该命令的特征位。
D2~D0( AAA)为起始地址。 D4( AI)为多
次读出时的地址自动增量标志,D3无用。在键
扫描方式中,AIAAA均被忽略,CPU总是按先
进先出的规律读键输入数据,直至输入键全部
读出为止。在传感器矩阵方式中,若 AI=1,则
CPU从起始地址开始依次读出,每读出一个数
据地址自动加 1; AI=0,CPU仅读出一个单元
的内容。
43
四、读显示 RAM命令
D7D6D5=011为该命令的特征位。
D3~D0( AAAA)用来寻址显示 RAM的 16个存
储单元,AI为自动增量标志,若 AI=1,则每次
读出后地址自动加 1。
五、写显示 RAM命令
D7 D6 D5=100为该命令的特征位。
D4( AI)为自动增量标志,D3~D0( AAAA)
为起始地址,数据写入按左端输入或右端输入
方式操作。若 AI=1,则每次写入后地址自动加
1,直至所有显示 RAM全部写完 。
44
六,显示器写禁止 /消隐命令
D7 D6 D5=101为该命令的特征位。该命令
用以禁止写 A组和 B组显示 RAM。
在双 4位显示器使用时,即
OUTA3~OUTA0和 OUTB3~OUTB0独立地
作为两个半字节输出时,可改写显示 RAM
中的低半字节而不影响高半字节的状态,
反之亦可改写高半字节而不影响低半字节。
D1,D0位是消隐显示器特征位,要消隐两
组显示器,必须使之同时为 1,为 0时则恢
复显示。
45
七、清除命令
D7 D6 D5=110为该命令的特征位。 CPU将清除命
令写入 8279,使显示缓冲器呈初态(暗码),该
命令同时也能清除输入标志和中断请求标志。
D4 D3 D2( CDCDCD)用来设定清除显示 RAM的
方式。
D1( CF) =1为清除 FIFO RAM的状态标志,FIFO
RAM被置成空状态(无数据),并复位中断请求
线 IRQ时,传感器 RAM的读出地址也被置成 0。
D0( CA)是总清的特征位,它兼有 CD和 CF 的联
合效用。当 CA =1时,对显示 RAM的清除方式仍
由 D3﹑ D2编码确定。
46
八、结束中断 /错误方式设置命令
D7 D6 D5=101为该命令的特征位。此命令用来
结束传感器 RAM的中断请求。
D4( E) =0 为结束中断命令。在传感器工作方式
中使用。每当传感器状态出现变化时,扫描检测
电路就将其状态写入传感器 RAM,并启动中断逻
辑使 IRQ变高,向 CPU请求中断,并且禁止写入
传感器 RAM。此时,若传感器 RAM读出地址的
自动增量特征位未设置( AI=0),则中断请求
IRQ在 CPU第一次从传感器 RAM读出数据时就被
清除。若 AI=1,则 CPU对传感器 RAM读出并不
能清除 IRQ,而必须通过给 8279写入结束中断 /设
置出错方式命令才能使 IRQ变低。
47
D4( E) =1 为特定错误方式命令。在 8279
已被设定为键盘扫描 N键轮回方式后,如果
CPU给 8279又写入结束中断 /错误方式命令
( E=1),则 8279将以一种特定的错误方
式工作。这种方式的特点是:在 8279消抖
周期内,如果发现多个按键同时按下,则
FIFO状态字中的错误特征位 S/E将置 1,并
产生中断请求信号和阻止写入 FIFO RAM。
48
7.5 显示器及键盘接口
7.5.1,七段显示器的原理
一、七段显示器的原理
a
b
c
d
e
f
g
d p
c o m
a b
f
g
c o m
c
d p
d
e
c o m
ab
fg
c
d p
d
e
c o m
ab
fg
c
d p
d
e
49
二、显示方式及接口
1、静态显示
8 0 C 5 1
P 0
W R
P 2, 7 P 2, 6 P 2, 5
7
4
L
S
3
7
3
≥ 1
G
Q 1
Q 2
Q 3
Q 4
Q 5
Q 6
Q 7
Q 8
D 1
D 2
D 3
D 4
D 5
D 6
D 7
D 8
+ 5 V
1
a
b
c
d
e
f
g
d p
7
4
L
S
3
7
3
G
Q 1
Q 2
Q 3
Q 4
Q 5
Q 6
Q 7
Q 8
D 1
D 2
D 3
D 4
D 5
D 6
D 7
D 8
+ 5 V
a
b
c
d
e
f
g
d p
7
4
L
S
3
7
3
G
Q 1
Q 2
Q 3
Q 4
Q 5
Q 6
Q 7
Q 8
D 1
D 2
D 3
D 4
D 5
D 6
D 7
D 8
a
b
c
d
e
f
g
d p
≥ 1
1
≥ 1
1
7 4 L S 1 3 8
C B A
Y 0
Y 1
Y 2
+ 5 V并
行
输
出:
50
串
行
输
出:
80C51
RXD
7
4
L
S
1
6
4
&
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
A
+5V
a
b
c
d
e
f
g
dp
+5V
a
b
c
d
e
f
g
dp
a
b
c
d
e
f
g
dp
TXD
B
CP
7
4
L
S
1
6
4
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
A
B
CP
A
B
CP
7
4
L
S
1
6
4
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
P1.0
1K× 8
1K× 8
1K× 8
+5V
51
2、动态显示
8 1 5 5
P B 7
共 阴 极
L E D
abc
de
f
g
d p
+ 5 V
1 0 0 Ω × 8
7 4 0 7 × 2
7 4 0 6
P B 6
P B 5
P B 4
P B 3
P B 2
P B 1
P B 0
P A 5
P A 4
P A 3
P A 2
P A 1
P A 0
去 8 0 C 5 1
52
DIS,MOV R0,#79H ;显示数据缓冲区首地址送 R0
MOV R3,#01H ;使显示器最右边位亮
MOV A,R3 ;
LD0,MOV DPTR,#7F01H ;数据指针指向 A口
MOVX @DPTR,A ;送扫描值
INC DPTR ;数据指针指向 B口
MOV A,@R0 ;取欲显示的数据
ADD A,#0DH ;加上偏移量
MOVC A,@A+PC ;取出字型码
MOVX @DPTR,A ;送显示
ACALL DL1 ;调用延时子程序
INC R0 ;指向下一个显示段数据地址
MOV A,R3 ;
JB ACC.5,ELD1 ;扫描到第六个显示器否?
RL A ;未到,扫描码左移 1位
MOV R3,A
AJMP LD0
ELD1,RET
53
DSEG,DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH,77H,7CH
DB 39H,5EH,79H,71H,40H,00H
DL1,MOV R7,#02H ;延时 1ms子程序
DL,MOV R6,#0FFH
DL6,DJNZ R6,DL6
DJNZ R7,DL
RET
54
7.5.2 键盘及其接口
按键在闭合和断开时,触点会存在抖动现象:
按 下 抖 动
释 放 抖 动
理 想 波 形
实 际 波 形
稳 定 闭 合
+ 5 V
+ 5 V
A
B
无 抖 动
有 抖 动
55
一,独立式按键及其接口
芯片内有上拉电阻 芯片内无上拉电阻
8 0 C 5 1
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
7 4 L S 3 7 3
D1
D2
D3
D4
D5
D6
D7
D8
+5V
Q1
Q2
Q3
Q4
Q5
Q6
Q7
Q8
0
1
2
3
4
5
6
7
56
随机扫描程序(也可以用定时扫描或中断扫描)如下:
SMKEY,ORL P1,#0FFH ;置 P1口为输入方式
MOV A,P1 ;读 P1口信息
JNB ACC.0,P0F ; 0号键按下,转 0号键处理
JNB ACC.1,P1F ; 1号键按下,转 1号键处理
… …
JNB ACC.7,P7F ; 7号键按下,转 7号键处理
LJMP SMKEY
P0F,LJMP PROG0
P1F,LJMP PROG1
… …
P7F,LJMP PROG7
PROG0,… …
LJMP SMKEY
PROG1,… …
LJMP SMKEY
… …
PROG7,… …
LJMP SMKEY
57
二、矩阵式键盘及其接口
8 0 C 5 1
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
8 1 5 5
PC0
PC1
PC2
PC3
PA0
PA1
PA2
PA3
+5V
PA4
PA5
PA6
PA7
X0
X1
X2
X3
Y0 Y1 Y2 Y3
5.1K× 4
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
判有无键按下;
判按下的是哪一键;
键处理。
58
SMKEY,MOV P1,#0FH ;置 P1口高 4位为,0”、低 4位为输入状
态
MOV A,P1 ;读 P1口
ANL A,# 0FH ;屏蔽高 4位
CJNE A,# 0FH,HKEY ;有键按下,转 HKEY
SJMP SMKEY ;无键按下转回
HKEY,LCALL DELAY10 ;延时 10ms,去抖
MOV A,P1 ;
ANL A,# 0FH ;
CJNE A,# 0FH,WKEY ;确认有键按下,转判哪一键按下
SJMP SMKEY ; 是抖动转回
WKEY,MOV P1,# 1110 1111B ;置扫描码,检测 P1.4列
MOV A,P1 ;
ANL A,# 0FH ;
CJNE A,# 0FH,PKEY ; P1.4列( Y0)有键按下,转键处理
59
MOV P1,# 1101 1111B ;置扫描码,检测 P1.5列
MOV A,P1 ;
ANL A,# 0FH ;
CJNE A,# 0FH,PKEY ; P1.5列( Y1)有键按下,转键处理
MOV P1,# 1011 1111B ;置扫描码,检测 P1.6列
MOV A,P1 ;
ANL A,# 0FH ;
CJNE A,# 0FH,PKEY ; P1.6列( Y2)有键按下,转键处理
MOV P1,# 0111 1111B ;置扫描,检测 P1.7列
MOV A,P1 ;
ANL A,# 0FH ;
CJNE A,# 0FH,PKEY ; P1.7列( Y3)有键按下,转键处理
LJMP SMKEY ;
PKEY,… … ;键处理
60
线反转法示例程序,
SMKEY,MOV P1,#0FH ;置 P1口高 4位为,0”、低 4位为输入状态
MOV A,P1 ;读 P1口
ANL A,# 0FH ;屏蔽高 4位
CJNE A,# 0FH,HKEY ;有键按下,转 HKEY
SJMP SMKEY ;无键按下转回
HKEY,LCALL DELAY10 ;延时 10ms,去抖
MOV A,P1 ;
ANL A,# 0FH ;
MOV B,A ;行线状态在 B的低 4位
CJNE A,# 0FH,WKEY ;确认有键按下,转判哪一键按下
SJMP SMKEY ; 是抖动转回
WKEY,MOV P1,# 0F0H ;置 P1口高 4位为输入、低 4位为,0”
MOV A,P1 ;
ANL A,# 0F0H ;屏蔽低 4位
ORL A,B ;列线状态在高 4位,与行线状态合成于 B中
… … ;键处理
61
?键处理 。键处理是根据所按键散转进入相应的功能
程序。为了散转的方便,通常应先得到按下键的键
号。键号是键盘的每个键的编号,可以是 10进制或
16进制。键号一般通过键盘扫描程序取得的键值求
出。键值是各键所在行号和列号的组合码。如图所
示接口电路中的键,9”所在行号为 2,所在列号为 1,
键值可以表示为,21H”(也可以表示为‘ 12H’,表
示方法并不是唯一的,要根据具体按键的数量及接
口电路而定)。根据键值中行号和列号信息就可以
计算出键号,如:
? 键号=所在行号 × 键盘列数+所在列号,
即 2× 4+ 1= 9
根据键号就可以方便地通过散转进入相应键的功能程序。
62
7.5.3 键盘和显示器接口示例
一,8155的键盘及显示接口
8 1 5 5
P B 7
共 阴 极
L E D
abc
de
f
g
d p
+ 5 V
1 0 0 Ω × 8
7 4 0 7 × 2
7 4 0 6
P B 6
P B 5
P B 4
P B 3
P B 2
P B 1
P B 0
P A 5
P A 4
P A 3
P A 2
P A 1
P A 0
去 8 0 C 5 1
5, 1 K Ω × 3
P C 2
P C 1
P C 0
012345
67
8
9
1 0
1 1
1 2
1 31 41 51 61 7
63
KD1:MOV A,#00000011B; 8155初始化,PA,PB为基本输出,PC为输入
MOV DPTR,#7F00H ;
MOVX @DPTR,A ;
KEY1:ACALL KS1 ;查有无键按下
JNZ LK1 ;有,转键扫描
ACALL DIS ;调显示子程序
AJMP KEY1 ;
LK1,ACALL DIS ;键扫描
ACALL DIS ;两次调显示子程序,延时 12ms
ACALL KS1 ;
JNZ LK2 ;
ACALL DIS ;调显示子程序
AJMP KEY1
64
LK2,MOV R2,#0FEH ;从首列开始
MOV R4,#00H ;首列号送 R4
LK4,MOV DPTR,#7F01H ;
MOV A,R2 ;
MOVX A,@DPTR ;
INC DPTR ;
INC DPTR ;指向 C口
MOVX @DPTR,A ;
JB ACC.0,LONE ;第 0行无键按下,转查第 1行
MOV A,#00H ;第 0行有键按下,该行首键号送 A
AJMP LKP ;转求键号
LONE,JB ACC.1,LTWO ;第 1行无键按下,转查第 2行
MOV A,#08H ;第 1行有键按下,该行首键号送 A
AJMP LKP ;转求键号
LTWO,JB ACC.2,NEXT ;第 2行无键按下,转查下一列
MOV A,#10H ;第 2行有键按下,该行首键号送 A
LKP,ADD A,R4 ;求键号。键号=行首键号+列号
PUSH ACC ;保护键号
LK3,ACALL DIS ;等待键释放
ACALL KS1 ;
JNZ LK3 ;
POP ACC ;
RET ;键扫描结束。此时 A的内容为按下键的键号
65
NEXT:INC R4 ;指向下一列
MOV A,R2 ;
JNB ACC.5,KND ;判 6列扫描完没有。
RL A ;未完,扫描字对应下一列
MOV R2,A ;
AJMP LK4 ;转下一列扫描
KND,AJMP KEY1 ;扫完,转入新一轮扫描
KS1,MOV DPTR,#7F01H ;查有无键按下子程序。先指向 A口
MOV A,#00H ;
MOVX @DPTR,A ;送扫描字,00H”
INC DPTR ;
INC DPTR ;指向 C口
MOVX A,@DPTR ;
CPL A ;变正逻辑
ANL A,#0FH ;屏蔽高位
RET ;子程序出口,A的内容非 0则有键按下
66
二,8279的键盘及显示接口
8 2 7 9
O U T A 3
共 阴 极
L E D
abc
de
f
g
d p
+ 5 V
1 0 0 Ω × 8
7 4 0 7 × 2
7 4 0 6
O U T A 2
O U T A 1
O U T A 0
O U T B 3
O U T B 2
O U T B 1
O U T B 0
去 8 0 C 5 1
R L 2
R L 1
R L 0
234567
1 81 9
2 0
2 1
2 2
2 3
2 6
2 7
2 82 93 03 1
R L 3
0
1
1 6
1 7
2 4
Y 0
Y 7
C
B
A
G 2 A
G 2 B
7 4 L S 1 3 8
S L 2
S L 1
S L 0
2 5
1 01 1
1 2
1 3
1 4
1 5
8
9
S H I F T
C N T L
67
初始化程序如下:
INIT:MOV DPTR,#7FFFH ;置 8279命令 /状态口地址
MOV A,#0D1H ;置清显示命令字
MOVX @DPTR,A ;送清显示命令
WEIT:MOVX A,@DPTR ;读状态
JB ACC.7,WEIT ;等待清显示 RAM结束
MOV A,#34H ;置分频系数,晶振 12MHz
MOVX @DPTR,A ;送分频系数
MOV A,#00H ;置键盘 /显示命令
MOVX @DPTR,A ;送键盘 /显示命令
MOV IE,#84H ;允许 8279中断
RET
68
显示子程序如下:
DIS:MOV DPTR,#7FFFH ;置 8279命令 /状态口地址
MOV R0,#30H ;字段码首地址
MOV R7,#08H ; 8位显示
MOV A,#90H ;置显示命令字
MOVX @DPTR,A ;送显示命令
MOV DPTR,#7FFEH ;置数据口地址
LP:MOV A,@R0 ;取显示数据
ADD A,#6 ;加偏移量
MOVC A,@A+ PC ;查表,取得数据的段码
MOVX @DPTR,A ;送段码显示
INC R0 ;调整数据指针
DJNZ R7,LP ;
RET
69
SEG:DB 3FH,06H,5BH,4FH,66H,6DH;字符 0,1,2,3,4,5段码
DB 7DH,07H,7EH,6FH,77H,7CH;字符 6,7,8,9,A,b段码
DB 39H,5EH,79H,71H,73H,3EH;字符 C,d,E,F,P,U段码
DB 76H,38H,40H,6EH,FFH,00H;字符 H,L,-,Y、日、“空”段码
70
键盘中断子程序如下:
KEY:PUSH PSW
PUSH DPL
PUSH DPH
PUSH ACC
PUSH B
SETB PSW.3
MOV DPTR,#7FFFH ;置状态口地址
MOVX A,@DPTR ;读 FIFO状态
ANL A,#0FH ;
JZ PKYR ;
MOV A,#40H ;置读 FIFO命令
MOVX @DPTR,A ;送读 FIFO命令
MOV DPTR,#7FFEH ;置数据口地址
MOVX A,@DPTR ;读数据
LJMP KEY1 ;转键值处理程序
PKYR,POP B
POP ACC
POP DPH
POP DPL
POP PSW
RETI ;
KEY1,… … ;键值处理程序
71
三、串行口键盘及显示接口电路
8 0 C 5 1
RXD
74LS164
&
Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7
A
+5V
a
b
c
d
e
f
g
dp
a
b
c
d
e
f
g
dp
TXD
B
CP
7
4
L
S
1
6
4
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
A
B
CP
A
B
CP
7
4
L
S
1
6
4
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
P1.2
1K× 8
1K× 8
+5V
P1.1
P1.0
0 1 2 3 4 5 6 7
F E D C B A 9 8
72
思考题与习题
1、试以 80C31为主机,用 2片 2764 EPROM扩展 16K ROM,画出硬件接线
图。
2、设计扩展 2KB RAM和 4KB EPROM的电路图。
3、当单片机应用系统中数据存储器 RAM地址和程序存储器 EPROM地址重
叠时,是否会发生数据冲突,为什么?
4,80C51单片机在应用中 P0和 P2是否可以直接作为输入 /输出连接开关、
指示灯等外围设备?
5、七段 LED显示器有动态和静态两种显示方式,这两种显示方式要求
80C51系列单片机如何安排接口电路?
6、设计 80C51键盘显示接口,采用中断扫描方式扩展 3× 6共 18个键分别为
0~9,A~F,RUN和 RESET键,具体要求如下:
a、按下 RESET键后,单片机复位。
b、按下 RUN键后,系统进入地址为 2000H的用户程序。
c、按下 0~9,A~F键后,键值存入内部 RAM,首地址为 40H。
试画出接口电路的硬件连接图并编写相应程序。
7、试编写图 7-27所示接口电路的实现程序