第9章 89C51单片机的接口技术

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第9章 89C51单片机的接口技术
9.1 人机通信接口技术
9.1.1 键盘接口技术
9.1.2 显示接口技术 9.1.3 键盘、显示组合接口举例
9.1.1 键盘接口技术

为了控制一些系统运行状态,就要向其输入命令
或数据——需要键盘实现

键盘:数字键、功能键、组合控制键 以开关状态来设置控制功能或输入数据
1.键输入过程与软件结构 相应键按下,单片机应用系统应完成该按键所
设定的功能,因此与软件相关。由散转指令JMP
@A+DPTR作为键盘信息输入的软件接口

实现的键输入软件框图如图9-1
图9-1 89C1单片机应用系统键输入软件框图
2.键盘输入接口与软件应解决的任务





键盘按其结构形式可分为编码式键盘和非编码式键 盘两类: ① 编码键盘采用专用的编码/译码器件,被按 下的键由该器件译码输出相应的键码/键值。 特点:增加了硬件开销,编码因选用器件而异, 编码固定,但编程简单。适用于大规模键盘。 ② 非编码键盘采用软件编/译码的方式,通过 扫描,对每个被按下的键进行判别,输出相应的键 码/键值。 特点:不增加硬件开销,编码灵活,适用于小规 模的键盘,特别是单片机系统。但编程较复杂,占 CPU时间。
FUN0:AJMP SUB0
FUN1:AJMP SUB1 … FUN7:AJMP SUB7 SUB0: … LJMP Start SUB1: … LJMP Start SUB7: … LJMP Start
4.矩阵式键盘 1)矩阵式键盘电路的结构及工作原理
图9-4 矩阵式键盘结构
2)键盘的工作方式
9.1.2 显示接口技术
(a)共阴极
(b)共阳极
(c)管脚配置
图9-6 7段LED显示块
各段码位的对应关系如下:
表9-1
七段LED的段选码
2)LED显示器与显示方式 在单片机应用系统中使用LED显示块构成N位LED显示器。 图9-7是N位显示器的构成原理图。 N位LED显示器有N根位选线和8*N根段选线。根据显示方 式不同,位选线与段选线的连接方法不同。 段选线控制要显示什么样的字符 而位选线则控制要在哪一位上显示这个字符。

单片机系统中普遍使用非编码式键盘, 这类键盘
主要解决以下几个问题:

① 键的识别; ② 如何消除键的抖动; ③ 键的保护。
3.独立式按键
图9-3 独立式键盘结构
Start:MOV P1,#0FFH;置I/O口为输入方式
MOV A,P1 ;读入键状态 CPL A JZ Start ;无键按下,则返回 JB ACC.0,FUN0 ;0号键按下转 JB ACC.1,FUN1 ;1号键按下转 JB ACC.2,FUN2 ;2号键按下转 JB ACC.3,FUN3 ;3号键按下转 JB ACC.4,FUN4 ;4号键按下转 JB ACC.5,FUN5 ;5号键按下转 JB ACC.6,FUN6 ;6号键按下转 SJMP FUN7
采用8155的键盘接口电路
下面的程序是用行扫描法进行键扫描的程序, 其中KS1 为
判键闭合的子程序。 有键闭合时(A)≠0。 DIR为数码显示 器扫描显示子程序, 执行一遍的时间约6 ms。 程序执行后, 若 键闭合, 键值存入A中, 键值的计算公式是: 键值=行号×8+列 号; 若无键闭合, 则A中存入标志FFH。 KEY1:LCALL KS1 ; 检查有无闭合键? JNZ LK1 LJMP LK8 LK1: LCALL DIR LCALL DIR LCALL LS1 JNZ LK2 ; (A)≠ 0, 有键闭合则转 ; 无闭合键则返回 ; 延时 12 ms ; 清抖 ; 再检查有键闭合否? ; 有键闭合则转
2) 线反转法

