1、第20章 键盘接口技术概述键盘输入设备及接口。键盘有编码键盘(ASCII码)及非编码键盘之分。键盘要解决的问题有:l 判断有无键按下(查询,中断);l 识别按下的键(行扫描法,列扫描法,行列反转法);l 去抖动(硬件法,软件法);l 重键处理(软件第一次,键释放)。20.1. 键盘设计1. 去抖动不稳定状态大约20ms。l 硬件去抖动R-S触发器l 软件去抖动延时20ms.2. 重键处理重键:两个或两个以上键同时按下;或者一个键按下时,另一个键又按下。处理方式:l 扫描键盘,当有多个闭合键时,只识别最后一个按下的键。l 确认一个闭合键之后,保持状态,只有当该键释放后再去处理,并开始识别其它键。
2、3. 键盘结构种类:线性键盘、矩阵键盘。l 线性键盘l 矩阵键盘20.2. 判断有无键按下(有键按下吗?)方法:查询法、中断法。l 查询法行输出全0,输入列值,若不是全1,表示有键按下,但是是哪个键按下还不知道。l 中断法行输出全0,若有中断IR4表示有键按下了,但是是哪个键按下还不知道。20.3. 键的识别(按下的到底是哪个键?)方法:行扫描法、列扫描法、行列反转法。1. 行扫描法行输出,列输入。行输出的值分别使某一行为低电平,输出11111110B,输出11111101,0111111B。即行扫描。行每输出一个扫描值,列都会读入,判断列中有无0,若有0,说明对应0的列中有键按下。例如,行在
3、输出11111110B时,读入的列值为11111101B,说明第一行,第二列有键按下。2. 列扫描法列输出,行输入。方法与行扫描法相同中。3. 行列反转法行输出,列输入;之后反转输出与输入,变为行输入,列输出。(1)首先行输出全0,读入列值并保存,若有键按下,会有一个是0,表示某列有一个键按下,到底是哪行的键并不知道。(2)之后行列输入输出反转,把上步骤读入的列值在列中输出,读入行值,行值中会有一个是0,0会位置表示某行有键按下,确定了是哪行的键按下了。由列值确定了哪列有键按下;行值确定了哪行有键按下。两个合起来确定了按下键的行列位置。对4x4矩阵键盘,有:键值编号=行计数值x4+列计数值对8
4、x8矩阵键盘,有:键值编号=行计数值x8+列计数值什么是键值编号?什么是行计数值?什么是行列数值?键值编号功能键值的变换,查表方式。20.4. 综合如何判断有无键按下?如何去抖动?如何识别到底是哪个键按下了?以下都是用软件去抖动。重键处理方式相同。1. 查询方式、行扫描法l 判断有无键按下:行输出全0,读入列值,是不是全1,若是全1,无键按下,否则有键按下。l 延时20ms去抖动。l 键识别:行扫描法识别到底是哪个键按下。l 重键处理:行输出全0,列是否是全1,是全1时说明键已经松开,可以继续执行,否则查询等待。见书中例子。P2492. 中断方式、行扫描法l 初始化时行输出全0.l 判断有无键
5、按下: 有中断,表示有键按下。l 延时20ms去抖动(中断服务程序中)。l 键识别:行扫描法识别到底是哪个键按下(中断服务程序中)。l 重键处理:行输出全0,列是否是全1,是全1时说明键已经松开,可以继续执行,否则查询等待(中断服务程序中)。3. 查询方式、行列反转扫描法l 判断有无键按下:行输出全0,读入列值,是不是全1,若是全1,无键按下,否则有键按下。l 延时20ms去抖动。l 键识别:行列反转,在列中输出读入的列值,读行值,识别到底是哪个键按下。l 重键处理:行输出全0,列是否是全1,是全1时说明键已经松开,可以继续执行,否则查询等待。4. 中断方式、行列反转扫描法l 初始化时行输出全
6、0.l 判断有无键按下: 有中断,表示有键按下。l 延时20ms去抖动(中断服务程序中)。l 键识别:行列反转,在列中输出读入的列值,读行值,识别到底是哪个键按下(中断服务程序中)。l 重键处理:行输出全0,列是否是全1,是全1时说明键已经松开,可以继续执行,否则查询等待(中断服务程序中)。见p25420.5. 微机与键盘的接口1. 键盘扫描原理扫描码=ON/OFF状态+键盘位置编号格式:2. 键盘侧与微机的接口3. 微机侧键盘接口PB6=0,禁止系统时钟PCLK;PB6=1允许时钟。PB7=1,清74LS322和中断请求触发器;PB7=0允许74LS322工作。20.6. 键盘中断键盘中断处理程序有中断类型码09H,16H, 21H三种方式。明天实验考题:编程实现在键盘上输入4个十六进制的值,在屏幕上显示其二进制的数据值。如键盘上输入F0F0之后,会在屏幕中显示为111100001111B。9