第七章 mcs-51 与键盘、显示器的接口

30
第第第 MCS-51 第第第 第第第第第第 第第第 MCS-51 第第第 第第第第第第 7.1 MCS-51 第第第第第第第第 7.1.1 第第第第第第第 第第第第第第 第第第第第第第第第 第第第第第第第第第第第第第第第 第第第第第第第第第第 第第第第第第第 一,,。 第第第第第第第P1. 1 VCC GND 第第 第第 第第 P1. 1 ( a ) ( b )

Upload: jolie

Post on 19-Mar-2016

85 views

Category:

Documents


0 download

DESCRIPTION

VCC. 断开. 断开. P1.1. P1.1. 闭合. GND. ( a ). ( b ). 第七章 MCS-51 与键盘、显示器的接口. 7.1 MCS-51 单片机与键盘接口. 7.1.1 键盘的工作原理. 键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。它的结构和产生的波形如图所示。. +5V. 闭合. 断开. 输出. +5V. 键盘的处理主要涉及三个方面:. 1 .按键的识别. 2 .抖动的消除. 消除按键盘抖动通常有两种方法:硬件消抖和软件消抖。. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 第七章 MCS-51 与键盘、显示器的接口

7.1 MCS-51 单片机与键盘接口7.1.1 键盘的工作原理键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。它的结构和产生的波形如图所示。

P1.1

VCC

GND

断开闭合

断开P1.1

( a ) ( b )

Page 2: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 键盘的处理主要涉及三个方面: 1 .按键的识别2 .抖动的消除

消除按键盘抖动通常有两种方法:硬件消抖和软件消抖。 硬件消抖是通过在按键输出电路上加一定的硬件线路来消除抖动,一般采用 R—S 触发器或单稳态电路。如图。

断开闭合

+5V

+5V

输出

软件消抖是利用延时来跳过抖动过程

Page 3: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 3 .键位的编码

通常有两种方法编码。 ( 1 )用连接键盘的 I/O 线的二进制组合进行编码。如( a )图 ( 2 )顺序排列编码。如( b )图,处理方法如下:编码值 = 行首编码值 X+ 列号 Y 。

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

88 84 82 8148 44 42 4128 24 22 2118 14 12 11

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

F E D CB A 9 87 6 5 43 2 1 0

( a ) ( b )

Page 4: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 7.1.2 独立式键盘与单片机的接口键盘的结构形式一般有两种:独立式键盘与矩阵式键盘。

独立式键盘就是各按键相互独立,每个按键各接一根 I/O 口线,每根 I/O 口线上的按键都不会影响其它的 I/O 口线。

GND

VCC

GND

VCC

( b )

8051

( a )

INT0

8051

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

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

Page 5: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 图( a )为中断方式工作的独立式键盘的结构形式,( b )为查询方式工作的独立式键盘的结构形式 下面是针对图 7.4 ( b )图查询方式的汇编语言形式的键盘程序。总共有 8 个键位, KEY0~KEY7 为 8 个键的功能程序。START : MOV A , #0FFH ;MOV P1 , A ;置 P1 口为输入状态MOV A , P1 ;键状态输入CPL AJZ START ;没有键按下,则转开始JB ACC.0 , K0 ;检测 0 号键是否按下,按下转JB ACC.1 , K1 ;检测 1 号键是否按下,按下转JB ACC.2 , K2 ;检测 2 号键是否按下,按下转JB ACC.3 , K3 ;检测 3 号键是否按下,按下转JB ACC.4 , K4 ;检测 4 号键是否按下,按下转JB ACC.5 , K5 ;检测 5 号键是否按下,按下转JB ACC.6 , K6 ;检测 6 号键是否按下,按下转JB ACC.7 , K7 ;检测 7 号键是否按下,按下转JMP START ;无键按下返回,再顺次检测

Page 6: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 K0 : AJMP KEY0K1 : AJMP KEY1……K7 : AJIMP KEY7KEY0 :…… ; 0 号键功能程序JMP START ; 0 号键功能程序执行完返回KEY1 :…… ; 0 号键功能程序JMP START ; 1 号键功能程序执行完返回……KEY7 :…… ; 7 号键功能程序JMP START ; 7 号键功能程序执行完返回

