单片机技术
电气学院:易先军第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