中断扫描方式:当键盘上有键闭合时产生中断请 求,CPU响应中断请求后,转去执行中断服务程序, 在中断服务程序中判别键盘上闭合键的键号,并 做相应的处理。
下图是一实际键盘接口电路,其配套软件如下:
3)键盘接口举例
KS: MOV DPTR,#7FFFH ;键扫程序 CLR P1.0 ;先扫描第一列(0-7号键) MOVX A,@DPTR ;读入按键状态 MOV 37H,A ;暂存按键状态 CPL A JZ KSK1 ;0-7号键没键操作.则跳 LCALL DL20 ;0-7号键有按键,延时去抖 MOVX A,@DPTR ;再读按键状态 XRL A,37H ;和延时前状态一样吗? JZ KS1 ; 一样,则转去查询键号 KSK1:SETB P1.0 ; 扫 描 第 二 列 键 ,8-F 号 键 CLR P1.1 MOVX A,@DPTR ; 读入按键状态 MOV 37H,A ; 暂存按键状态 CPL A
; 存入R5 中
; 列值送A
LK5: RRC A JNC LK6 INC R5 SJMP LK5
; 右移一位 ; 该位为 0 则转 ; 列号加 1 ; 列号未判完则继续
LK6: MOV 20H, R5; 存键值
LK7: LCALL DIR
LCALL KS1 JNZ LK7
; 扫描一遍显示器
; 显示段码表
DSEG2: DB 39H, 5EH, 79H, 71H, 73H, 3EH DSEG3: DB 31H, 61H, 1CH, 23H, 40H, 03H DSEG4: DB 18H, 00H, 00H, 00H DL1: DL: DL6: MOV R7, #02H ; 延时子程序
INC DPTR
MOV A, @R0
; 指向PB口
; 取显示数据 ; 取出字形 1B
ADD A, #0DH ; 加上偏移量 MOVC A, @A+PC MOVX @ DPTR, A ; 送出显示
ACALL DL1 INC R0
; 延时
2B 1B 1B
; 缓冲区地址加 1
MOV A, R3;
; 发扫描信号 ; 键未释放等待
LCALL DIR
LCALL DIR MOV A, 20H KND: RET
; 键已释放
; 延时 12 ms, 清抖 ; 键值存入A中
LK8: MOV A, #FFH RET Biblioteka ; 无键标志FFH存入A中
KS1: MOV DPTR, #0101H ; 判键子程序
LJMP LK8
; 无键闭合则返回
LK2: MOV R3, #00H ; 行号初值送R3 MOV R2, #FEH ; 行扫描初值送R2 LK3: MOV DPTR, #0101H ; 指向 8155 口A MOV A, R2 INC DPTR INC DPTR ; 指向 8155 口C ; 行扫描值送A

