1. 单个按键的连接与应用

34
1. 微微微微微微微微微微 常常常常常 常常常常常常常常 常常常常常常 常常常 常常常常常 ,:。一, 常常常常常常 常常常常 常常常常常常常 常常常常常常常常常常常常常 ;,。 常常常常常常常“ 0” 常“ 1” 常常常 常常常常常常常常常常 CPU 常常常常常常常常微微微微微微 一、

Upload: richard-hartman

Post on 31-Dec-2015

101 views

Category:

Documents


0 download

DESCRIPTION

一、键盘及其接口. 1. 单个按键的连接与应用. 常用的按键,都存在两种状态:断开和闭合。当某一键被按下,则为闭合状态;键释放,则为断开状态。键盘电路的功能就是将键的闭合和断开状态用“ 0” 和“ 1” 来表示,然后通过数据总线送到 CPU 内部进行键的识别。. 图 9 - 18 为单个键的输入电路。用下列两条指令可以识别按键是否被按下:. IN AL, 20H. AND AL, 01H. 程序执行结果若 AL 内容为零( ZF=1 ),说明键被按下;若 AL 内容为非零( ZF=0 ),则说明键未被按下。. 在键处理过程中,有二个问题必须注意:. - PowerPoint PPT Presentation

TRANSCRIPT

微机原理及接口技术

第九章

微机原理及接口技术

第九章

1. 单个按键的连接与应用

常用的按键,都存在两种状态:断开和闭合。当某一键被按下,则为闭合状态;键释放,则为断开状态。键盘电路的功能就是将键的闭合和断开状态用“ 0” 和“ 1” 来表示,然后通过数据总线送到 CPU 内部进行键的识别。

一、键盘及其接口

微机原理及接口技术

第九章

微机原理及接口技术

第九章

图 9 - 18 为单个键的输入电路。用下列两条指令可以识别按键是否被按下:

IN AL, 20H

AND AL, 01H

9-18 单个键输入电路

CPU DB0

RD

20H

K

+ 5 V

9-18 单个键输入电路

CPU DB0

RD

20H

K

+ 5 V

程 序 执 行 结 果 若 AL

内 容 为 零 ( ZF=1 ) ,说明键被按下;若 AL

内 容 为 非 零 ( ZF=

0 ) , 则 说 明 键 未 被按下。

微机原理及接口技术

第九章

微机原理及接口技术

第九章

在键处理过程中,有二个问题必须注意:

(1) 键抖动的处理

在实际按键操作中,由于按键动作是一个机械动作,键在闭合或断开的过程会发生抖动,如图 9 - 19 所示。

9-19 键抖动过程

微机原理及接口技术

第九章

微机原理及接口技术

第九章

键抖动时间的长短与开关的机械特性有关,

一般为 5ms ~ 10ms 左右,然后达到稳定状态。

在键盘接口,为了保证 CPU 对键的闭合作一

次且仅作一次处理,必须去除抖动,使 CPU

在键的稳定闭合或断开状态时读取键值。

微机原理及接口技术

第九章

微机原理及接口技术

第九章

在键盘接口中,使用更普遍的是采用软件延时的方法来完成消抖。其基本思想是:在检测到按键按下或释放时,记录按键的状态,延时 10ms ~ 20ms ,再次检测按键的状态,若与前一次的状态相同,说明按键的状态已稳定,可进行处理;否则,表示键的状态不稳定,可能是误动作,不应被处理。

微机原理及接口技术

第九章

微机原理及接口技术

第九章

对于图 9 - 18 电路中单个键的处理,可以使用如下程序:

IN AL , 20H ;读取键状态AND AL , 01H

JNZ EXIT ;无键按下,退出键处理程序CALL Delay ;延时 10ms

IN AL , 20H ;再次读取键状态AND AL , 01H

键处理程序…

JNZ EXIT ;无键按下,退出键处理程序

微机原理及接口技术

第九章

微机原理及接口技术

第九章

(2) 单个按键动作的确认

由于 CPU 的程序执行比按键的机械动作快得多,使得一次按键动作期间, CPU 检测到有按键并执行了相应的键处理程序以后,按下的键可能还没有被释放,因此,在 CPU 再一次测试键盘状态时,该键又被认为是按下状态,从而出现按一次键而 CPU 进行二次或多次键处理的情况。这是一个明显的误操作。解决方法有多种,最简便的解决方法是 CPU 在测试到有键接下时,一直等到键释放才作相应的键处理。

