8.1 键盘接口技术

34
第8第 AT89C51 第 第第第第 8.1 第第第第第第 8.1.1 行行行行行行行行行行行行行 行行行行行行行行行行行 行行 8-1 行行 行行行行行行行行行行行 行 行行 2×2 行行行行行行行行行行行行行行4×4 行行行行行行行行 16 行 行行行行 行行行行行行行行行 行行行行行行行 。, I/O 行行

Upload: archer

Post on 06-Jan-2016

76 views

Category:

Documents


3 download

DESCRIPTION

8.1 键盘接口技术. 8.1.1 行列式非编码键盘的工作原理 行列式键盘又叫矩阵键盘,如图 8-1 所示,按键设置在行列的交叉点上,如用 2×2 的行列结构可构成四个键的键盘, 4×4 的行列结构可构成 16 个键的键盘。在按键数量较多时,矩阵键盘可节省 I/O 口线。. 图 8-1 矩阵键盘与 AT89C51 接口连接图. 图 8-2 键闭合及断开时的电压抖动. 综上所述,对于非编码键盘,按键处理程序应具有如下四个功能: (1) 判断键盘上有无键按下。 (2) 去除键的机械抖动。 (3) 求按下键的键码。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

8.1 键盘接口技术

8.1.1 行列式非编码键盘的工作原理 行列式键盘又叫矩阵键盘,如图 8-1 所示,按键设置

在行列的交叉点上,如用 2×2 的行列结构可构成四个键的键盘, 4×4 的行列结构可构成 16 个键的键盘。在按键数量较多时,矩阵键盘可节省 I/O 口线。

Page 2: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

图 8-1 矩阵键盘与 AT89C51 接口连接图

Page 3: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

¼ü°´ÏÂ

Ç°Ñض¶¶¯ ¼üÎȶ¨ ºóÑض¶¶¯

图 8-2 键闭合及断开时的电压抖动

Page 4: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

综上所述,对于非编码键盘,按键处理程序应具有如下四个功能:

(1) 判断键盘上有无键按下。 (2) 去除键的机械抖动。 (3) 求按下键的键码。 (4) 闭合一次,只进行一次键功能操作。8.1.2 单片机对非编码键盘的控制方式 1. 查询方式 这种方式是指在单片机完成其它工作后的空余时间,

调用键盘扫描子程序,来响应键盘输入的要求,在执行键功能程序时, CPU 不再响应键输入要求。

Page 5: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

[ 例 8.1] 用查询法按图 8-1 读取行列键盘键码,并将键码存入内部 RAM 32H 单元。

图中 P1.4 ~ P1.7 用于控制行线, P1.0 ~ P1.3 用于控制列线。行、列线通过上拉电阻接 +5 V ,没有键按下时,被钳在高电平状态。通过发送扫描字确定键码,具体方法如下:

(1) 由列线输出 0 ,然后读入 P1 口的值存入内部RAM 30H 单元。

Page 6: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

(2) 由行线输出 0 ,然后读入 P1 口的值存入内部RAM 31H 单元。

(3) 把 30H 的低 4 位与 31H 的高 4 位的值相加存入累加器 A 。

(4) 最后判断累加器 A 的值,如果累加器 A 的数据全为 1 ,说明无键按下,否则说明有键按下,且累加器 A 的数据就是被按下键的键值 ( 程序中对累加器 A

取反,目的是用 JNZ 指令判断是否有键按下 ) 。如图中圆圈所指键的键值为 10111110B 。

Page 7: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

键扫描程序如下 :

BOAD : LCALL BOADD

JNZ BOAD1 ;无键按下转 BOAD

LCALL DELAY ;调延时子程序

AJMP BOAD ;继续扫描键盘

BOAD1 : LCALL DELAY ;消除键抖动 ( 延时子程序略 )

LCALL BOADD ;确认是否有键按下

JNZ BOAD2

LCALL DELAY

SJMP BOAD ;转键扫描

Page 8: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

BOAD2 : CPL A

MOV 32H , A ;取键值BOAD3 : LCALL DELAY

LCALL BOADD

JNZ BOAD3 ;等待键松开 B2 : RET ;返回 

;获取键值子程序

Page 9: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

BOADD : MOV P1 , #0FH ;置行线为 0

MOV A , P1

MOV 30H , A

MOV P1 , #0F0H ;置列线为 0

MOV A , P1

MOV 31H , A

ANL 30H , #0FH ;取列值

Page 10: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

MOV A , 30H

ANL 31H , #0F0H ;取行值 ADD A , 31H ;行