7.1.3 矩阵键盘与单片机的接口 矩阵式键盘又叫行列式键盘。用 I/O 口线组成行、列结构,键位设置在行列的交点上。例如 4×4 的行、列结构可组成 16 个键的键盘,比一个键位用一根 I/O 口线的独立式键盘少了一半的 I/O 口线。

Page 7: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 矩阵键盘的连接方法有多种,可直接连接于单片机的 I/O 口线;可利用扩展的并行 I/O 口连接;也可利用可编程的键盘、显示接口芯片(如 8279 )进行连接等等。其中,利用扩展的并行 I/O 口连接方便灵活,在单片机应用系统中比较常用。下图就是通过 8255A 芯片扩展的并行 I/O 口连接 48 的矩阵键盘。

PA7PA6PA5PA4PA3PA2PA1PA0

PC0PC1PC2PC3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

316 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

CS

74LS373

WRRDA1A0

P2.7WRRDALE

P0.0~P0.7 D0~D7

RESET1K

20F

+5V

+5V8255

5.1K48051

Page 8: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 一.矩阵键盘的工作过程 对矩阵键盘的工作过程可分两步:第一步是 CPU 首先检测键盘上是否有键按下;第二步是再识别是哪一个键按下。1 .检测键盘上是否有键按下处理方法是:将列线送入全扫描字,读入行线的状态来判别。其具体过程如下: PA 口输出 00H ,即所有列线置成低电平,然后将行线电平状态读入累加器 A 中。如果有键按下,总会有一根行线电平被拉至低电平,从而使行输入状态不全为 "1" 。2 .识别键盘中哪一个键按下处理方法是:将列线逐列置低电平,检查行输入状态,称为逐列扫描。其具体过程如下:从 PA0 开始,依次输出“ 0” ,置对应的列线为低电平,然后从 PC 口读入行线状态,如果全为“ 1” ,则按下的键不在此列;如果不全为“ 1” ,则按下的键必在此列,而且是该列与“ 0” 电平行线相交的交点上的那个键。为求取编码,在逐列扫描时,可用计数器记录下当前扫描列的列号,检测到第几行有键按下,就用该行的首键码加列号得到当前按键的编码。

二.矩阵键盘的工作方式

Page 9: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 1 .查询工作方式

这种方式是直接在主程序中插入键盘检测子程序,主程序每执行一次则键盘检测子程序被执行一次,对键盘进行检测一次,如果把没有键按下,则跳过键识别,直接执行主程序;如果有键按下,则通过键盘扫描子程序识别按键,得到按键的编码值,然后根据编码值进行相应的处理,处理完后再回到主程序执行。键盘扫描子程序流程如图 。 开始有键按下否?

调用 6ms 延时子程序?

调用 12ms 延时子程序?有键按下否?

判闭合键,编码入栈保护闭合键释放否?

编码 A

返回

Page 10: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 键盘扫描子程序如下:(硬件线路如图 7.4 , 8255A 的 A 口、 B 口、C 口和控制口地址分别为 7F00H 、 7F01H 、 7F02H 、 7F03H ,设8255A已在主程序中初始化。已设定为 A 口方式 0 输出, C 口的低4 位方式 0 输入。)KEY1 : ACALL KS1 ;调用判断有无键按下子程序

JNZ LK1 ;有键按下时, (A)≠0 转消抖延时KEY2 : ACALL TM6msAJMP KEY1 ;无键按下返回LK1 : ACALL TM12ms ;调 12 ms 延时子程序ACALL KS1 ;查有无键按下,若有则真有键按下JNZ LK2 ;键 (A)≠ 0 逐列扫描AJMP KEY2 ;不是真有键按下,返回LK2 : MOV R2 , #0FEH ;初始列扫描字 (0 列 ) 送入

R2MOV R4 , #00H ;初始列 (0 列 ) 号送入 R4LK4 : MOV DPTR , #7F00H ; DPTR指向 8155PA口MOV A , R2 ;列扫描字送至 8155PA 口MOVX @DPTR , AINC DPTR ; DPTR指向 8155PC 口INC DPTR