微机原理及接口技术

第九章

微机原理及接口技术

第九章

对于图 9 - 18 ,可采用如下程序段来实现单个按键动作的确认:

IN AL , 20H ;读取键状态

AND AL , 01H

JNZ EXIT ;没有键按下,退出键处理程序

CALL Delay ;延时 10 毫秒

IN AL , 20H ;再次读取键状态

AND AL , 01H

JNZ EXIT ;无键按下,作为误动作退出键处理程序

微机原理及接口技术

第九章

微机原理及接口技术

第九章

L1 : IN AL , 20H ;读取键状态

AND AL , 01H ;等待键释放

JZ      L1

键处理程序

CALL Delay ;键释放时消抖

IN AL , 20H

AND AL , 01H

JZ L1

微机原理及接口技术

第九章

微机原理及接口技术

第九章

2. 线性键盘及其接口

线性键盘由若干独立的按键组成。每个按键将其一端与微机系统中某输入端口的一位数据线相连,另一端接地。其接口程序简单,只要查询该输入端口各位的状态,便可判断是否有键按下,以及按下的具体是哪一个键。

微机原理及接口技术

第九章

微机原理及接口技术

第九章

CPU DB0

RD20H

K0

K1

K2

K3

+5V

图9-20 多键接口电路

CPU DB0

RD20H

K0

K1

K2

K3

+5V

图9-20 多键接口电路

微机原理及接口技术

第九章

微机原理及接口技术

第九章

IN AL , 20H

SHR AL , 1

JNC K0 ;转键 K0 的处理程序

SHR AL , 1

JNC K1 ;转键 K1 的处理程序

SHR AL , 1

JNC K2 , ;转键 K2 的处理程序

SHR AL , 1

JNC K3 ;转键 K3 的处理程序

微机原理及接口技术

第九章

微机原理及接口技术

第九章

当然,上述程序段只是完成键识别的工作。在实际应用中,还要考虑键抖动问题的处理以及单个按键动作的确认问题。

线性键盘有多少按键,就有多少根连线与微机输入端口相连,因此只适合于按键少的应用场合,常用于某些微机化仪器或专用微机系统中。

微机原理及接口技术

第九章

微机原理及接口技术

第九章

3. 矩阵键盘及其接口

矩阵键盘的按键排成 n 行 m 列,每个按键占据行列的一个交叉点,需要的输入输出线为 n+m ,最大按键数为 n×m 。显然,在按键较多的应用场合,矩阵键盘可以减少与微机系统接口的连线,是一般微机常用的键盘结构。

微机原理及接口技术

第九章

微机原理及接口技术

第九章

图 9 - 21 为一个 3×4 矩阵键盘及其接口电路。

图9-21 3×4矩阵键盘的接口

PA0

PB0

8255A

PA1

PA2

PB1

PB2

PB3

键0 1 2 3

5 6 74

9 0A 0B8

行0

行1

行3

+5V列0 列1 列2 列3

图9-21 3×4矩阵键盘的接口

PA0

PB0

8255A

PA1

PA2

PB1

PB2

PB3

键0 1 2 3

5 6 74

9 0A 0B8

行0

行1

行3

+5V列0 列1 列2 列3

图 9-21   3×4 矩阵键盘的接口

微机原理及接口技术

第九章

微机原理及接口技术

第九章

图 9 - 22 是实现键处理工作的程序流程。

图9-22 键处理程序流程

初始化

检测键是否已按下?

消抖

判别按键确已按下?

确定键值

等待键释放

键值处理

N

N

Y

Y

图9-22 键处理程序流程

初始化

检测键是否已按下?

消抖

判别按键确已按下?

确定键值

等待键释放

键值处理

N

N

图9-22 键处理程序流程

初始化

检测键是否已按下?

消抖

判别按键确已按下?

确定键值

等待键释放

键值处理

N

N

Y

Y

设图 9 - 21 中 8255A 的端口地址为 00H( A 口 )、 02H ( B口)、 04H ( C 口)和06H (控制口),键处理的程序如下:

微机原理及接口技术

第九章

微机原理及接口技术

第九章

;确定按键闭合,等待键按下MOV AL , 82H

OUT 06H , AL ; 8255A初始化,选择方式 0 , A 口为输

;出, B 口为输入MOV AL , 0

