文档库 最新最全的文档下载
当前位置:文档库 › 第13讲:MCS-51系统的人机接口设计M

第13讲:MCS-51系统的人机接口设计M

单片机技术

电气学院:易先军第06章:存储器扩展与接口技术

本讲主要内容:

●独立式键盘的硬件与编程

●行列式键盘的硬件与编程

●七段LED的驱动原理与硬软件设计

人机接口设计【教材第8章】

1、非编码键盘

●若干个按键组成的开关矩阵,它是单片机最简单的信息输入装置,

操作员通过键盘向单片机系统输入数据或命令,实现简单的人-机通信,按键是以开关的状态来设置控制功能和输入数据。若键盘上闭合键的识别是由专用硬件实现的(如8279芯片),称为编码键盘;若靠软件实现的便为非编码键盘。

●非编码键盘是由一些按键排列成的一个行、列矩阵。按键的作用

只是简单地实现开关的接通或断开,但必须有一套相应的程序与之配合,来解决按键的识别,防止抖动以及键值的产生等工作。键盘接口电路硬软件必须解决的几个问题?

①键的识别:是否有键按下;若有键按下,判

断是哪一个键(确定其键号或键值)。

②去抖动:目前,按键是利用机械触点,一个

电压信号通过机械触点的闭合、断开过程。

③键的保护:处理多键同时按下。对于同时有

两个以上的键被按下的情况,有几种处理

方法:

I、“双键同时按下”。

II、“N键锁定”。

抖动时间

<10ms

开关动作时间

>100ms

“ 1 ”

“ 0

”<10ms

单片机键输入处理流程图(键输入软件处理)

(1)非编码独立式按键的处理

P1.0

P1.1

P1.7

+5v

0#

1#

7#

START:MOV A,#0FFH;置P1为输入状态,读引脚

MOV P1,A ;P1口锁存器写1,读引脚有效

MOV A,P1 ;输入按键状态供查询用

JNB ACC.0,DP10 ;0号键按下转

JNB ACC.1,DP11 ;1号键按下转

JNB ACC.2,DP12 ;2号键按下转

JNB ACC.3,DP13 ;3号键按下转

JNB ACC.4,DP14 ;4号键按下转

JNB ACC.5,DP15 ;5号键按下转

JNB ACC.6,DP16 ;6号键按下转

JNB ACC.7,DP17 ;7号键按下转

SJMP START ;返回接着查询

DP10:LJMP PORT0 ;转0~7号键处理程序入口

DP11:LJMP PORT1 ;

DP17:LJMP PORT7;

各功能键处理程序结构

PORT0:…;0号键处理程序

LJMP START;从0号键程序执行完返回PORT1:…;1号键处理程序

LJMP START;返回

PORT7:…;7号键处理和程序

LJMP START ;返回(2)非编码行列(矩阵)式键盘

非编码式键盘识别按键的方法有两种: 一是行扫描法, 二是线反转法

1) 行扫描法:通过行线发出低电平信号, 如果该行线所连接的键没有

按下的话, 则列线所接的端口得到的是全“1”信号, 如果有键按下的话, 则得到非全“1”信号。列线外接上拉电阻。

+5V

1

1

1

1

1 1 1 列值全1

+5V

1

1

1

1

1 0 1列值非全1

为了防止双键或多键同时按下, 往往从第 0 行一直扫描到最后一行, 若只发现一个闭合键, 则为有效键, 否则全部作废。

2)线反转法也是识别闭合键的一种常用方法, 该法比行扫描速度快, 但在硬件上要求行线与列线外接上拉电阻。

先将行线作为输出线, 列线作为输入线, 行线输出全“0”信号, 读入列线的值, 然后将行线和列线的输入输出关系互换, 并且将刚才读到的列线值从列线所接的端口输出, 再读取行线的输入值。那么在闭合键所在的行线上值必为 0。这样, 当一个键被按下时, 必定可读到一对唯一的行列值。

+5V

+5V

1

1 0 1 列值

+5V

+5V

1

1

1

0 0 0

行值

实例:采用8155的键盘接口电路

行扫描法:通过行线

发出低电平信号, 如果

该行线所连接的键没有

按下的话, 则列线所接

的端口得到的是全“1”

信号, 如果有键按下的

话, 则得到非全“1”信

号。

找到闭合键后, 读入

相应的键值, 再转至相

应的键处理程序

(课堂作业:阅读教材P211~P213上给出的该程序与说明,思考:①行号对应

00~07H,为什么列号要分别设定为00H、08H 、10H、18H?②要求由程序

画出流程图!)。

下面的程序是用行扫描法进行键扫描的程序, 其中KS1 为判键闭合的子程序。有键闭合时(A)!=0。 DIR为数码显示器扫描显示子程序, 执行一遍的时间约6 ms。程序执行后, 若键闭合, 键值存入A中, 键值的计算公式是: 键值=行号×4+列号; 若无键闭合, 则A中存入标志FFH

KEY1:LCALL KS1 ; 检查有无闭合键?

JNZ LK1 ; (A)!=0, 有键闭合则转 LJMP LK8 ; 无闭合键则返回

LK1: LCALL DIR ; 延时 12 ms

LCALL DIR ;

LCALL LS1 ; 再检查有键闭合否?

