74.56MCS51并行IO端口的扩展PPT课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(1) 监视键盘的方法 3) 根据键盘布局构建键值表
1FH 1EH 1DH 1CH 1BH 1AH 19H 18H
L3
17H 16H 15H 14H 13H 12H 11H 10H
L2
0FH 0EH 0DH 0CH 0BH 0AH 09H 08H
L1
07H 06H 05H 04H 03H 02H 01H 00H
ORG 0100H
READKEY: MOV A , #0FFH ; 准备读P1口
MOV P1, A
JNB ACC.0 , RP10 ; 若0#键按下,则转RP10
JNB ACC.1 , RP11 ; 若1#键按下,则转RP11

JNB ACC.7 , RP17 ; 若7#键按下,则转RP17
DONE : RET
7.4 MCS-51并行I/O端口的扩展
MCS-51单片机虽然有四个并行端口(P0~P3),但是真正留给 用户使用的只有P1,其它的3个并口都有其它的工作:P0和P2常 用作扩展外存储器,P3经常用到它的各引脚的第二功能。因此, 需要扩展I/O
两种方法: 1) 借用外部RAM的地址来扩展I/O端口(统一编址); 方法简单,但使用受限,尤其在使用无接口能力的外设
设计者按照需要固定好各个按键的位置后,即可以根据 当前的键盘布局,确定某键盘所在的行值和列值。例如按键 “7”的行值为0(L0),列值为0(R0)。
为方便编程,需要将所有按键的键值按照固定的顺序保 存在表格中。因为键值和按键是一一对应的,只要通过查表 查到键值,也就知道用户按下了哪个键。其中各个键值对应 的偏移量是由按键的行值和列值确定的。确切的说,是由列 值和所在行的行首键号(顺序号)确定的。如下图所示:
另一组信号用来控制显示的字形,称为段码。
在这两组信号的控制下,各个LED数码管可以轮流点 燃显示各自的数码。
让 8155 的 PA 口 、 PC 口 , 工 作 在 基 本 输 出 方 式 。 PA口输出显示代码,PC口输出位选码。设PA口的地 址为8001H,PB口的地址为8002H,控制字寄存器的 地址为8000H,显示缓冲区为7AH~7FH。其显示程序 流程,如图所示:

3FH C0H 0
+BH 7CH 83H
b
06H F9H 1
+CH 39H C6H
C
5BH A4H 2
+DH 5EH A1H
d
4FH B0H 3
+EH 79H 86H
E
66H 99H 4
+FH 71H 8EH
F
6DH 92H 5
+10H 00H FFH
空格
7DH 82H 6
+11H F3H 0CH
同时按下了两个键,即发生了窜键现象。CPU认为最后 放开的键是真正被按下的键。可以设置一个窜键标志寄存器。 如果在列扫描是出现该寄存器值大于01H,则继续扫描,否 则,可确定当前按键。
C口
AD0
8155 B口
CE
PA7~PA0 PC5~PC0 PB7~PB0
7.5 MCS-51对LED/键盘的接口
单片机系统中,显示器和键盘是很重要的输入/输出设备。
7.5.1 MCS-51对LED的接口
1. LED数码显示管的显示原理 2. LED数码显示管由多只发光二极管组成,常用的是由8只二极 管组成的LED,称为8段LED,也称8字管。 3. LED刷显示管分为两种:共阴极和共阳极。 4. 共阴极:所有二极管的阴极连结在一起 5. 共阳极:所有二极管的阳极连结在一起 6. 八段LED数码管的八个发光二极管编号是a,b,c,d,e,f,g,sp。其中 sp是点状发光二极管。显示原理为:通过通明管脚上所加电平的高 低来控制发光二极管是否点亮,从而显示不同的字形。
8051同8255A连结非常简单,只需要一个8位地址锁存器即可。
RD WR RESET
8031 P0.7
. . .
P0.0
ALE INT0 EA
74LS373 Q7
.
D7
.
.
.
.
Q1
.
D0 Q0
G
RD
PA7
.
WR
.
RESET
.
PA0
CS
.
. 8255A
.
A1
PC6
A0
. PC0
D7
PC3
.
.
.
D0
DB7
+5V
7# 6# 5# 4# 3# 2# 1# 0#
每个按键都和 P1的一条线 相连。
单片机定时对 P1口进行查 询,即可发现 键盘上是否有 按键按下以及 哪个按键被按 下。
没有按键按下时,8031从P1口读出的引脚电平均为“1”(+5V);若某 一按键按下,则该键所对应的端口线变为低电平。
相应程序
列值 00H 01H 02H 03H 04H 05H 06H 07H 00H 01H
05H 06H 07H
行首键号 00H 00H 00H 00H 00H 00H 00H 00H 08H 08H
18H 18H 18H
键值 7 4 8 5 9 6 A B 1 0
1DH 1EH 1FH
(1) 监视键盘的方法
1) 判断是否有键按下
8155的PA口作为输出信号线,PC口作为输入信号线。 首先CPU向8155的PA口送全“0”,即可在所有列线R7~R0 得到TTL低电平0;然后读取PC口上的值即可判断是否有键 按下。
无键按下:CPU读取的PC口值必定为0FH
有键按下:CPU读取的PC口的值必定不是OFH
(某行线、列线接通)
(1) 监视键盘的方法
5) 被按键的类型判别(键值的安排) 一般键盘上都设置数字键和功能键两类按键,它们的功
能也不相同的。往往从键值设置上加以区分,例如:
可设所有数字键的键值都小于10H,功能键的键值都大 于或者等于10H。
6) 按键的防抖动和窜键处理
按下某键时,被按键的弹簧片总会有轻微的抖动(持续 时间为10ms左右),在此期间扫描键盘可能出错,因此可 使CPU在检测到有按键时延时20ms在进行列向扫描。
7.5.3 MCS-51对非编码键盘的接口
键盘是常用的输入设备,是操作人员和计算机的人机界面。 按组成形式,键盘可分为独立联接式键盘和行列(矩阵)式键 盘,根据译码方法的不同又分别分为编码键盘和非编码键盘。
编码键盘:
通过专门的硬件电路产生被按键的键码,并产生一 个选 通脉冲。该选通脉冲常用于CPU的中断请求信号,以便通知CPU 以中断方式接受键码。该类键盘使用方便,但硬件电路复杂。
. . .
DB0
printer
ACK STB
7.4.3 采用8155扩展I/O端口
8051同8155连结极简单,将8051的P0所有引脚同AD7~AD0直 接相连即可。(8155内部自带地址锁存器)
RESET RD WR ALE
8031 P0.7
.
P0.0
EA
RESET
RD
WR
A口
ALE
IO/M AD7
P
07H F8H 7
+12H 76H 89H
H
7FH 80H 8
+13H 80H 7FH

6FH 90H 9
+14H 40H BFH

77H 88H A
按照SP g f e d c b a 的顺序排列,可得字形码 举例如下:
共阴极:
00000110(06H) 01101111(6FH) 01101111(6FH) 01101101(6DH) 10000000(80H) 01111101(7DH)
把所有按键排列成行列矩阵。每根行线(水平线)和列线(垂 直线)的交叉处都接有一个按键。当有按键按下时,与这个按键相 连的行线和列线就会接通,否则就处于断开状态。
一个 M×N 键盘需 M 条行线和 N 条列线,共占用 M+N 条
单片机的I/O端口线。
2. MCS-51 对行列式非编码键盘的接口
PA7
共阴极:所有发光二极管的阴极共连后接到引脚G,G为控制端,用于控制八个二
极管是否点亮。若G接地,则LED被点亮,若G接了高电平,则LED被熄灭。各二极 管是否点亮取决于a~SP各引脚上是否是高电平。
共阳极:所有发光二极管的阳极共连后接到引脚G。正常显示时G接+5V电压,各
二极管是否点亮取决于a~SP各引脚上是否是低电平。
32个键,分为4行(L3~L0),
PA6
8列(R7~R0)。
PA5
PA4
PA3
PA2
PA1
+5V
PA0
PC3
L3
PC2
L2
PC1
L1
PC0
L0
R7 R6 R5 R4 R3 R2 R1 R0
(1) 监视键盘的方法
CPU 必 须 对 所 有 按 键 进 行 监 视 。 一 旦 发 现 有 按 键 按 下 , CPU应该能够识别,并转入相应的处理程序,实现该按键要求 的功能。
RP10 : RP11 :
… RP17 :
LJMP PROM0 LJMP PROM1
LJMP PROM7
优点:硬件电路简单
缺点:每个按键都要占 用一条I/O端口线。
PROM0 : … ;0#键的处理程序
JMP DONE
PROM7 : … ;0#键的处理程序
JMP DONE
2. MCS-51 对行列式非编码键盘的接口
L0
R7
R6
R5
R4