OUT 00H , AL ;使各行线接地(为 0 电平)LOP1: IN AL , 02H ;读列线状态

AND AL , 0FH ;屏蔽无用位,保留列线位CMP AL , 0FH ;有列线为 0 电平吗?JZ LOP1 ;无,则继续查列线状态,等待键按下

微机原理及接口技术

第九章

微机原理及接口技术

第九章

;识别按下的键

MOV BL , 3 ;行数送 BL

MOV BH , 4 ;列数送 BH

MOV AL , 11111110B ;起始扫描码,第一次使行线 0 接地

MOV CH , 0FH ;设置屏蔽码

MOV CL , 0FFH ;取键号初值为 FFH

微机原理及接口技术

第九章

微机原理及接口技术

第九章

LOP2: OUT 00H , AL ;逐行扫描ROL AL ;修改扫描码,准备扫描下一行MOV AH , AL ;扫描码送 AH 保存IN AL , 02H ;读列线数据AND AL , CL ;屏蔽无用位,保留列线位CMP AL , CL ;有列线接地吗?JNZ LOP3 ;有,转去找该列线ADD CH , BH ;否,修改键号,使适合下一行MOV AL , AH ;扫描码送 AL

DEC BL ;行数减 1

JNZ LOP2 ;未扫描完,转下一行JMP BEGIN

微机原理及接口技术

第九章

微机原理及接口技术

第九章

LOP3: INC CH ;键号加 1

RCR AL ;带进位循环右移一位JC LOP3 ; C=1 ,说明该列未接地,

转去检查下一列线MOV AL , CH ;是,键号送 AL

CMP AL , 0 ;是 0号键吗?JZ KEY0 ;转 0号键处理程序CMP AL , 1 ;是 1号键吗?JZ KEY1 ;转 1号键处理

CMP AL , 0BH ;是 B号键吗?JZ KEY 口 ;转 B号键处理

微机原理及接口技术

第九章

微机原理及接口技术

第九章

二 . LED( 发光二极管 ) 显示器及其接口二 . LED( 发光二极管 ) 显示器及其接口1 、七段 LED 显示器的结构

微机原理及接口技术

第九章

微机原理及接口技术

第九章

p g f e d c b a

D7 D6 D5 D4 D3 D2 D1 D0

a

e

f g b

c

d p

共阳极 LED ,使 a, b, g, e, d 段为低电平,其他段为高电平,即显示“ 2” 。 ( 显示代码 A

4H) 。共阴极 LED ,使 a, f, g, c, d 为高电平,其

他段为低电平,即显示“ 5”( 显示代码 6DH) 。

微机原理及接口技术

第九章

微机原理及接口技术

第九章

数字 0~9 ,对应的七段显示代码如下表 1 所示

数 码 十六进制表示的七段显示码共阳极 共阴极

0123456789

C0F9A4B0999282F88098

3F065B4F666D7D077F67

微机原理及接口技术

第九章

微机原理及接口技术

第九章

2. 七段显示吗的译码方法

( 1 )采用专用芯片,即采用专用的带驱动器的 LED 段译码器,比如 CD4511 ,可以实现对 BCD码的译码,但不能对大于 9 的二进制数译码。 CD4511 有 4 位显示数据输入, 7

位显示段输出, 3 位控制信号输入。使用时,只要将 CD4511 的输入端与微机系统输出端口的某 4 个数据位相连,而 CD4511 的的输出直接与 LED 的 a ~ g 相接,便可实现对 1 位 BC

D码的显示。具体电路如图 9 - 24 所示。

微机原理及接口技术

第九章

微机原理及接口技术

第九章

(b)

a

ce

f

d

g b

A

B

C

D

E

F

G

A

B

C

D

LT

BT

LE

A

B

C

D

E

F

G

A

B

C

D

LT

BT

LE

VCC

显示数据

(a)

图9-24 采用CD4511的LED显示电路

(b)

a

ce

f

d

g b

a

ce

f

d

g b

A

B

C

D

E

F

G

A

B

C

D

LT

BT

LE

A

B

C

D

E

F

G

A

B

C

D

LT

BT

LE

VCC

显示数据

(a)

图9-24 采用CD4511的LED显示电路

微机原理及接口技术

第九章

微机原理及接口技术

第九章

