Download presentation
Presentation is loading. Please wait.
Published byἍβραμ Γεωργίου Modified 5年之前
1
第7章 单片机并行I/O扩展 教学基本要求: (1)、了解单片机I/O扩展的原因; (2)、熟悉单片机I/O的控制方式及编址技术;
(4)、掌握8255芯片的应用方法; (5)、掌握单片机键盘接口技术; (6)、掌握单片机LED显示器接口技术; 教学重点: (1)、8255与MCS-51单片机的接口方法; (2)、单片机独立式键盘接口技术; (3)、单片机LED显示器动态扫描接口技术; 教学难点: (1)、键盘扫描子程序、LED显示子程序的设计。
2
7.1 单片机I/O扩展基础知识 7.1.1 I/O接口电路的功能 1、速度协调; 2、输出数据锁存; 3、数据总线隔离; 4、数据转换;
5、增强驱动能力 关于接口电路的更多说明 1、接口与接口电路 (a)接口:是研究单片机与外设之间的连接问题。 (b)接口电路:是指单片机与外设之间接口界面的硬件电路。
3
3)命令寄存器,用于保存来自CPU有关数据传送的控制命令。
2、口或端口 指接口电路中,已被编址并能进行读/写操作的寄存器,简称口。 一个接口电路往往对应着多个口地址,使用端口其实质是对寄存器进行读写操作。它通常包含以下部分: 1)数据寄存器,用于保存输入/输出数据; 2)状态寄存器,用于保存外设的状态信息; 3)命令寄存器,用于保存来自CPU有关数据传送的控制命令。 以上各寄存器均为可读/写的编址寄存器,具有确定的地址,CPU可对其进行读/写操作 3、I/O接口的特点 4、并行接口与串行接口
4
缺点:除存储器读/写指令外,还要设置一套I/O指令及控制信号。
单片机系统中存在两个需要编址的子系统: 一个是存储器,主要是对存储单元进行编址,已在第6章讲解; 另一个是接口电路中的寄存器(可编址端口),主要是对可编址端口进行编址,也称I/O编址。 常用I/O编址方式:独立编址方式和统一编址方式。 (a)独立编址方式 所谓独立编址,就是把I/O和存储器分开进行编址。 优点:I/O和存储器地址空间相互独立。 缺点:除存储器读/写指令外,还要设置一套I/O指令及控制信号。
5
(b)统一编址方式 所谓统一编址,就是把系统中的I/O和存储器统一进行编址。 优点:无需专门I/O指令,I/O地址范围不受限制。 缺点:使存储器地址空间缩小,地址译码复杂。 MCS-51单片机采用统一编址方式。因此接口电路中I/O地址与存储单元地址长度相同(16位二进制数)。
6
单片机I/O控制方式 在单片机系统中,实现数据的输入/输出传送,通常使用无条件传送方式、查询方式和中断方式三种。 (1)无条件传送方式 即同步程序传送,单片机不需测试外设状态,随时可以与外设进行数据传送操作。如开关、LED等外部设备。 无条件传送的接口电路如图所示: (2)查询方式 也称有条件传送方式,即数据传送是有条件的,单片机在传送数据之前,需测试外设的状态(查询),它是一种软硬件结合的数据传送方式。 查询流程框图如图所示:
7
(3)中断方式 也称程序中断方式,它与查询方式的主要区别在于如何知道设备是否为数据传送作好了准备,查询方式是单片机的主动形式,而中断方式则是单片机等待通知(中断请求)的被动形式。 中断方式数据传送示意图: 单片机I/O口直接应用举例 (1)数据的无条件传送 例:从P1.3~P1.0输入开关状态,再从P1.7~P1.4输出去驱动发光二极管,使其显示开关的状态。 解:电路原理图如图所示: 程序流程框图: 程序清单:
8
ORG H LJMP MAIN ORG H MAIN:MOV A, #OFH; 熄灭发光二极管 MOV P1, A; MOV A, P1; 输入开关状态 CPL A; 状态取反 ANL A, #0FH; 屏蔽A的高半字节 SWAP A; A的高低半字节交换 MOV P1, A; 开关状态输出 END
9
例:从P1.3~P1.0输入开关状态,再从P1.7~P1.4输出去驱动发光二极管,使其显示开关的状态。
(2)中断方式的数据传送 例:从P1.3~P1.0输入开关状态,再从P1.7~P1.4输出去驱动发光二极管,使其显示开关的状态。 解:由外电路产生外部中断请求0,脉冲边沿触发 电路原理图如图所示: 程序流程框图: 程序清单: ORG H LJMP MAIN ORG H LJMP EXTR;
10
ORG H MAIN:SETB IT0; 脉冲边沿触发 SETB EX0; 外部中断0允许 SETB EA; 总中断允许 HERE:LJMP HERE; 等待中断 ORG H EXTR:MOV A, #OFH; 熄灭发光二极管 MOV P1, A; MOV A, P1; 输入开关状态 CPL A; 状态取反 ANL A, #0FH; 屏蔽A的高半字节 SWAP A; A的高低半字节交换 MOV P1, A; 开关状态输出 RETI; 中断返回 END
11
补充内容 单片机简单I/O扩展 利用中、小规模集成电路芯片实现的单片机I/O扩展。 1、简单输入口扩展
简单输入口扩展只用于解决数据输入的缓冲问题,因此,简单输入接口的扩展就是扩展数据缓冲器。 典型芯片:74LS244,245 2、简单输出口扩展 简单输出口扩展主要用于进行数据保存,因此,简单输出口的扩展就是扩展数据锁存器。 典型芯片:74LS377、273、373
12
例:采用74LS244作为扩展输入、74LS273作为扩展输出的简单I/O口扩展。
(1)芯片及连线说明 74LS244为8缓冲线驱动器,为低电平有效的使能端。 74LS273为8D触发器,为低电平有效的清除端。当=0时,输出全为0且与其它输入端无关;CP端是时钟信号,当CP由低电平向高电平跳变时刻,D端输入数据传送到Q输出端。 P0口作为双向8位数据线,既能够从74LS244输入数据,又能够从74LS273输出数据。 输入控制信号由P2.0和/RD相“或”后形成。当二者都为0时,74LS244的控制端有效,选通74LS244,外部的信息输入到P0数据
13
总线上。当与74LS244相连的按键都没有按下时,输入全为1,若按下某键,则所在线输入为0。
输出控制信号由P2.0和/WR相“或”后形成。当二者都为0后,74LS273的控制端有效,选通74LS273,P0上的数据锁存到273的输出端,控制发光二极管LED,当某线输出为0时,相应LED亮。 (2)I/O口地址确定 因为74LS244和74LS273都是在P2.0为0时被选通的,所以二者的口地址都为FEFFH。 (3)程序设计 CONT:MOV DPTR, #0FEFFH; 数据指针指向口地址 MOVX A, @DPTR; 检测按键,向74LS244读入数据 MOVX @DPTR,A; 向74LS273输出数据,驱动LED LJMP CONT ; 循环
14
返回
15
返回
16
返回
17
返回
18
返回
19
返回
20
返回
21
1A1 2 1A2 4 1A3 6 1A4 8 2A1 11 2A2 13 2A3 15 2A4 17 1Y1 18 1Y2 16 1Y3 14 1Y4 12 2Y1 9 2Y2 7 2Y3 5 2Y4 3 1G 1 2G 19 74LS244 2 18 A0 B0 3 17 A1 B1 4 16 A2 B2 5 15 A3 B3 6 14 A4 B4 7 13 A5 B5 8 12 A6 B6 9 11 A7 B7 19 E 1 DIR 74LS245 返回
22
返回 D1 3 Q1 2 D2 4 Q2 5 D3 7 Q3 6 D4 8 Q4 9 D5 13 Q5 12 D6 14 Q6 15 D7 17 Q7 16 D8 18 Q8 19 CLK 11 CLR 1 74LS273
23
返回
24
7.2 可编程并行接口芯片8255 所谓可编程的接口芯片是指其功能可由微处理机的指令来加以改变的接口芯片,利用编程的方法,可以使一个接口芯片执行不同的接口功能。 硬件逻辑结构 1、封装及引脚定义; 2、内部结构;
26
工作方式 8255有三种工作方式:方式0、方式1、方式2。 1、方式0(基本输入/输出方式):A口、B口及C口高4位、低4位都可以设置输入或输出,不需要选通信号。单片机可以对8255进行I/O数据的无条件传送,外设的I/O数据在8255的各端口能得到锁存和缓冲。 2、方式1(选通输入/输出方式):A口和B口都可以独立的设置为方式1,在这种方式下,8255的A口和B口通常用于传送和它们相连外设的I/O数据,C口作为A口和B口的握手联络线,以实现中断方式传送I/O数据。C口作为联络线的各位分配是在设计8255时规定的,分配表如表所示。
27
表 8255C口联络信号分配表 C口各位 方式1 方式2 输入方式 输出方式 双向方式 PC0 INTRB 由B口方式决定 PC1 IBFB
SETB PC3 INTRA PC4 I/O PC5 IBFA PC6 PC7
28
3、方式2(双向数据传送方式):方式2是在方式1的基础上加上双向传送功能,但只有A口才能选择这种工作方式,这时A口既能输入数据又能输出数据。
如果把A口置于方式2下,则B口只能工作于方式0。 分配表如表所示。 的编程内容 8255的编程内容主要是两条控制命令,即工作方式命令和C口位置位/复位命令。 1、工作方式命令 2、C口位置位/复位命令 3、初始化编程
30
例:设8255控制字寄存器的地址为00F3H,试编程使A口为方式0
输出,B口为方式0输入,PC4~PC7为输出,PC0~PC3为输入。 MOV DPTR, #00F3H MOV A, #83H MOVX @DPTR, A 例:设8255控制字寄存器地址为00F3H,要求将PC1置1,PC3清0。 MOV A, #03H MOV A, #06H
31
接口应用 1、8255与单片机的接口电路设计
32
数据线:8255的8根数据线D0~D7直接和P0口一一对应相连。
控制线:8255的复位线RESET与单片机的复位端相连,在图中未 画出。 地址线:8255的/CS和A1、A0分别由P0.7和P0.1、P0.0经地址锁 存器74LS373后提供。 8255的I/O口线: 可以根据用户需要连接外部设备。 图中,A口作输出,接8个发光二极管LED;B口作输入, 接8个按键开关;C口未用。
33
2、8255的可编址端口的地址确定 假设没有连接的地址线状态为0 A15 A14 A13 A12 A11 A10 A9 A8
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 A1 A0 A口: × × × × × × × × 0 × × × × × 0 0 B口: × × × × × × × × 0 × × × × × 0 1 C口: × × × × × × × × 0 × × × × × 1 0 控制口:× × × × × × × × 0 × × × × × 1 1
34
根据上述接法,8255的A、B、C以及控制口的地址分别为
0000H、0001H、0002H和0003H。 3、8255的编程应用 例:如果在8255的B口接有8个按键,A口接有8个发光二极 管,即类似于图中按键和二极管的连接,则下面的程序能够完 成按下某一按键,相应的发光二极管发光的功能。 ORG H LJMP MAIN ORG H MAIN: MOV DPTR, #0003H ;指向8255的控制口 MOV A, #83H MOVX @DPTR, A;向控制口写控制字,A口输出,B口输入
35
LOOP:MOV DPTR, #0001H ;指向8255的B口
MOVX A, @DPTR ;检测按键,将按键状态读入A 累加器 MOV DPTR, #0000H ;指向8255的A口 MOVX @DPTR, A ;驱动LED发光 LJMP LOOP END
36
#include<reg52.h>
#include<absacc.h> #define COM8255 XBYTE[0x0003] #define PA XBYTE[0x0000] #define PB XBYTE[0x0001] int aa; void main() { COM8255=0X83; for( ; ; ) { aa= PB8255 ; PA8255 =aa; }
37
7.3 键盘接口技术 补充内容 单片机键盘和键盘接口概述 (1)键盘的功能:
7.3 键盘接口技术 补充内容 单片机键盘和键盘接口概述 (1)键盘的功能: 键盘是单片机应用系统最常见的一种输入设备,用户通过键盘可以向CPU输入数据、地址和命令。 (2)键盘的分类: (a)键盘按照接口原理可分为编码键盘与非编码键盘两类。这两类键盘的主要区别是识别键符及给出相应键码的方法。 编码键盘主要是用硬件来实现对键的识别; 非编码键盘主要是由软件来实现键盘的定义与识别。 (b)键盘按照其结构可分为独立式键盘与矩阵式键盘两类。 独立式键盘主要用于按键较少的场合;
38
矩阵式键盘主要用于按键较多的场合,也称行列式键盘。
(3)MCS-51单片机键盘接口方法及接口芯片: (a)利用单片机芯片本身的并行口; (b)利用单片机芯片本身的串行口; (c)利用通用接口芯片(8255、8155等); (d)利用专用接口芯片8279。 (4)单片机键盘接口电路应完成的操作功能: (a)判定是否有闭合键; (b)确定闭合键的位置; (c)形成闭合键的键码; (d)排除多键、串键及去抖动。 以上操作功能通常是以软硬件结合的方式来完成的。
39
(5)单片机键盘按键的结构及特点: (a)单片机键盘按键的结构; 单片机的键盘通常是由多个按键组成的,按键通常有两类: 1)触点式开关按键:如机械式开关、导电橡胶式开关等; 2)无触点式开关按键:如电气式按键,磁感应按键等; 前者造价低,后者寿命长。单片机应用系统中最常见的是机械触点式开关按键。 (b)机械触点式开关按键的功能及特点; 1)机械触点式开关按键的功能: 把开关按键机械上的通断关系转换成为电气上的逻辑关系。也就是说,它能提供标准的TTL逻辑电平,以便与通用数字系统的逻辑电平相兼容。
40
2)机械触点式开关按键的特点: 机械触点式开关按键的理想波形:见图 机械触点式开关按键的实际波形:见图 机械开关特点:闭合时,不会马上稳定地接通。 断开时,也不会一下子断开。 即在闭合,断开的瞬间,均伴随有一连串的抖动,抖动时间的长短由按键机械特性决定,一般为5~10ms,按键闭合稳定期长短由操作人员按键动作决定,一般为十分之几秒到几秒。
41
(6)按键的确认: 键的闭合与否,反应在口线的电平上,即口线的电平是呈现高电平还是低电平状态。因此,可以通过口线电平高、低状态的检测,来确认按键是否按下。 但如果在触点抖动期间检测按键的通与断状态,可能导致判断出错,即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,确保CPU对一次按键动作只确认一次按键,必须采取去抖动措施。 (7)消除按键抖动的措施: 具体措施可从硬件、软件两方面予以考虑。在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。
42
(a)硬件措施: 由两个与非门构成一个RS触发器,当按键未按下时,OUT1输出为“1”,OUT2输出为“0”。当按键按下时,则OUT1输出为“0”,OUT2输出为“1”。
43
即使在按键过程中产生抖动(在与非门输入端输入一串O或1),只要按键不返回原始状态,经双稳态电路之后,其输出为正规的矩形方波(即已消失抖动影响)。
(b)软件措施: 在第一次检测到有键按下时,执行一段延时10ms的子程序,之后,再次检测该键的电平状态,如果该键电平仍保持闭合状态电平,则确认为真正有键按下。否则,认为无键按下;同理,在检测到该键释放后,也应采用相同的步骤进行确认,从而可消除抖动的影响。 (8)按键的编码 根据键盘结构的不同,采用不同的编码方式。
44
(9)编制键盘程序 一个完善的键盘控制程序应具备以下功能: (a)检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响; (b)有可靠的逻辑处理办法。每次只处理一个按键,其间对任何按键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序; (c)准确输出按键编码值(或键号),以满足跳转指令要求。
45
返回
46
补充内容:独立式键盘接口技术 (1)独立式键盘结构
独立式键盘的按键相互独立,每个按键接一根I/O口线,一根I/O口线上的按键工作状态不会影响其它I/O口线的工作状态。因此,通过检测I/O口线的电平状态,即可判断键盘上哪个键被按下。
47
(2)独立式键盘的程序设计 一般把键盘扫描程序设计成子程序,以便其它各程序调用。程序设计通常采用查询法。假设键盘扫描子程序的名称为KEY,则键盘扫描子程序KEY应具有以下功能: (a)判定有无按键动作; (b)去抖动; (c)确认是否真正有闭合键; (d)计算并保存闭合键键码(键号); (e)判定闭合键是否释放; (f)恢复闭合键键码(键号)。 以上图为例,说明独立式键盘的程序设计过程: 假设八个按键名称依次是KEYA、KEYB、KEYC、KEYD、KEYE、KEYF、KEYG、KEYH ;显示子程序的名称为DIR,执行一次时间约6ms。
48
(3)键盘扫描子程序KEY流程框图:
49
(4)键盘扫描子程序KEY程序清单: 键盘扫描子程序KEY:出口:键值在内部RAM 20H单元中 KEY:LCALL KEYCHULI; 调P1口数据处理子程序 JZ EXIT; 没有键按下,转返回 LCALL DIR; 调显示子程序去抖动 LCALL DIR; LCALL KEYCHULI; 调P1口数据处理子程序 MOV B, 20H; 保存取反后的键值 KEYSF:LCALL KEYCHULI; 调P1口数据处理子程序 JZ KEY1; 键释放,转恢复键值 LCALL DIR; 调显示子程序延时 LJMP KEYSF; 等待键释放 KEY1:MOV H, B; 键值送20H保存 EXIT: RET; 子程序返回
50
P1口数据处理子程序KEYCHULI:出口:A,20H
KEYCHULI:PUSH PSW; 保护现场 CLR RS1; 改变当前寄存器组为组1 SETB RS0; MOV P1, #0FFH;先向P1口写1 MOV A; P1; 读P1口数据 CPL A; P1口数据取反 ANL A, #FFH; MOV H, A; 保存取反后的键值 CLR RS1; 恢复当前寄存器组为组0 CLR RS0; POP PSW; 恢复现场 RET; 子程序返回
51
uchar key( ) { uchar keys,keyzhi; keys= keychuli( ); if(keys!=0) /*判断按键,如果有键按下*/ dir( ); keys=keychuli( ); if(keys!=0) /*再次判断,如果有键按下 */ keyzhi=keys; while(keys!=0) /*等待键释放 */ } return keyzhi;
52
uchar keychuli() { uchar key; P1=0xff; /*向P1写1 */ key=P1; /*读P1数据 */ key=~key; key=key&0xff; return key; }
53
(5)系统监控程序流程框图: 假设八个按键KEYA、KEYB、KEYC、KEYD、KEYE、KEYF、KEYG、KEYH的功能程序名分别是KEYAA、KEYBB、KEYCC、KEYDD、KEYEE、KEYFF、KEYGG、KEYHH ,则流程框图如图所示: (6)系统监控程序: ORG H LJMP MAIN ORG H MAIN:MOV SP, #60H;堆栈初始化 LOOP:LCALL DIR; 调显示子程序 LCALL KEY; 调键扫描子程序 JB H.0 KEYAA;是KEYA键,转KEYAA执行 JB H.1 KEYBB;是KEYB键,转KEYBB执行
54
JB 20H.2 KEYCC;是KEYC键,转KEYCC执行
JB H.3 KEYDD;是KEYD键,转KEYDD执行 JB H.4 KEYEE;是KEYE键,转KEYEE执行 JB H.5 KEYFF;是KEYF键,转KEYFF执行 JB H.6 KEYGG;是KEYG键,转KEYGG执行 JB H.7 KEYHH;是KEYH键,转KEYHH执行 LCALL DIR; LJMP LOOP; 重复执行 KEYAA:……; KEYA键功能程序 LJMP LOOP; KEYBB:……; KEYB键功能程序 KEYCC:……; KEYC键功能程序 KEYDD:……; KEYD键功能程序
55
KEYEE:……; KEYE键功能程序 LJMP LOOP; KEYFF:……; KEYF键功能程序 KEYGG:……; KEYG键功能程序 KEYHH:……; KEYH键功能程序 END
56
ORG H LJMP MAIN ORG H MAIN:MOV SP, #60H;堆栈初始化 LOOP:LCALL DIR; 调显示子程序 LCALL KEY; 调键扫描子程序 MOV A, H; 键值送A KEY0:CJNE A, #01H, KEY1;不是KEYA键,转KEY1 LJMP KEYAA; 是KEYA键,转KEYAA执行 KEY1:CJNE A, #02H, KEY2;不是KEYB键,转KEY2 LJMP KEYBB; 是KEYB键,转KEYBB执行 KEY2:CJNE A, #04H, KEY3;不是KEYC键,转KEY3 LJMP KEYCC; 是KEYC键,转KEYCC执行 KEY3:CJNE A, #08H, KEY4;不是KEYD键,转KEY4 LJMP KEYDD; 是KEYD键,转KEYDD执行
57
KEY4:CJNE A, #10H, KEY5;不是KEYE键,转KEY5
LJMP KEYEE; 是KEYE键,转KEYEE执行 KEY5:CJNE A, #20H, KEY6;不是KEYF键,转KEY6 LJMP KEYFF; 是KEYF键,转KEYFF执行 KEY6:CJNE A, #40H, KEY7;不是KEYG键,转KEY7 LJMP KEYGG; 是KEYG键,转KEYGG执行 KEY7:CJNE A, #80H, KEY8;不是KEYH键,转KEY8 LJMP KEYHH; 是KEYH键,转KEYHH执行 KEY8:LCALL DIR; LJMP LOOP; 重复执行 KEYAA:……; KEYA键功能程序 LJMP LOOP; KEYBB:……; KEYB键功能程序 KEYCC:……; KEYC键功能程序 KEYDD:……; KEYD键功能程序
58
KEYEE:……; KEYE键功能程序 LJMP LOOP; KEYFF:……; KEYH键功能程序 KEYGG:……; KEYG键功能程序 KEYHH:……; KEYH键功能程序 END
59
void main(void) { uchar keys; while(1) dir( ); keys=keyscan(); switch(keys) case 0x00:break; case 0x01:keyaa();break; case 0x02:keybb();break; case 0x04:keycc();break; case 0x08:keydd();break; case 0x10:keyee();break; case 0x20:keyff();break; case 0x40:keygg();break; case 0x80:keyhh();break; default:break; } }}
60
返回
61
7.4 LED显示器接口技术 单片机应用系统中的显示器通常有LED显示器、LCD显示器及CRT显示器三种类型。 7.4.1 LED显示器概述
LED(Light Emiting Diode)是发光二极管的缩写, LED显示器是由发光二极管构成的,俗称数码管。 (1) LED显示原理: LED显示器由七个发光二极管组成,称七段LED显示器,排列形状如图所示。此外,显示器中还有一个圆点发光二极管(dp),用于显示小数点。通过七段发光二极管亮暗的不同组合,可以显示多种数字(0~9),字母(a~f、A~F)及其它符号。另外,在使用数码管时必须增加限流电阻,以保护数码管。
62
LED显示器中的发光二极管共有两种连接方法:
(a)共阳极接法: 各发光二极管的阳极连接在一起,接到数码管的位控端(公共端),再接+5V;各发光二极管的阴极分别连接到数码管的段控端(a~g、dp)。 (b)共阴极接法 : 各发光二极管的阴极连接在一起,接到数码管的位控端(公共端),再接地;各发光二极管的阳极分别连接到数码管的段控端(a~g、dp)。 为了显示数字或符号,要为LED显示器提供代码,由于这些代码是为显示字形的,因此称之为字形代码。
63
七段发光二极管,再加上一个小数点位,共计8段。因此,提供给LED显示器的字形代码正好为一个字节。各代码位的对应关系如下:
显示段 dp g f e d c b a 用LED显示器显示十六进制数字形代码如表所示:
64
字型 共 阳 极 共 阴 极 g f e d c b a 字型码 G 1 C0H 3FH F9H 06H 2 A4H 5BH 3 B0H
显示字符 字型 共 阳 极 共 阴 极 dp g f e d c b a 字型码 G 1 C0H 3FH F9H 06H 2 A4H 5BH 3 B0H 4FH 4 99H 66H 5 92H 6DH 6 82H 7DH 7 F8H 07H 8 80H 7FH 9 90H 6FH A 88H 77H B 83H 7CH C C6H 39H
65
字型 共 阳 极 共 阴 极 dp g f e d c b a 字型码 G D 1 A1H 5EH E 86H 79H F 8EH 71H
显示字符 字型 共 阳 极 共 阴 极 dp g f e d c b a 字型码 G D 1 A1H 5EH E 86H 79H F 8EH 71H H 89H 76H L C7H 38H P 8CH 73H R CEH 31H U C1H 3EH Y 91H 6EH BFH 40H . 7FH 80H 熄灭 灭 FFH 00H
66
(2)LED显示器接口方法: (a)以硬件为主的接口方法 必须使用地址译码器、锁存器或I/O接口电路,还需专用的译码驱动器,通过译码器把一位十六进制数(四位二进制)译码为相应的字形代码,然后由驱动器提供足够的功率去驱动LED。 (b)以软件为主的接口方法 主要以软件查表来代替硬件译码,也需简单的硬件电路配合。 (3)LED显示器的显示方式: (a)LED静态显示方式 LED显示器各位数码管的位控线(公共端)连接在一起并接地(共阴极)或+5V(共阳极);各位数码管的段选线(a~dp)分别与一8位的锁存器输出相连。
67
LED静态显示方式中,显示器的各位相互独立,而且各位的显示字符一经确定,相应锁存器输出将维持不变,直到显示另一个字符为止,其亮度较高。
缺点:占有较多I/O口线及较多锁存器。 (b)LED动态显示方式 将LED显示器各位数码管的所有段控端(a~dp)相应地并联在一起,由一个8位I/O口控制,形成段选线多路复用,而各位数码管的共阳极或共阴极要分别由相应的I/O口线控制,实现各位的分时选通。 由于各位数码管的段选线并联,段选码的输出对各位数码管的来说都是相同的。因此,同一时刻,如果各位的位选线都处于选通状态的话,8位LED将显示相同的字符。
68
若需要各位数码管显示出与本位相应的显示字符,就必须采用扫描显示方式,即在某一时刻,只让某一位数码管的位选线处于选通状态,而其它各位数码管的位选线处于关闭状态,同时,段选线上输出相应位要显示字符的字型码。这样,在同一时刻,8位LED中只有选通的那一位数码管显示出字符,而其它各位数码管则是熄灭的,如此循环下去,就可以使各位数码管显示出将要显示的字符。 特点:硬件电路简化,但由于LED导通时间太短,亮度不足,应增加驱动器已提高驱动能力,而且显示位数控制在8位以内。
69
LED显示器接口 (a)8位LED显示器的接口电路(共阴极) 假设LED显示器的数码管为共阴极连接,采用动态显示。 以P2口为位控,P0口为段控。 (b)LED显示器动态显示过程 P0口输出字形代码,字形代码通过LED数码管的dg~a端加到6个LED上; P2口输出位控代码,位控代码通过LED数码管的位控端(LED数码管的公共极)加到8个LED上。
70
如果要使其中一只LED数码管发亮,则使其位控CX有效即可;
1)输出字形代码,使LED0的位控C0有效,LED0数码管发亮; 2)接着使LED0的位控C0无效,则LED0数码管熄灭;然后输出字形代码,使LED1的位控C1有效,则LED1数码管发亮; 3)依此送出字形代码,同时使C2~C7有效,即可使8位LED显示器完成一次显示。 4)反复循环执行上述各步骤,即可使8位LED显示器一直显示下去。
71
(c)8位LED显示器的显示缓冲区 为了存放显示的数字或字符,通常在内部RAM中设置显示缓冲区,其单元个数与LED显示器数码管的位数相同。 假设显示缓冲区8个显示缓冲单元地址依次为78H~7FH,则显示缓冲单元与LED显示器数码管对应关系如下: 假设动态扫描从右向左进行,则缓冲区首地址应为78H。 (d)8位LED显示器显示子程序流程框图: 在编写LED显示器显示程序时,通常将其编为子程序形式,以便于其它程序调用。 在LED显示子程序中,调用了延时子程序,使LED稳定点亮。 LED7 LED6 LED5 LED4 LED3 LED2 LED1 LED0 7FH 7EH 7DH 7CH 7BH 7AH 79H 78H
72
在LED显示子程序的开始部分,需要进行现场保护,在子程序返回之前同样需要现场恢复。
在调用LED显示子程序之前,必须将要显示的信息送入内部RAM中设置的显示缓冲区中。 (e)8位LED显示器显示子程序 假设8位LED显示器显示子程序的名称为DIR,延时子程序的名称为DL。 假设显示信息字形代码(段控码)表名称为DSEG。
73
DIR:PUSH DPH; 现场保护 PUSH DPL; PUSH ACC; PUSH PSW; SETB RS0; 改变当前通用寄存器组组号 CLR RS1; MOV R0, #78H; 建立显示缓冲区首址 MOV R3, #01H; 从右数第一位LED开始扫描 MOV A, R3; 位控码初值送A LD0:MOV P2, A; 输出位控码
74
MOV DPTR,#DEEG; 表格首地址 MOV A, @R0; 从显示缓冲区取出显示数据 MOVC A, @A+DPTR;查表取字形代码(段控码) MOV P0, A; 输出段控码 LCALL DL; 延时 INC R0; 转向下一缓冲单元 MOV A, R3; JB ACC.7,LD1; 是否显示到最高位 RL A; 不到,向显示器高位移位 MOV R3, A; 修改后的位控码送R3保存 LJMP LD0; 继续扫描
75
LD1:CLR RS0; 恢复当前通用寄存器组组号
POP PSW; POP ACC; 恢复现场 POP DPL; POP DPH; RET DSEG:DB 3FH,06H,5BH,4FH,66H,6DH,7DH;0~6 07H,7FH,6FH,77H,7CH,39H,5EH;7~9 79H,71H,00H,0F3H;A~F,灭,P. 思考题:1)利用DJNZ指令,修改显示子程序DIR?
76
#include<reg52.h>
#include<intrins.h> #define uchar unsigned char #define uint unsigned int uchar code disp_DK[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar find_code[]; /* 显示缓冲数组**/ void Delay_ms(uint xms) { uchar i; while(xms--) for(i=0;i<120;i++); } void display() { uchar i,k,aa; aa=0x01; for(i=0;i<8;i++) //扫描8次,将8数码管扫描一遍 { P2=aa; //送P2口控制被选中的数码管被点亮 k=find_code[i]; P0=disp_DK[k]; //送到P0口显示相应的数字 aa=_crol_(aa,1); Delay_ms(1); //延时1mS }}
77
返回
78
返回
79
返回
80
返回
81
返回
82
八 返回
83
返回
84
返回
85
返回
Similar presentations