图9-7
N位LED显示器
LED显示器有静态显示和动态显示两种方式:
图9-8
4位静态LED显示器电路
图9-9
8位LED动态显示器电路
【例】 LED显示器接口电路
图 7.28 6 位动态显示器接口
程序清单如下: DIR: MOV R0, #79H MOV R3, #01H MOV A, R3 LD0: MOV DPTR, #0101H ; 扫描值送PA口 MOVX @ DPTR, A ; 显示缓冲区首址送R0 ; 使显示器最左边位亮
JZ KSK2 ;8-F号键没有键按下,则跳 LCALL DL20 ;8-F号键有按键,则延时去抖 MOVX A,@DPTR ;再读按键状态 XRL A,37H ;和延时前的状态一样吗? JZ KS1 ;一样,则转去查询键号 KSK2:AJMP KS9 ;8-F键不存在键操作,则跳 KS1: MOVX A,@DPTR ;再读按键状态 CPL A JNZ KS1 ;按键还没有松开,等待松开 MOV A,37H ;查询有键操作的键号 JB ACC.0,KS2 ;不是第一个键,则跳 MOV 37H,#00H ;赋键初值 AJMP KS10 KS2: JB ACC.1,KS3 ;不是第二个键,则跳 MOV 37H,#01H ; 赋键初值
; 扫至最后一行则转
; 未扫完, 则移至下一行 ; 行值存入R2 中 ; 行号加 1 ; 行号送入A ; 行号×2
SJMP LK3 ; 转至扫描下一行
MOV R5, A
ADD A, R5
MOV R5, A ADD A, R5
; 行号×4
; 行号×8
MOV R5, A
MOV A, R4
MOV R6, #0FFH DJNZ R6, DL6
DJNZ R7, DL
RET
9.1.3 键盘、显示器组合接口举例
MOV A, #00H
INC DPTR
; 全扫描信号
MOVX @DPTR, A ; 发全扫描信号
INC DPTR
ANL A, #0FH
; 指向8155口C
; 保留低4位
MOVX A, @DPTR ; 读入列值
ORL A, #F0H
CPL A RET
; 高4位取“1”
; 取反, 无键按下则全“0”
JB ACC.5, LD1
; 扫到第 6 个显示位了吗? 3B
1B
RL A ; 没有, R3 左环移一位, 扫描下一个显示位 MOV R3, A AJMP LD0 LD1: RET ; 1B ; 2B ; 1B
DSEG: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH
DSEG1: DB 7DH, 07H, 7FH, 6FH, 77H, 7CH
AJMP KS10 KS3: JB ACC.2,KS4 ;不是第三个键,则跳 MOV 37H,#02H ; 赋键初值 AJMP KS10 KS4: JB ACC.3,KS5 ;不是第四个键,则跳 MOV 37H,#03H ;赋键初值 AJMP KS10 KS5: JB ACC.4,KS6 ;不是第五个键,则跳 MOV 37H,#04H ; 赋键初值 AJMP KS10 KS6: JB ACC.5,KS7 ;不是第六个键,则跳 MOV 37H,#05H ; 赋键初值 AJMP KS10 KS7: JB ACC.6,KS8 ;不是第七个键,则跳 MOV 37H,#06H ; 赋键初值
AJMP KS10 KS8: JB ACC.7,KS9 ;不是第八个键,则跳 MOV 37H,#07H ;赋键初值 AJMP KS10 KS9: SETB ACC.7 ;设置键值无效标志 AJMP KS11 KS10: MOV A,37H ;取得按键号码,即键值 ANL A,#07H JNB P1.0,KS11 ;是0-7号键,则跳 SETB ACC.3 ;是8-F键,则置第二列标志 KS11: ORL P1,#03H MOV 37H,A ;将键值存入37H单元 RET ;返回
1) 行扫描法
2) 线反转法 线反转法也是识别闭合键的一种常用方法, 该法比行扫 描速度快, 但在硬件上要求行线与列线外接上拉电阻。 先将行线作为输出线, 列线作为输入线, 行线输出全“0” 信号, 读入列线的值, 然后将行线和列线的输入输出关系互换, 并且将刚才读到的列线值从列线所接的端口输出, 再读取行 线的输入值。那么在闭合键所在的行线上值必为 0。这样, 当一个键被按下时, 必定可读到一对唯一的行列值。



非编码式键盘工作原理 非编码式键盘识别按键的方法有两种: 一是 行扫描法, 二是线反转法。 1) 行扫描法 通过行线发出低电平信号, 如果该行线所连 接的键没有按下的话, 则列线所接的端口得到 的是全“1”信号, 如果有键按下的话, 则得到非 全“1”信号。 为了防止双键或多键同时按下, 往往从第 0 行一直扫描到最后 1 行, 若只发现 1 个闭合键, 则为有效键, 否则全部作废。 找到闭合键后, 读入相应的键值, 再转至相 应的键处理程序。
MOVX @DOTR, A ; 扫描 1 行
MOVX A, @DPTR
ANL A, #0FH MOV R4, A MOV A, R2
; 读入列值
; 保留低 4 位 ; 暂存列值 ; 行扫描值送A
CJNZ A, #0FH, LK4 ; 列值非全“1”则转
JNB ACC.7, LK8
RL A MOV R2, A INC R3 LK4: MOV A, R3 ADD A, R3
相关文档
最新文档