Page 11: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 MOVX A , @DPTR ;从 8155 PC 口读入行状态JB ACC.0 , LONE ;查第 0 行无键按下,转查第 1 行MOV A , #00H ;第 0 行有键按下,行首键码 #00H→AAJMP LKP ;转求键码LONE : JB ACC.1 , LTWO ;查第 1 行无键按下,转查第 2 行MOV A , #08H ;第 1 行有键按下,行首键码 #08H→AAJMP LKP ;转求键码LTWO : JB ACC.2 , LTHR ;查第 2 行无键按下,转查第 3 行MOV A , #10H ;第 2 行有键按下,行首键码 #10H→AAJMP LKP ;转求键码LTHR : JB ACC.3 , NEXT ;查第 3 行无键按下,转该查下一列MOV A , #18H ;第 3 行有键按下,行首键码 #18H→ALKP : ADD A , R4 ;求键码,键码 = 行首键码 + 列号PUSH ACC ;键码进栈保护LK3 : ACALL KS1 ;等待键释放JNZ LK3 ;键未释放,等待POP ACC ;键释放,键码→ ARET ;键扫描结束,出口状态 (A)= 键码

Page 12: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口

NEXT : INC R4 ;准备扫描下一列,列号加 1MOV A , R2 ;取列扫描字送累加器 AJNB ACC.7 , KEND ;判断 8 列扫描否?扫描完返回RL A ;扫描字左移一位,变为下一列扫描字MOV R2 , A ;扫描字送入 R2 保存AJMP LK4 ;转下一列扫描KEND : AJMP KEY1 KS1 : MOV DPTR , #7F00H ; DPTR指向 8155PA 口MOV A , #00H ;全扫描字→ AMOVX @DPTR , A ;全扫描字送往 8155PA 口INC DPTR ; DPTR指向 8155PC 口INC DPTR MOVX A , @DPTR ;读入 PC 口行状态CPL A ;变正逻辑,以高电平表示有键按下ANL A , #0FH ;屏蔽高 4 位,只保留低 4 位行线值RET ;出口状态: (A)≠0 时有键按下

Page 13: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 TM12ms : MOV R7 , #18H ;延时 12 ms 子程序TM : MOV R6 , #0FFHTM6 : DJNZ R6 , TM6DJNZ R7 , TMRETTM6ms : MOV R7 , #0CH ;延时 6 ms 子程序TM2 : MOV R6 , #0FFHTM62 : DJNZ R6 , TM6DJNZ R7 , TMRETC 语言键盘扫描子程序:略2 .定时扫描工作方式3 .中断处理方式

Page 14: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 7.2 MCS-51 单片机与 LED 显示器接口

7.2.1 LED 显示器的结构与原理在单片机应用系统中通常使用的是 8段式 LED 数码管显示器,它有共阴极和共阳极两种,如图所示。

a

b

c

d

e

f

g

dp

com

a

b

c

d

e

f

g

dp

com

a

b

cd

e

f g

dp

10 9 8 7 6

1 2 3 4 5

g f com a b

e d com c dp

( a ) ( b )

(c )

Page 15: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 其中:( a )为共阴极结构。( b )为共阳极结构。( c )图为管脚图,从 a~g管脚输入不同的 8 位二进制编码,可显示不同的数字或字符。共阴极和共阳极的字段码互为反码 。

显示字符 共阴极字段码 共阳极字段码 显示字符 共阴极字段码 共阳极字段码0 3FH C0H C 39H C6H

1 06H F9H D 5EH A1H

2 5BH A4H E 79H 86H

3 4FH B0H F 71H 8EH

4 66H 99H P 73H 8CH

5 6DH 92H U 3EH C1H

6 7DH 82H T 31H CEH

7 07H F8H Y 6EH 91H

8 7FH 80H L 38H C7H

9 6FH 90H 8. FFH 00H

A 77H 88H “ ”灭 00 FFH

B 7CH 83H …… …… ……

Page 16: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 7.2.2 LED 数码管显示器的译码方式一.硬件译码方式译码方式是指由显示字符转换得到对应的字段码的方式