值加列值 CPL A ; A 全 0 无

键按下 RET

Page 11: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

2. 定时扫描工作方式

定时扫描工作方式是利用单片机内部定时器产生定时中断, CPU

响应中断后对键盘进行扫描,当有键按下时,转入键功能的处理程序。

定时扫描在本质上是中断方式,只不过是定时扫描键盘,以中断的方式处理键盘,它的硬件电路与编程扫描工作方式相同。

3. 中断工作方式

单片机应用系统工作时,并不经常需要键输入。因此,无论是编程工作方式或是定时工作方式, CPU 经常处于空扫描状态。

图 8-3 是 AT89C51 利用中断扫描方式实现的一个 2×8 矩阵式键盘的硬件接口电路。

Page 12: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0

AT89C51

0INT

1INT

S9

S1

S10

S2

S11

S3

S12

S4

S13

S5

S14

S6

S15

S7

S16

S8 £«5 V

图 8-3 利用中断扩展 2×8 键盘电路图

Page 13: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

通过前面的原理分析可知,完成键盘管理的程序主要有主程序和中断服务程序,主程序主要完成初始化和键值处理任务,中断服务程序主要完成键盘扫描和键值读入任务。对应的程序流程图如图 8-4 所示 (INT1

中断流程图与 INT0 类似,略 ) 。

Page 14: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

程序如下: ORG 0000H

LJMP BEGIN ;转主程序 ORG 0003H

LJMP WZD0 ;转外中断 0 程序 ORG 0013H

LJMP WZD1 ;转外中断 1 程序

Page 15: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

BEGIN : ORG 0100H

MOV SP , #60H ;设置堆栈 MOV R1 , #00H ; R1 存放键值 SETB IT1 ;设 INT0 、 INT1 为边沿触发 SETB IT0

SETB EA ;开中断 SETB EX0

SETB EX1

MOV P1 , #00H

Page 16: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

键值处理程序 ( 略 )

其它主程序 ( 略 ) 

WZD0 :PUSH PSW ;保护现场 PUSH A

CLR EX0 ;关中断 INT0

LCALL DELAY ;调延时程序去抖动

JNB P3.2 , WZD01

;再次确认是 INT0 中断吗

Page 17: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

SETB EX0 ;不是,则恢复现场退出中断 POP A

POP PSW

RETI

WZD01 : MOV A , #01H ;置 S1 键的键值为 1

MOV P1 , #0FEH ;扫描 P1.0

JNB P3.2 , KEYR1 ;是 S1 键则转移

Page 18: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

INC A ;不是 S1 键,键值加 1

MOV P1 , #0FDH ;扫描 P1.1 ,以下同 P1.0 类似 JNB P3.2 , KEYR1

INC A

MOV P1 , #0FBH

JNB P3.2 , KEYR1

INC A

MOV P1 , #0F7H

JNB P3.2 , KEYR1

INC A

Page 19: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

MOV P1 , #0EFH

JNB P3.2 , KEYR1

INC A

MOV P1 , #0DFH

JNB P3.2 , KEYR1

INC A

MOV P1 , #0BFH

JNB P3.2 , KEYR1

INC A

MOV P1 , #7FH

Page 20: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

JNB P3.2 , KEYR1

LJMP KEYR2

KEYR1 : MOV R1 , A ;将键值存入 R1 中KEYR2 : CLR IE0 ;清中断标志 ( 因扫描中可能使 IE0

置位 )

SETB EX0 ;开中断 INT0

POP A ;恢复现场 POP PSW

RETI ;中断返回WZD1 :… ;外中断 1 程序与中断 0 相似 ( 略 )

 

DELAY : … ;延时程序 ( 略 )

Page 21: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

图 8-4 中断方式扩展键盘流程图

(a) 主程序流程图; (b)  INT0 中断服务程序流程图

Page 22: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

8.2 LED 显示器接口技术

8.2.1 LED 显示器的结构原理 LED 显示器用发光二极管显示字段,分为共阴极和

共阳极两种。图 8-5 给出了八段 LED 数码显示器的结构图和原理图。图 8-5(a) 是八段共阴极 LED 显示器,它将八个发光二极管阴极共地。当某发光二极管要点亮时,只需在该发光二极管的阳极加高电平即可。图8-5(b) 是八段共阳极 LED 显示器,它的操作与共阴极相反。 LED 显示器也有七段的,它只比八段 LED 少一只发光二极管 DP ,其它结构与八段 LED 完全相同。

Page 23: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

dp c abdefg

dp c abdefg

