700 likes | 819 Views
第 11 章 键盘技术和 LED . 本章重点 . 键盘的基本工作原理,包括矩阵结构、行扫描法和行反转法识别原理 解决抖动和重键的连锁法和巡回法的原理 LED 显示原理和多位显示原理 微型机系统中键盘子系统的工作原理 扩展键盘扫描电路的工作原理 主机键盘接口的功能和构成 09 H 键盘中断处理程序对各类键的处理 16 H 键盘中断处理程序的功能 键盘缓冲区的工作机制. 11 .1键盘的基本工作原理 . 键盘矩阵 键的识别 抖动和重键问题的解决. 11 .1.1键盘矩阵 . 最简单的键盘结构. 键盘的矩阵式结构. 11 .1.2 键的识别 .
E N D
本章重点 键盘的基本工作原理,包括矩阵结构、行扫描法和行反转法识别原理 解决抖动和重键的连锁法和巡回法的原理 LED显示原理和多位显示原理 微型机系统中键盘子系统的工作原理 扩展键盘扫描电路的工作原理 主机键盘接口的功能和构成 09H键盘中断处理程序对各类键的处理 16H键盘中断处理程序的功能 键盘缓冲区的工作机制
11.1键盘的基本工作原理 键盘矩阵 键的识别 抖动和重键问题的解决
11.1.1键盘矩阵 最简单的键盘结构
11.1.2 键的识别 识别闭合键的方法 • 行扫描法 • 行反转法
1. 行扫描法的原理 基本原理: • 分行扫描 • 检查是否有键按下 • 若有,确定哪个键被按下
判断是否有按键 WAIT: MOV AL,00H MOV DX,OUTPORT OUT DX,AL ;往所有行线上输出低电 平 MOV DX,INPORT IN AL,DX ; 读取列值 AND AL,0FFH CMP AL,0FFH ;是否有列线为低电平 JZ WAIT ;否,则循环等待 DONE:CALL DELAY ;是,则延迟去抖动 …
扫描法判断闭合键的程序: PROG: MOV BL,0 ;键号初值为0 MOV CL, 0FEH ;送扫描初值 MOV DL, 8 ;计数值为行数 FROW: MOV AL, CL OUT ROWPORT,AL ;扫描一行 ROL AL, 1 MOV CL, AL ;修改扫描值 IN AL, COLPORT CMP AL, 0FFH ;读进列值,并判别是否有哪条列线接地 JNZ FCOL ;有列线接地,则转FCOL MOV AL, BL ADD AL, 8;如没有列线接地,则使键号=键号+列数/行 MOV BL, AL DEC DL ;是否各行都扫完 JNZ FROW ;未扫完,则扫下一行 JMP DONE ;已扫完,则转DONE FCOL: RCR AL,1 JNC PROCE ;如此列接地,则转PROCE INC BL JMP FCOL;如未找到接地的列线,则转FCOL继续寻找 PROCE: ;键命令处理程序 DONE: ;后续处理程序
2. 行反转法的原理 行线、列线分别接并行口 行线输出0,列线输入x 列线输出读得的值x,行线输入y yx组合代表按下的键 查表法识别按键 重键问题
行反转法的工作示意图 (a)行线输出,列线输入 (b) 列线输出,行线输入
ST: MOV AL,82H • OUT PORT1,AL; PORT1是8255A的控制口地址,设控制字,A口为输出,B为输入 • WAIT1: MOV AL,0 • OUT PORTA, AL ;往端口A输出全0 • IN AL, PORTB ;输入列值 • AND AL, 0FFH • CMP AL, 0FFH ;看是否有键闭合 • JZ WAIT1 ;如无闭合键,则等待 • PUSH AX • PUSH AX ;保留列值 • CALL DELAY ;延迟20ms • MOV AL, 90H • OUT PORT1, AL;将8255A的A口设置为输入,B口设置为输出 • POP AX • OUT PORTB,AL ;将读得的列值输出到端口B • IN AL, PORTA ;读进行值 • POP BX • MOV AH, BL ;使AH中为列值,而AL中为行值 • MOV SI, TABLE+3FH ;取键码表末地址 • MOV CX, 40H ;CX作为键计数器 • LOOP1: CMP AX,〔SI+0〕;行值列值与键码表比较 • JZ KEYPRO ;如相等,则转键命令处理 • DEC SI • DEC SI ;修改表指针和键计数器 • DEC CX • JNZ LOOP1 ;未比较完,则再比 • JMP ST ;如已比较完,但没有在键码表中找到相同码,则重新开始找 • KEYPRO: … • ;键命令处理 • TABLE: DW 0FEFEH ;键码表开始,K0键 • DW 0FEFDH ;K1键 • DW 0FEFBH ;K2键 • DW 0FEF7H ;K3键
11.1.3抖动和重键问题的解决 (1)抖动:用延迟来解决 (2)重键: a) A键先按后放,B键后按先放 b) A键先按先放,B键后按后放 c) A键、B键同时按下,但A键先放
重键识别方法 连锁法 巡回法
连锁法 在所有的键释放后,只承认此后闭合的第一个键,此键闭合时按下的其他键均不作识别 • 一个键按下,识别 • 读取A • 识别A • 舍弃
连锁法程序流程图 在所有的键释放后,只承认此后闭合的第一个键
巡回法 等前面所识别的键释放后,就可对其他键识别 检测释放 • 一个键按下,识别 • 识别A键 • b1. A,B同一行,识别A • b2. A,B不同行,识别A,B • c1. B处于小行号,识别B • c2. B初始大行号,识别A,B
巡回法的流程图 等前面所识别的键释放后,就可对其他键识别
11.2 LED数字显示 LED的工作原理 多位显示问题
11.2.1 LED的工作原理 七段式LED显示部件 (a)典型的七段式LED器件 (b) 共阳极LED (c) 共阴极LED
共阳级结构:数码显示端低电平有效 共阴极结构:数码显示端高电平有效
数据用LED显示的译码方法: 专用芯片译码 软件译码
软件译码举例(显示1位数字) DISP: MOV BX,OFFSET DATA MOV AL,[BX] ;要显示的数字 MOV BX,OFFSET LEDADD;代码表首址 XLAT ;将数字转换成显示代码 MOV DX,PORT OUT DX,AL ;将显示代码送显示, … LEDADD: DB 40H ;0的显示代码 DB 79H ;1的显示代码 DB 24H ;2的显示代码 …
11.2.2多位显示问题的解决 硬件:公用的驱动电路 软件:扫描方法
11.3键盘和LED设计实例 设计要求: • 连接7×8=56键的键盘 • 连接6个LED • 设计1个定时装置,显示分和秒 • 按下某些特定键时,实现指定的功能
本系统直接使用的端口地址 计数器8253: 控制口地址 00D6H 计数器0的地址 00D0H 计数器1的地址 00D2H 计数器2的地址 00D4H
中断控制器8259A: ICW1、OCW2、OCW3写入地址 00C0H ICW2、ICW3、ICW4、OCW1写入地址 00C2H OCW1的读出地址 00C2H 并行接口8255A: 控制口地址 00E6H A端口地址 00E0H B端口地址 00E2H C端口地址 00E4H
计时器软件的两个主要部分: 显示程序 键盘扫描程序
设计方案 将键盘扫描程序、键命令的识别和处理程序作为主程序 将计时程序和显示程序作为中断处理程序
11.4微型机的键盘子系统 两部分: • 键盘本身 • 主机的键盘接口 键盘子系统的示意图
11.4.1扩展键盘和键盘控制器 扩展键盘、键盘扫描码和系统扫描码 扩展键盘的工作原理 扩展键盘的连接信号
1. 扩展键盘、键盘扫描码和系统扫描码 (1)扩展键盘 (2)键盘扫描码 • 接通扫描码 • 断开扫描码 • 83键盘 • 84/101/102/104 (3)系统扫描码
2. 扩展键盘的工作原理 16行×8列的键盘扫描电路
3. 扩展键盘的连接信号 • 键盘通过五芯插头和主机板上的键盘接口相连 • 键盘和主机串行传输 • 键盘不直接接电源
11.4.2主机的键盘接口电路 主机键盘的接口功能: • 接收键盘的串行扫描码 • 将串行扫描码转为并行扫描码,再转为系统扫描码 • 向CPU发中断请求 • 接收CPU的键盘自检命令或复位命令,并传输到键盘
11.5键盘中断处理程序 09H键盘中断处理程序 有键按下时,发生中断,执行09H中断服务处理程序,处理按键,把键码存储到键盘缓冲区中 16H键盘中断处理程序 应用程序或操作系统调用int 16h
键的分类 • 第一类ASCII码键 • 第二类ASCII码键 • 不能用ASCII码表示的组合键和功能键 • 特殊命令键