硬件译码方式是指利用专门的硬件电路来实现显示字符到字段码的转换,这样的硬件电路有很多,比如 MOTOTOLA公司生产的 MC14495 芯片就是其中的一种, MC14495 是共阴极一位十六进制数——字段码转换芯片,能够输出用四位二进制表示形式的一位十六进制数的七位字段码,不带小数点。它的内部结构如图。

4锁存器

地址译码和字段码ROM阵列

A

B

C

D

LE

5

6

9

10

7

Vss VDD

8 16

abcdefgh+i

VCR

11

12131415123

4

Page 17: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 二.软件译码方式 软件译码方式就是通过编写软件译码程序,通过译码程序来得到要显示的字符的字段码。

7.2.3 LED 数码管的显示方式一. LED 静态显示

LED静态显示时,其公共端直接接地(共阴极)或接电源(共阳极),各段选线分别与 I/O 口线相连。要显示字符,直接在 I/O 线送相应的字段码。 a b c d e f g dp

I/O(1)

a b c d e f g dp

I/O(2)

Page 18: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 二. LED 动态显示方式 LED 动态显示是将所有的数码管的段选线并接在一起,用一个I/O 口控制,公共端不是直接接地(共阴极)或电源(共阳极),而是通过相应的 I/O 口线控制。

D3 D2 D1 D0

I/O(1)

I/O(2)

Page 19: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 设数码管为共阳极,它的工作过程为:第一步使右边第一个数码管的公共端 D0 为 1 ,其余的数码管的公共端为 0 ,同时在 I/O ( 1 )上送右边第一个数码管的字段码,这时,只有右边第一个数码管显示,其余不显示;第二步使右边第二个数码管的公共端 D1 为 1 ,其余的数码管的公共端为 0 ,同时在 I/O ( 1 )上送右边第二个数码管的字段码,这时,只有右边第二个数码管显示,其余不显示,依此类推,直到最后一个,这样四个数码管轮流显示相应的信息,一个循环完后,下一循环又这样轮流显示,从计算机的角度看是一个一个的显示,但由于人的视觉滞留,只要循环的周期足够快,看起来所有的数码管都是一起显示的了。这就是动态显示的原理。而这个循环周期对于计算机来说很容易实现。所以在单片机中经常用到动态显示。 7.2.4 LED 显示器与单片机的接口 LED 显示器从译码方式上有硬件译码方式和软件译码方式。从显示方式上有静态显示方式和动态显示方式。在使用时可以把它们组合起来。在实际应用时,如果数码管个数较少,通常用硬件译码静态显示,在数码管个数较多时,则通常用软件译码动态显示。

Page 20: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 一.硬件译码静态显示

下图是一个两位数码管硬件译码静态显示的接口电路图。

a b c d e f g

MC14495a b c d e f g

a b c d e f g

A B C D

LE MC14495a b c d e f g

A B C D

LE

P1.0P1.1P1.2P1.3

P1.4P1.5

8051

Page 21: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 二.软件译码动态显示

下图是一个 8 位软件译码动态显示的接口电路图。图中用 8255A 扩展并行 I/O 口接数码管,数码管采用动态显示方式, 8 位数码管的段选线并联与 8255A 的 A 口通过 74LS373 相连, 8 位数码管的公共端通过 74LS373 分别与 8255A 的 B 口相连。也即 8255A 的 B 口输出位选码选择要显示的数码管, 8255A 的A 口输出字段码使数码管显示相应的字符, 8255A 的 A 口和 B口都工作于方式 0 输出。 A 口、 B 口、 C 口和控制口的地址分别为 7F00H 、 7F01H 、 7F02H 和 7F03H 。

Page 22: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口

D0 D1 D2 D7

Q0Q1Q2Q3Q4Q5Q6Q7

D0D1D2D3D4D5D6D7G OE

VCC

74LS373

Q0Q1Q2Q3Q4Q5Q6Q7

D0D1D2D3D4D5D6D7G OE

VCC

74LS373

PA0PA1PA2PA3PA4PA5PA6PA7

PB0PB1PB2PB3PB4PB5PB6PB7

CS

WR

RD

74LS373

P2.7

WR

RD

ALE