L0行首键号:00H L2行首键号:10H
R3
R2
R1
R0
L1行首键号:08H L3行首键号:18H
键值表示例
地址偏移量 00H 01H 02H 03H 04H 05H 06H 07H 08H 09H … 1DH 1EH 1FH
按键 7 4 8 5 9 6 A B 1 0
DAR STEP MON
PA口输出:11111101 ,PC口输入:0FH,说明第R1列无键 按下;
PA口输出:11111011 ,PC口输入:0DH,说明第R2列有按 键按下--该按键在第R2列,第L1行。
(1) 监视键盘的方法
3) 根据键盘构建键值表
为每一个按键都设置一个键值,例如可设按键“0”~ “F”的键值分别是00H~0FH,按键MEM的键值为10H,…, MON的键值为1FH,其他按键根据实际情况分别设置。
(1) 监视键盘的方法
2) 如果有键按下,需要判断其行首键号和列号
采用逐列扫描的方法,即可实现以上要求。具体如下: 轮流使8155的PA口中每条线输出低电平(列向扫描),然 后读取和判断PC3~PC0上的行值即可。如: 假设第二列(R2)第一行(L1)按键被按下。则
PA口输出: ,PC口输入:0FH(低四位全部为高电 位), 说明第R0列无按键按下;
时 2) 采用并行I/O接口芯片扩展I/O 方法较为复杂,但是I/O数据可以得到缓冲或锁存(接 口),可以采用中断方式传送数据。
7.4.1 借用外部RAM扩展I/O端口
本方法的关键是外设和外存储器统一编址。由于是统一编址, 往往会出现“外设的端口地址覆盖外存储器的地址”现象,导致 外存储器的某些单元无法使用。
例题:分析以下电路,并编程实现将8031内部RAM起始地址为20H 的连续50个字节的数据输出到打印机的程序。
RD P1.0 ALE
P0.0 。
EA
P0.7
8031
G Q0

8

锁 存
Q7

A0


RAM
A7 CS
译 Y0 码 器 Y15
STB ACK
字符 打印机
DB0 DB7
7.4.2 采用8255A扩展I/O端口
4) 求键值
先根据列值和首行键号计算出当前被按下的按键的键号 (即该按键键值在键值表中的地址偏移量),然后再通过查 表程序键值。
键号的计算公式: N=行首键号 + 列值
例如:按键“2”的键号: N(2) = 08H + 02H = 0AH
从表格的初始地址开始,偏移0AH,即可找到按键“2” 的键值:02H。
非编码键盘:
每个按键的作用仅是使相应的接点接通或者断开,每个按 键的键码不是由硬件电路产生的,而是由相应的软件扫描程序 形成的。该类键盘硬件电路非常简单,在微型计算机中得到广 泛应用。
1. MCS-51对独立式非编码键盘的接口
每个按键都是独立的,都分别占用CPU的一条I/O数据输入线。
P1.7 P1.6 P1.5 8031 P1.4 P1.3 P1.2 P1.1 P1.0 EA
通过并行接口芯片8155扩展6位动态数码管显示电路, 轮流点亮各LED数码管,每位点亮1ms,重复此过程。
地址偏 移量 +0H +1H +2H +3H +4H +5H +6H +7H +8H +9H +AH
八段LED数码显示管字形码 表
共阴字 共阳字 所显 地址偏 共阴字 共阳字形 所显字
形码 形码 字符 移量 形码 码
共阳极:
11111001(F9H) 10010000(90H) 10010000(90H) 10010010(92H) 01111111(7FH) 10000010(82H)
一组LED显示器需要两组信号:
一组用来选择第几位数码管工作,称为位码。对于共 阳极结构应为高电平有效,共阴极结构是低电平有效;
相关文档
最新文档