£«5 V

a

d

gf b

ce

g f GND a b

e d GND c dp

(a) (b) (c)

图 8-5 七段 LED 显示器

(a) 共阴性; (b) 共阳性; (c) 管脚配置

Page 24: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

dp g f e d c b a

D7 D6 D5 D4 D3 D2 D1 D0

图 8-6 字形码数据格式

表 8-1 共阴极 LED 数码管字形码表

字形码 3F 06 5B 4F 66 6D 7D 07 7F 6F

显示字符 0 1 2 3 4 5 6 7 8 9

Page 25: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

8.2.2 LED 显示器的显示方式 1 .静态显示方式 在静态显示方式中,各位的共阴或共阳极连接在

一起接地或接 +5 V ,每位的段选线 (a ~ dp) 与一个 8

位并行口相连。如图 8-7 所示,它是一个 4 位的静态显示电路,之所以称之为静态显示电路,是由于显示器的各位相互独立,而且各位的显示字符一经确定,相应的输出将维持不变,直到显示另一个字符为止。

Page 26: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

图 8-7 4 位 LED 静态显示电路图

Page 27: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

2. 动态方式 为了克服静态显示方式的缺点,节省 I/O 口线,人们常常使用动态显示方式。它将所有数码管的 a 、 b 、c 、 d 、 e 、 f 、 g 、 sp引线并联在一起,由一个 8 位I/O 口控制,而公共端由另一个 I/O 口控制。应用时,轮流送入每个 LED 的字形码与位选码,利用人的视觉暂留现象来显示各位的字符。图 8-8 是一个 8 位 LED

动态显示电路图 .

Page 28: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

图 8-8 8 位 LED 动态显示电路图

Page 29: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

[ 例 8.2] 根据图 8-9 编写程序显示内部 RAM 50

H ~ 57H 单元中的数据。

8255

PB7PB6PB5PB4PB3PB2PB1PB0

PA7PA6PA5PA4PA3PA2PA1PA0

WRRD

D5D4D3D2D1D0

D6D7

Q7Q6Q5Q4Q3Q2Q1Q0

D7D6D5D4D3D2D1D0

OE

WRRD

P0.5P0.4P0.3P0.2P0.1P0.0

P0.6P0.7

ALE

AT89C51

8 8 8 8 8 8 8 8

8(a,b,c,d,e,f,g,dp)

G

A1A0

CS

74L

S37

3

图 8-9 AT89C51 与动态显示 LED 接口连接图

Page 30: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

图 8-9 是用 8255A 对 8 位动态显示器的接口电路。图中 LED 为八段共阴数码管, A 口输出字形码, B 口输出位选码,片选端直接接地。根据图中连接可知, 8

255A 的 A 口地址为 FFFCH , B 口地址为 FFFDH ,控制口地址为 FFFFH ,由于 A 、 B 口均为输出,因此控制字为 80H 。下面是一个动态显示内部 RAM 50

H ~ 57H 单元数据的子程序。

Page 31: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

DIR : MOV A , #10000000B

;设置 8255 的工作方式, A 、 B

口为输出MOV DPTR , #0FFFFH

; 8255 的命令口地址送 DPTR

MOVX @DPTR , A

MOV R0 , #50H ; 50H ~ 57H 为显示缓冲区

MOV R3 , #7FH ;第一位的位选码MOV A , R3

Page 32: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

SCAN : MOV DPTR , #0FFFDH ;指向 B 口 MOVX @DPTR , A ;位选码送 B 口 MOV A , @R0 ;取显示数据 MOV DPTR , #TAB ;取字形码表首址 MOVC A , @A+DPTR ;取字形码 MOV DPTR , #0FFFCH ;指向 A 口

Page 33: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

MOVX @DPTR , A ;字形码送 A 口 ACALL DL1ms ;调延时 1 ms 子程序 INC R0 ;指向下一显示数据单元 MOV A , R3

JNB ACC.0 , ED ; 8 位显示完,退出 RR A ;指向下一位 MOV R3 , A

AJMP SCAN ;继续显示下一位

Page 34: 8.1   键盘接口技术

第 8章 AT89C51系统接口技术

ED : RET

TAB : DB 3FH , 06H , 5BH , 4FH , 66H

;共阴 0 ~ F 的字型码表 DB 6DH , 7DH , 07H , 7FH , 6FH

DL1ms : MOV R7 , #01H ;延时 1 ms 子程序

DL0 : MOV R6 , #0FFH

DL1 : DJNZ R6 , DLI

DJNZ R7 , DLO

RET