( 2 )软件译码法。图 9 - 25 所示的采用 8255A 的 LED 接口,在软件设计时,在数据段定义 0 ~ F共 16 个数字(也可以为 0 ~9 或其他符号)的显示代码表,在程序中利用XLAT 指令进行软件译码。假设用共阳极 LE

D 来显示数据, 0 ~ F 的显示代码表就可以按0 ~ F 的顺序定义如下 :

微机原理及接口技术

第九章

微机原理及接口技术

第九章

DISPCODE DB 0C0H , 0F9H ,…, 06H , 0EH ;

a

ce

f

d

g b驱

图9-25 采用8255A的LED接口

a

b

g

8255

PA0

PA1

PA6

PA7

微机原理及接口技术

第九章

微机原理及接口技术

第九章

利用 8086 的换码指令 XLAT ,便可方便地实现数字到显示代码的译码。

假设要显示的数据存放的 BL 的低四位中,利用下面几条指令就可实现软件译码。

MOV AL , BL ;把要显示的数据送入 AL

AND AL , 0FH ;屏蔽无用位

LEA BX , DISPCODE ;显示代码表的首地址送 BXXLAT ;换码,相应的显示代码即

被存入 AL

微机原理及接口技术

第九章

微机原理及接口技术

第九章

3. 一种实用的多位 LED 显示接口

实际使用时,往往要用几个数码管实现多位显示。这时,如果每一个数码管占用一个独立的输出端口,那么,将占用太多的端口;而且,驱动电路的数目也很多。所以,要从硬件和软件两方面想办法节省硬件电路。

微机原理及接口技术

第九章

微机原理及接口技术

第九章

图 9 - 26 是一种多位显示的接口电路,这是一种常用的方案。在这种方案中,硬件上用公用的驱动电路来驱动各数码管;软件上用扫描方法实现数字显示。

微机原理及接口技术

第九章

微机原理及接口技术

第九章

D0~D7

位1 位2 位3 位4 位5 位6 位7位0 阳极a b c d e f g h

… … … … … … …D0

D1

D2

D3

D4

D5

D6

D7

D0~D7

D0

D1

D2

D3

D4

D5

D6

D7

bitport,IOW

segport,IOW

  段控制,正相寄存驱动

位控制,反相寄存驱动

D0~D7

位1 位2 位3 位4 位5 位6 位7位0 阳极a b c d e f g h

… … … … … … …D0

D1

D2

D3

D4

D5

D6

D7

D0~D7

D0

D1

D2

D3

D4

D5

D6

D7

bitport,IOW

segport,IOW

  段控制,正相寄存驱动

D0~D7

位1 位2 位3 位4 位5 位6 位7位0 阳极a b c d e f g h

… …… …… …… …… …… ……D0

D1

D2

D3

D4

D5

D6

D7

D0~D7

D0

D1

D2

D3

D4

D5

D6

D7

bitport,IOW

segport,IOW

  段控制,正相寄存驱动

位控制,反相寄存驱动

图9-26

 多位数码管显示接口示意图

微机原理及接口技术

第九章

微机原理及接口技术

第九章

下面是一段实现 8 位数码管依次显示一遍的子程序。实际应用中,只要按一定频率重复调用它,就可以获得稳定的显示效果。

MOV DI , OFFSET BUFDATA ;指向数字缓冲区

MOV CL , 0FEH ;指向最左边数码管

微机原理及接口技术

第九章

微机原理及接口技术

第九章

DISP: MOV AL , [DI] ;取出数字

MOV BX , OFFSET TABLE ;指向显示代码表

XLAT ;得到显示代码

MOV DX , SEGPORT ; segport 为段控制端口

OUT DX , AL ;送出段码

MOV AL , CL ;取出位显示代码

MOV DX , BITPORT ; bitport 为位控制端口

OUT DX , AL ;送出位码

CALL DELAY ;实现数码管延时显示

INC DI ;指向下一个数字

微机原理及接口技术

第九章

微机原理及接口技术

第九章

ROL CL , 1 ;指向下一个数码管

CMP CL , 0FEH ;是否指向最右边的数码管

JNZ DISP ;没有,显示下一个数字

RET ; 8 位数码管都显示一遍 , 返回

TABLE : DB 0C0H, 0F9H, 0A4H, 0B0H ;显示代码表

DB 99H, 92H, 82H, 0F8H

DB 80H, 90H, 88H, 83H

DB 0C6H, 0C1H 86H, 8EH

BUFDATA DB 8 DUP ( 0 ) ;数字缓冲区