JNZ LK2 ;

LJMP LK8 ; 无键闭合则返回

LK2: MOV R3, #00H ; 行号初值送R3

MOV R2, #FEH ; 行扫描初值送R2 LK3: MOV DPTR, #0101H; 指向 8155 口A

MOV A, R2 ; 行扫描值送A

MOVX @DOTR, A 扫描 1

INC DPTR

INC DPTR ; 指向 8155 口C

MOVX A, @DPTR ;

ANL A, #0FH ; 保留低 4

MOV R4, A ;

CJNZ A, #0FH, LK4 ; 列值非全“1”则转

MOV A, R2 ; 行扫描值送A

JNB ACC.7, LK8 ; 扫至最后一行则转

RL A ; 未扫完, 则移至下一行

MOV R2, A ; 行值存入R2 中

INC R3 ; 行号加 1

SJMP LK3 ; 转至扫描下一行

LK4: MOV A, R3 ; 行号送入A

ADD A, R3 ; 行号×2

MOV R5, A

ADD A, R5 ; 行号×4

MOV R5, A ; 存入R5

MOV A, R4 ; 列值送A

LK5: RRC A ;

JNC LK6 ; 该位为 0

INC R5 ; 列号加 1

SJMP LK5 ; 列号未判完则继续

LK6: MOV 20H, R5; 存键

LK7: LCALL DIR ;

LCALL KS1 ; 发扫描信号

JNZ LK7 ;

LCALL DIR ;

LCALL DIR ; 延时 12 ms,

MOV A, 20H ; 键值存入A

KND: RET

LK8: MOV A, #FFH ; 无键标志FFH存入A中

RET

KS1: MOV DPTR, #0101H ;

MOV A, #00H ;

MOVX @DPTR, A;

INC DPTR

INC DPTR ; 指向8155口C

MOVX A, @DPTR ;

ANL A, #0FH ; 保留低4

ORL A, #F0H ; 高4位取“1”

CPL A ; 取反, 无键按下则全“0”

RET

2、LED 显示技术

LED 的字形码(字段码) 显示字符

共阴极

共阳极

0 3FH C0H 1 06H F9H 8. FFH 00H ‘灭’ 00 FFH F 71H 84H U 3EH C1H P .

F3H

02H

LED 显示器用于显示工业控制参数、过程状态。 1)LED 数码管

共阴极LED 和共阳极LED

当LED 字段引线与数据线连接,每个显示字形对应一个字形码。

a b h

COM

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

2)LED 接口电路(静态显示与动态显示)

●静态显示

a b h COM

a f

b g e

c

d h

a b h

COM

a b h

COM

显示程序任务:

1.设置显示缓冲区,存放待显

示数据和字符(位置码)。 2.显示译码:程序存储器中建

立字形码常数表,查表得出对应数据和字符的字形码。 3.输出显示:输出字形码到显

示端口。

静态显示

示例:MOV DPTR ,#WTAB ;指向字形码表首地址 MOV A ,@R0 ;取显示缓冲区中数据,@R0为数据0~9 MOVC A ,@A+DPTR ;查表显示译码 MOV P1,A ;输出显示 …

WTAB :DB 3FH ,06H ,5BH ;字形码表,数据0~9 对应的七段码 …

COM

P 1.0~1.7

MCS-51

a f b

g e c d h

a

b h

显示缓冲区 地址 内容

7AH 7BH 7CH 7DH 7EH 7FH

对应字位线: D 0 D 1 D 2 D 3 D 4 D 5

显示缓冲区与多位LED 对应关系

●动态显示:多位LED 共用一个8位字段口,各位LED 公共端用字位

口控制,扫描输出显示不同字形。(用8155实现动态显示接口)

COM

COM

PB 7 … PB 1 PB 0

PA 0 PA 1 PA 2

a

a h

h b b h COM

f b

g e c d h

a a

b ●显示程序

DIS : MOV R0,#7AH ;指向显示缓冲区起始单元

MOV R3,#01H ;字位码初值→R3 MOV A ,R3 ;取字位码

DLP : MOV DPTR ,#PAAR ;指向字位口 (PA 口) MOVX @DPTR ,A ;输出字位码,显示其中1位

MOV A ,@R0 ;取一个显示数据 (0~9) ADD A ,#0CH ;加上查表偏移量 MOVC A ,@A+PC ;取出字形码 INC DPTR ;指向字段口(PB 口) MOVX @DPTR ,A ;输出字形码 ACALL DLY1MS ;延时1ms INC R0 ;指向显缓区下一单元 MOV A ,R3 ;修改字位码 RL A ;显示下一位 MOV R3,A

JNB ACC.6,DLP ;未显示到最右边LED ,继续显示

RET ;全部扫描一遍,结束 DTAB :DB 0C0H ,0F9H ,0A4H ;字形表 DB 0B0H ,99H , DLY1MS … ;延时1ms 子程序

本讲小结

1、非编码键盘(独立式、行列式)的硬件与编程 ●

2、七段LED 的显示原理(静态显示、动态显示)

●3、掌握利用8155扩展键盘和显示器的方法!(教材实例) ●

4、掌握利用8255扩展键盘和显示器的方法!(课后习题T5)

课后习题: P252

相关文档