P0.0~P0.7

8051

D0~D7

A1A0

G A1A0

8255

Page 23: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 软件译码动态显示汇编语言程序为:(设 8 个数码管的显示缓冲区为片内 RAM 的 57H~50H 单元)DISPLAY : MOV A , #10000000B ; 8255初始化MOV DPTR , #7F03H ;使 DPTR指向 8155控制寄存器端口MOVX @DPTR , AMOV R0 , #57H ;动态显示初始化,使 R0指向缓冲区首址MOV R3 , #7FH ;首位位选字送 R3MOV A , R3LD0 : MOV DPTR , #7F00H ;使 DPTR指向 PA 口MOVX @DPTR , A ;选通显示器低位 (最右端一位 )INC DPTR ;使 DPTR指向 PB 口MOV A , @R0 ;读要显示数ADD A , #0DH ;调整距段选码表首的偏移量MOVC A , @A+PC ;查表取得段选码MOVX @DPTR , A ;段选码从 PB 口输出ACALL DL1 ;调用 1 ms 延时子程序DEC R0 ;指向缓冲区下一单元MOV A , R3 ;位选码送累加器 A

Page 24: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口

JNB ACC.0 , LD1 ;判断 8 位是否显示完毕,显示完返回RR A ;未显示完,把位选字变为下一位选字MOV R3 , A ;修改后的位选字送 R3AJMP LD0 ;循环实现按位序依次显示LD1 : RETTAB : DB 3FH , 06H , 5BH , 4FH , 66H , 6DH , 7DH , 07H ;字段码表DB : 7FH , 6FH , 77H , 7CH , 39H , 5EH , 79H , 71HDL1 : MOV R7 , #02H ;延时子程序DL : MOV R6 , #0FFHDL0 : DJNZ R6 , DL0DJNZ R7 , DLRET

Page 25: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 软件译码动态显示 C 语言程序为:#include <reg51.h>#include <absacc.h> // 定义绝对地址访问#define uchar unsigned char#define uint unsigned intvoid delay(uint); //声明延时函数void display(void); //声明显示函数uchar disbuffer[8]={0,1,2,3,4,5,6,7}; // 定义显示缓冲区void main(void){XBYTE[0x7f03]=0x80; //8255A初始化while(1){display(); // 设显示函数}}//************ 延时函数 ************void delay(uint i) // 延时函数{uint j;for (j=0;j<i;j++){}}

Page 26: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 //*********** 显示函数void display(void) // 定义显示函数{uchar codevalue[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0~F 的字段码表uchar chocode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; // 位选码表uchar i,p,temp;for (i=0;i<8;i++){p=disbuffer[i]; // 取当前显示的字符temp=codevalue[p]; // 查得显示字符的字段码XBYTE[0x7f00]=temp; // 送出字段码temp=chocode[i]; // 取当前的位选码XBYTE[0x7f01]=temp; // 送出位选码delay(20); // 延时 1ms}}

Page 27: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 7.3 MCS-51 单片机与行程开关、晶闸管、继电器的接口

7.3.1 行程开关、继电器与 MCS-51 单片机接口行程开关和继电器常开触点与单片机的接口如图所示。

E1

E2S

10K

10K

10K10F

光电耦合器件单片机的 I/O引脚

Page 28: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 7.3.2 晶闸管与 MCS-51 单片机接口

8051

P1.0

P1.1 过零电路

大功率晶闸管及负载

5V

5V

7407

7407

91

180

12

12

65

4

6

4

10K

100

0 . 1F

~220V

4N40

MOC3041

Rs

Cs

Page 29: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口 7.3.3 继电器与 MCS-51 单片机接口

8051

P1.1

7406 VD1

R

+5V VCC

VD2

S1

V1

8051

P1.1

R

+5V

S1

7406 4N25

R1

R2

V1

VD1

VCC

Page 30: 第七章   MCS-51 与键盘、显示器的接口

第七章 MCS-51 与键盘、显示器的接口

7.3.4 蜂鸣器与 1 单片机接口

8051

P1.0

7406

+5V

PB2130UP002A 8051

P1.0

+5V

PB2130UP002A

R1

R2

V1