IO扩展及键盘显示.docx
- 文档编号:6995420
- 上传时间:2023-01-15
- 格式:DOCX
- 页数:27
- 大小:243.98KB
IO扩展及键盘显示.docx
《IO扩展及键盘显示.docx》由会员分享,可在线阅读,更多相关《IO扩展及键盘显示.docx(27页珍藏版)》请在冰豆网上搜索。
IO扩展及键盘显示
第4章并行I/O接口扩展及应用
如前面所述,51系列的单片机只有4个并行的输入输出接口(I/O口),即只有P0、P1、P2和P3四个接口。
又P3主要作为控制总线用,P2、P0作为地址和数据总线用,所以真正意义上的输入输出接口只有一个P1口。
而在单片机的控制系统中,如显示输出和键盘输入部分又经常要用到I/O口,所以就会出现I/O口不够用的情况,那么我们就想能不能有某种办法可扩展单片机的I/O口数量。
这时并行I/O接口扩展芯片就发挥作用了。
目前应用比较广泛的扩展芯片有Intel公司研制的8155和8255A通用可编程I/O接口芯片。
同时这章还将对显示输出和键盘输入进行详细的介绍,这是单片机系统中必不可少的一部分,良好的设计能为用户提供良好的人机界面环境,使系统更具有智能化,人性化。
4.1并行I/O接口扩展芯片
4.1.1概述
并行I/O接口是以并行的方式传送数据的,作为接口它既可以和CPU传送数据,又可以和外部设备交换数据。
也就是说,并行I/O接口并不改变数据传送方式,只是实现CPU和外设之间的速度和电平的匹配,或者是起到I/O数据的缓冲锁存作用以及提供驱动作用。
这里可能是读者们第一次接触可编程芯片。
简单来说,可编程的意思是芯片本身可通过单片机对其设置而成具有不同的功能的电路。
与可编程紧密联系在一起的是芯片内部的寄存器,即编程就是对寄存器进行赋值。
寄存器越多,功能往往越强大,设置也越灵活。
单片机在连接这类芯片时也总是把它们当作外部的随机存储器(RAM)对待,即要给芯片分配地址。
一般说来,芯片内有几个寄存器就需要有几个地址,也有出现共用地址的情况。
8155是一种并行I/O接口芯片,它可提供2个8位I/O端口和1个6位I/O端口,也可为单片机提供一个256字节的随机存储器(RAM)和一个14位多功能定时/计数器。
由于它可提供如此丰富的资源,所以在51系列单片机的外部扩展中发挥了重要作用。
8255也是可编程并行I/O接口芯片,它具有3个8位的并行I/O口,工作方式和功能基本上和8155的类似。
不过它允许采用同步、异步和中断三种方式传送I/O数据。
前者基本上是为51系列单片机定制的,而后者主要是为Intel8080/8086处理器开发设计的,也可以用于51系列单片机。
4.1.2芯片介绍
1、8155
(1)逻辑结构及各封装引脚说明
a、逻辑结构如图4-1所示
在8155中最重要的部分就是命令寄存器,通过对该寄存器的赋值可以设定8155的工作方式,即可设定I/O口寄存器及定时计数器的工作方式,从而设定8155完成不同的功能。
通过对状态寄存器中数据的分析可了解8155现在所处的工作状态。
因为8155内部有三个I/O寄存器,这三个寄存器可提供三个通用的I/O端口,于是就达到了为单片机扩展I/O端口的目的。
一般51系列单片机的内存(随机存储器)比较小,而8155内部包含了一个存储量为256字节的随机存储器,它可用于存放一些实时的数据信息,所以它可较大地扩展处理器的内存。
定时/计数器则由T/IN输入线上的脉冲减1,每当减到零溢出时可在T/OUT线上输出一个可编程控制的波形。
AD7-AD0
图4-1
b、封装引脚分布如图4-2所示
图4-2
c、各引脚功能含义如下:
引脚名称
功能
有效电平
使用注意事项
RESET
复位信号输入端
高电平有效
在此端口出现5μS左右宽的正脉冲,8155被初始复位,复位后的I/O口为输入方式
IO/M
RAM或I/O口操作选择端
当IO/M为低电平时,CPU选中8155的RAM工作;当IO/M为高电平时,CPU选中8155内部的某一寄存器工作
CE
片选信号端
低电平有效
RD
读选通信号端
低电平有效
WR
写选通信号端
低电平有效
PA0~PA7
8位通用I/O端口A口
由编程选择其输入或输出方式
PB0~PB7
8位通用I/O端口B口
由编程选择其输入或输出方式
PC0~PC5
6位控制I/O端口C口
由编程选择用于PA和PB口的控制信号或者用作通用I/O端口。
因此,PC口是双功能的
T/IN
定时器/计数器时钟输入端口
T/OUT
定时器/计数器信号输出端口
其输出信号是矩形波还是脉冲波形取决于定时器/计数器的工作方式
VCC、VSS
+5V电源、地
(2)内部各寄存器说明
a、命令寄存器
为8位寄存器,用于主机编程写入命令字,设定I/O口的操作方式以及实现对中断和定时/计数器的控制。
各位由高到低的含义如下表所示:
名称
D7
D6
D5
D4
D3
D2
D1
D0
TM2
TM1
IEB
IEA
PC2
PC1
PB
PA
对象
计数器
B口
A口
C口
B口
A口
值
00
01
10
11
0
1
0
1
00
11
01
10
0
1
0
1
功能
无操作
停止计数
计数满后停止
开始计数
禁止中断
允许中断
禁止中断
允许中断
ALT1
ALT2
ALT3
ALT4
输入
输出
输入
输出
其中ALT1、ALT2、ALT3、ALT4的含义如下表所示:
C口
通用I/O工作方式
选通I/O工作方式
ALT1
ALT2
ALT3
ALT4
PC0
输入
输出
AINTR(A口中断)
AINTR(A口中断)
PC1
输入
输出
ABF(A口缓冲器满)
ABF(A口缓冲器满)
PC2
输入
输出
ASTB(A口选通)
ASTB(A口选通)
PC3
输入
输出
输出
BINTR(B口中断)
PC4
输入
输出
输出
BBF(B口缓冲器满)
PC5
输入
输出
输出
BSTB(B口选通)
b、状态寄存器
也为8位寄存器,但只有7位有意义,最高位无意义。
它用于锁存I/O口和定时器/计数器的当前状态,供主机查询,故而它只能读出,不能写入,而且和命令寄存器共用同一个地址,命令寄存器只能写入,不能读出。
所以,对同一个地址,写入时是命令字,读出时则是状态字。
状态字的格式如下:
名称
D7
D6
D5
D4
D3
D2
D1
D0
×
TIMER
INTEB
BBF
INTRB
INTEA
ABF
INTRA
对象
×
定时器中断
B口中断允许
B口缓冲器
B口中断请求
A口中断允许
A口缓冲器
A口中断请求
值
0
1
0
1
0
1
0
1
0
1
0
1
0
1
状态
读状态字后或硬件复位后
有定时器溢出中断
禁止
允许
空
满
无
有
禁止
允许
空
满
无
有
c、PA口、PB口、PC口寄存器
PA口、PB口为8位寄存器,分别存储要从各自对应的引脚输出的数据或从引脚读入的数据。
PC口寄存器只有6位,既可以用于存放一般的输入输出数据,也可以存储命令或状态信息。
d、寄存器地址分配
8155在某一时刻只能选中某一个I/O寄存器工作,这由与单片机相连的数据线上传来的地址信息决定。
A7
A6
A5
A4
A3
A2
A1
A0
所选端口
×
×
×
×
×
0
0
0
命令/状态寄存器
×
×
×
×
×
0
0
1
A口
×
×
×
×
×
0
1
0
B口
×
×
×
×
×
0
1
1
C口
×
×
×
×
×
1
0
0
计数器低8位
×
×
×
×
×
1
0
1
计数器高8位
(3)工作方式
a、通用I/O方式
A、B、C口均工作于基本的输入/输出方式,三个端口之间没有任何联系。
其中,A、B两口的方式由命令寄存器中的D1、D0两位决定,C口各位则由D3、D2两位决定。
b、选通I/O方式
此时,A口和B口用作数据口,C口6位分为两组分别用作A口和B口联络口。
每组三根联络信号线为:
引脚名称
功能
有效电平
使用注意事项
INTR
中断请求输出线
高电平有效
作为单片机的中断源
BF
I/O口缓冲器满标志输出线
缓冲器存有数据(满)时,BF为高电平,否则为低电平(空)
STB
外围部件选通输入信号线
低电平有效
选通I/O方式又可分为选通I/O数据输入和选通I/O数据输出两种方式。
A口和B口都可独立工作于这两种方式。
现以A口举例说明工作过程如下:
选通I/O数据输入
选通I/O数据输出
1、当外设将数据送到A口时,同时还向8155的ASTB(A口选通)线上发送一个低电平选通信号
1、单片机把数据送到8155的A口锁存器中,此时ABF线变为高电平,以便通知外设数据已到
2、8155收到选通信号后,将数据锁存到A口锁存器中,并将A口缓冲器满输出线ABF置为高电平,以通知外设它已经收到数据
2、外设收到ABF线上的高电平时,即从A口上接收数据,同时使ASTB线变为低电平,以便通知8155已经收到数据
3、如果此时A口允许中断(即命令字D4设为1),AINTR中断输出线上输出高电平,从而向单片机请求中断
3、如果此时A口允许中断(即命令字D4设为1),AINTR中断输出线上输出高电平,从而向单片机请求中断
4、单片机响应中断后,从A口锁存器中读入数据,同时,通过RD上升沿撤销AINTR线上的中断请求信号(即将AINTR变为低电平),也使ABF输出线变为低电平,从而可通知外设可以开始传送下一个数据
4、单片机响应中断后,可在中断服务程序中把下一个数据送到A口的锁存器中,进行下一个数据的输出。
(4)定时器/计数器
它是由两个8位的寄存器组成,其实是16位,只是其中高位字节寄存器的最高两位D7、D6用于编程选择输出模式,其余14位为计数设定初值,所以叫14位定时器/计数器。
对8155定时器/计数器编程时,首先把输出模式和计数初值装入相应的两个寄存器,然后通过命令字中的最高两位M2、M1设置定时器/计数器的工作方式。
M2M1
可否自动重装
输出波形
具体说明
00
不能
单次方波
计数开始输出高电平,计数到一半时使TOUT线输出低电平,于是形成一个单次方波。
若设置的计数初值为偶数时,矩形波形势对称的;若设置的计数初值为奇数时,则高电平比低电平多一个计数脉冲。
01
可以
连续方波
由于可以实现自动重装,所以可输出连续方波
10
不能
单次脉冲
当减1计数到0时,便在TOUT线上输出一个单脉冲
11
可以
连续脉冲
由于可以实现自动重装,所以可输出连续脉冲
任何时候均可设置新的计数初值和输出模式,但必须随之将启动命令写入命令字寄存器,如果定时器/计数器正在计数,则只有在写入启动命令之后,定时器/计数器才能接受新的计数常数并按新的工作方式计数。
硬件复位时不会预置某种工作方式和计数常数,而将中止计数过程。
因此,复位后,直接通过写命令字寄存器发出启动命令时才又开始重新计数。
(5)256字节的随机存储器RAM
当IO/M引脚接低电平时,8155就只作为一个具有256字节存储量的随机存储器。
它的访问方式与扩展存储器章节中讲述的一样,这里不再讨论。
2、8255
(1)逻辑结构及各封装引脚说明
a、逻辑结构如图4-1所示
A口、B口和C口均为8位I/O数据口,但结构上略有差别。
A口由一个8位数据输出缓冲/锁存器和一个8位数据输入缓冲/锁存器组成,而B口和C口都没有数据输入锁存器,这个将导致A口与B口工作模式的不同。
PC口又可分为高4位口和低4位口两部分。
与8155不同的地方是它内部有个A组控制器和B组控制器,都是由控制字寄存器和控制逻辑组成,相当于8155中的命令寄存器。
A组控制器可控制A口和C口高4位,B组控制器可控制B口和C口低4位。
与8155一样,PC口仍是分为两部分分别作为A、B口的控制/状态口。
8255内部没有随即存储器和定时/计数器的资源,它只能纯粹地扩展I/O资源。
图4-3
b、封装引脚分布如图4-2所示
图4-4
c、各引脚功能含义如下:
引脚名称
功能
有效电平
使用注意事项
D0~D7
双向数据总线
CS
片选信号端
低电平有效
RD
读选通信号端
低电平有效
WR
写选通信号端
低电平有效
A0、A1
通道选择信号端
它与CS、RD、WR的信号端组合,用来控制PA、PB、PC三个通道口和控制字端口及其功能选择。
它通常与地址总线的最低位相连
RESET
复位信号输入端
高电平有效
复位后全部内部寄存器,包括控制字寄存器均清零,所有通道均置为输入方式,24条I/O引脚均呈高阻状态
PA0~PA7
8位通用I/O端口A口
PB0~PB7
8位通用I/O端口B口
不可在模式2下工作
PC0~PC7
8位控制I/O端口C口
通常PA口、PB口作数据输入/输出口,而PC口的两个4位端口,作为PA口和PB口在选通方式下操作时的状态/控制信号线,而且还可对每一位进行置位或清零操作
VCC、GND
电源、地
(2)功能控制
a、通过外部引脚A1、A0、RD和WR可以选择对哪个寄存器进行什么样的操作。
A1A0
RD
WR
端口
功能
00
0
1
A口
读A口
00
1
0
A口
写A口
01
0
1
B口
读B口
01
1
0
B口
写B口
10
0
1
C口
读C口
10
1
0
C口
写C口
11
1
0
控制口
写控制字
b、在对某个端口寄存器进行操作之前必须先设置其工作方式,这就需要对控制寄存器进行设置。
控制字寄存器有两个作用,一个用于作方式控制字,另一个用于作C口单一置复位控制字,即要对C口进行位控制的话,不是直接选取C口来进行读写,而是通过对控制寄存器的赋值来实现的。
下面为8255方式控制字格式,其中D7为特征位,当D7=1时有效:
名称
D7
D6
D5
D4
D3
D2
D1
D0
特征位
A组
B组
对象
方式标志
方式选择
A口
C口高4位
方式选择
B口
C口低4位
值
1有效
11
10
01
00
0
1
0
1
0
1
0
1
0
1
功能
模式2
模式1
模式0
输出
输入
输出
输入
模式0
模式1
输出
输入
输出
输入
下面为C口单一置复位控制字格式,当D7=0时有效:
名称
D7
D6
D5
D4
D3
D2
D1
D0
特征位
×
×
对象
C口单一置复位
C口位选择
置复位操作
值
0有效
111
110
101
100
011
010
001
000
0
1
功能
PC7
PC6
PC5
PC4
PC3
PC2
PC1
PC0
复位
置位
c、与8155不同,8255是在工作模式1和模式2下才有状态字,它没有相应的状态寄存器,而是直接读取C口寄存器的值便可读得相应的状态字。
因为在工作模式1和模式2下,C口已作为A口、B口的状态/控制信号线输入口。
在模式1和模式2下C口的各位信号功能分配如下:
C口各位
模式1
模式2
输入方式时
输出方式时
双向传输方式时
PC7
I/O
OBFA
OBFA
PC6
I/O
ACKA
ACKA
PC5
IBFA
I/O
IBFA
PC4
STBA
I/O
STBA
PC3
INTRA
INTRA
INTRA
PC2
STBB
ACKB
由B口工作在哪种模式、哪种方式决定
PC1
IBFB
OBFB
PC0
INTRB
INTRB
(3)工作方式
a、模式0
模式0属于基本输入输出方式,与8155一样,此时各个I/O口之间互相独立。
C口高低4位可分开独立设置。
在此模式下,8255可进行I/O数据的无条件传送。
也可以将某个端口的某几位设定为外设的状态输入位,这样单片机对这些状态位进行查询就可实现I/O数据的异步传送。
b、模式1
模式1又可分为选通输入和选通输出两种方式。
A口和B口可独立设置,C口用作A口和B口的握手联络线,以实现中断方式传送I/O数据。
与8155一样,每组联络线需要三根,而C口由八位,这就会空出两位,空出的两位就作为普通I/O位可对其置复位。
这里的选通输入和选通输出工作方式和过程与8155的一样。
c、模式2
模式2其实是模式1中选通输入和选通输出的两种组合,即同时工作在两种方式下。
8255种只有A口才能工作在这种模式。
此时A口的数据线为双向I/O总线,当作为输入数据总线使用时,它受STBA和IBFA控制,其工作过程与选通输入相同;当作为输出数据总线使用时,它受OBFA和ACKA控制,其工作过程与选通输出相同,且两者都用同一个中断口INTRA。
模式2特别适合于一些数据需要输入又需要输出的终端设备。
4.2显示输出和键盘输入
单片机经过I/O接口芯片扩展后,功能强大了许多。
就像一个人多出了几只手一样,能同时做更多的事情了。
对于一个扩展后的单片机系统来说,它已经是一个比较完善的处理机系统。
此时,它只要外部接入一些功能执行模块,它就能对其实现很好的控制。
在控制的同时,人们往往想要了解控制过程中的一些重要数据的变化,这就需要系统应该有良好的人机接口界面,如各种显示输出终端设备。
而在另一些系统中,人们若需要在控制过程中对其进行调整控制,就需要键盘、开关等输入设备。
有了这些显示输出和键盘输入设备后,单片机的控制过程就不再是看不见、摸不着了,它已经能很好地与人交流,从而达到满意的控制效果。
目前在单片机系统中应用比较广泛的显示输出设备有半导体发光数码管(LED)和液晶显示器(LCD),输入设备有按键和拨码开关。
当然,这里将要介绍的设备与通常个人计算机的输入输出设备有很大不同,其一它们的复杂度远远小于计算机的输入输出设备的复杂度,其二它们的体积小、功能简单,但对于单片机系统来说已经足够了。
4.2.1数码管(LED)显示
在电梯上、计程车中,那些用来显示楼层数、所走路程数、计费价格的设备就是数码显示管。
不仅这些地方,还有各种家用电器上也随处可见。
数码管可分为点阵型、米字型和8字型等。
我们这里介绍的是常用的8字型数码管,即它是由8只发光管组成,管子上所显示的数字与8只管中哪只发光和哪只不发光有紧密地联系。
也就是说,在单片机系统中,我们要显示一个数据其实就是控制数码管上8只管的亮暗组合。
所以我们就必须了解数码管的显示原理。
(1)、显示原理
a、8只发光管的命名规则
8只发光管中有一只比较特别,那就是图中命名为DP的管子,它一般为圆形且体积较小,其余的都类似为长方形,大小都差不多。
命名时一般都从最顶上开始,顺时针方向数,再到中间的G,最后才是DP,我们也称它为H。
这样我们就可设想8只发光管分别对应8位二进制数,A对应二进制的最低位,DP(即H)对应二进制的最高位,就为单片机控制提供了方便,单片机便能通过对二进制数的置复位来控制管子的亮暗。
图4-5
b、内部结构和封装引脚说明
数码管也是一种集成电路器件,它内部集成了八只发光二极管。
这8只管子之间不是互相独立的,而是按共阴或共阳的方式联系在一起的。
共阴是指把8只管子的阴极相连在一起,共阳是指8只管子的阳极相连在一起。
如图4-6是型号为5161A的共阴数码管,图4-7则是型号为5161B的共阳数码管。
图中大写字母对应图4-5中的名字。
数字为外部封装引脚。
图4-6图4-7
c、字形码
现在我们以图4-6为例,如果我们把3、8的共阴脚上接地,而在6和4教上接高电平,其余脚都接低电平,那么我们会在图4-5上显示一个什么数字呢?
对,它是1。
因为此时B、C两只发光管被点亮了,而其余的管子都是暗的。
这样的话,我们把图4-6中的RDP到A依次接单片机系统I/O口的高位到低位,只要单片机送出一个00000110的数据,我们就可以实现数字1的显示。
而00000110(即十六进制数06H)称为数码管的字形码。
于是我们可以得到如下的共阴字形码表:
所显字符
0
1
2
3
4
5
6
7
8
9
共阴字形码
3FH
06H
5BH
4FH
66H
6DH
7DH
07H
7FH
6FH
同理,我们还可以得到如下的共阳字形码表:
所显字符
0
1
2
3
4
5
6
7
8
9
共阳字形码
C0H
F9H
A4H
B0H
99H
92H
82H
F8H
80H
90H
可以发现共阴和共阳码互为反码。
(2)、显示方式
我们现在知道,一个数码管就需要8根I/O口线来控制,如果系统要用几个数码管呢?
虽然经过扩展后的单片机系统已经拥有了较多的I/O口资源,但对于多个数码管还是不够。
这时我们就需要用到动态显示的概念,它是相对于静态显示而言的。
静态显示就是上述说的一个数码管由8根线来控制,每个数码管都能同时且稳定地显示各自的字形。
动态显示是指每次只有一个数码管在显示,各个数码管轮流显示各自的数据的。
此时,每个数码管需要9根线来控制,其中8根线与静态时一样,只是每个数码管的8根线都对应连在一起,由单片机的一个8位I/O口统一控制,这8根线也叫段选线。
多出的第9根线为数码管的公共端的接线,单片机通过I/O口控制这根线,就可控制每次哪个数码管显示,这根线也称为位选线。
这样的话,系统需要几个数码管,就只需要增加几根位选线,从而大大减少了I/O口线的开销。
每次工作过程就是单片机先通过位选线选择一个数码管,然后从段选线上送出字形码,延时一段时间后,再选择下一个数码管,再送字形码,反复循环下去,如果延时时间适当(一般是1毫秒左右),我们会看到几只数码管好像是同时在稳定显示各自的字形码。
读者此时也许会发现,虽然动态显示大大减少了I/O口线的开销,但每次都要循环扫描,才能保证同时稳定显示,这就给软件设计带来了麻烦。
而静态显示因为各个数码管之间互相独立而只需要送一次数即可稳定显示,软件设计简单。
那我们为什么还用动态显示呢?
这就涉及到一个系统设计的方法上。
通常来说,我们设计一个系统时,总是尽量减小硬件的复杂度,能用软件替代实现的尽量用软件实现。
也许读者会问,对于显示有没有什么两全其美的解决方案呢?
有,这需要一些专用的芯片(如8279)或利用单片机的串行口采用串并转换芯片(如74LS164)。
但这些都是增加了硬件的复杂度,或者说增加了开发系统的成本。
在一般的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IO 扩展 键盘 显示
![提示](https://static.bdocx.com/images/bang_tan.gif)