键盘输入原理.docx
- 文档编号:2087536
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:7
- 大小:230.69KB
键盘输入原理.docx
《键盘输入原理.docx》由会员分享,可在线阅读,更多相关《键盘输入原理.docx(7页珍藏版)》请在冰豆网上搜索。
键盘输入原理
基础知识
1.键盘的基本原理
键盘是一组按键的组合,它是最常用的输入设备,操作人员可以通过键盘输入数据或命令,实现简单的人机对话。
键盘是一种常开型的开关,通常键的两个触点处于断开状态,按下键时它们才闭合。
键盘的识别有两种方案:
一是采用现有的一些芯片实现键盘扫描;再就是用软件实现键盘扫描。
目前有很多芯片可以用来实现键盘扫描,如有Intel8279、CH451、ICM7218、PCF8574等。
但是键盘扫描的软件实现方法有助于缩减系统的重复开发成本,且只需要很少的CPU开销。
嵌入式控制器的功能很强,可以充分利用这一资源,这里就介绍一下用软件实现键盘扫描的方案。
键盘从结构上分为独立式键盘与矩阵式键盘。
一般按键较少时采用独立式键盘,按键较多时采用矩阵式键盘。
(1)独立式键盘。
在由单片机组成的测控系统及智能化仪器中,用的最多的是独立式键盘。
这种键盘具有硬件与软件相对简单的特点,其缺点是按键数量较多时,要占用大量口线。
当按键没按下时,CPU对应的I/O接口由于内部有上拉电阻,其输入为高电平;当某键被按下后,对应的I/O接口变为低电平。
只要在程序中判断I/O接口的状态,即可知道哪个键处于闭合状态。
(2)矩阵式键盘。
矩阵式键盘使用于按键数量较多的场合,它由行线与列线组成,按键位于行、列的交叉点上。
一个3*3的行列结构可以构成一个有9个按键的键盘。
同理,一个4*4的行列可以构成一个16按键的键盘。
很明显,在按键数量较多的场合,与独立式键盘相比,矩阵式键盘要节省很多I/0接口。
2、键盘按键识别方法
(1)扫描法。
扫描法有行扫描和列扫描两种,无论采用哪种,其效果是一样的,只是在程序中的处理方法有所区别。
下面以行扫描法为例来介绍扫描法识别按键的方法。
先向键盘4根行线输出其中某一行为低电平,其它行为高电平,然后读取列值,若某一列值为低电平,则表明同时为低电平的行和列的交叉处按键被按下,如果没有某列为低电平,则继续扫描下一行。
因为输入低电平的行是从第一行开始逐行遍历的,故称为行扫描法。
行与列是相对的,可以将行按列对待,同时将列按行对待,所实现的扫描法效果是一样的。
下面以下图单片机4*4键盘的K2键按下为例,说明此键是如何识别出来的。
首先在键盘处理程序中将P1.4-P1.7依次按位变低电平,P1.4-P1.7在某一时刻只有一个为低电平。
在某一位为低电平时读行线,根据行线的状态即可判断出哪一个按键被按下。
如2号键按下,当列线P1.5为低电平时,读回的行线状态中P1.0被拉低,由此可知K2键被按下。
一般在扫描法中分两步处理按键,首先是使列(行)线依次变低电平,读行(列)线,进而判断出具体哪个键被按下。
(2)行列反转法。
扫描法是逐行或逐列扫描查询,当被按下的键处于最后一列时,要经过多次扫描才能最后获得此按键所处的行列值。
而行列反转法则显的简练,无论被按的键处于哪列,均可经过两步即能获得此按键所在的行列值。
实际原理是输出所有行为低电平的行数据后读取列值,如果出现有低电平的列值,表明有按键按下;然后将原本的用于读取数据的列线接口电路反转为输出并将读到的列值原封不动输出到原来的列线上,接着将原本用于输出数据的行线接口电路反转为输入并读入所有行值,输出的行值和读入的行值中同为低电平的行、列交叉位置就是按键位置,4位行值和4位列值可组合成8位扫描码,唯一表述某个按键。
仍以上图来介绍线反转法。
首先将行线P1.0-P1.3作为输入线,列线P1.4-P1.7作为输出线,并且输出线输出全为低电平,读行线状态,则行线中电平为低的是按键所在的行。
然后将列线作为输入线,行线作为输出线,并将输出线输出为低电平,读列线状态,则列线是电平为低的是按键所在的列。
综合上述两步结果,确定按键所在的行和列,从而识别出所按下的键。
假设10号键被按下,在第一步P1.3-P1.0全为低电平时,读P1.4-P1.7的值,则P1.5为低电平;在第二步P1.4-P1.7输出全为低电平时,读P1.3-P1.0时,P1.2为低电平。
由此可判断第3行第2列有键被按下,此键就是K10键。
3、按键去抖
由于通常的按键所用的开关是机械开关,因为当它们被按下或者被释放时,并不能够产生一个明确的1或者0。
尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。
当触点闭合时,其弹起就像一个球。
弹起效果将产生如下图所示的好几个脉冲。
弹起的持续时间通常将维持在5ms~30ms之间。
为了确保CPU对按键的一次闭合仅做一次处理,必须要在程序或硬件上进行防抖处理。
为节省硬件,通常在单片机或ARM系统中,一般不采用硬件方法消除键的抖动,而是用软件消抖方法。
即检测键闭合后延时5-10ms,让前延抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认真正有键按下。
当检测到按键释放后,也要给5-10ms的延时,待后延抖动消失后才转入该键处理程序。
4.JXARM9-2440教学实验系统的键盘模块
JXARM9-2440教学实验系统采用的是4×4的矩阵形式,由跨接在4根行线和4根列线交叉处的16个按键组成。
其原理图如下:
JXARM9-2440教学实验系统的4X4键盘原理图
本实验电路采用了行列扫描式键盘接口电路,并且输出的是行数据,输入是列数据。
用于控制键盘列输入是接口电路8D锁存器74HC273,只有当控制信号CLK有效的时候,该器件的输入端数据才能传送给输出端,而CLK信号是地址译码产生的nCSKEYOUT信号,对应的端口地址是0X2000C000。
用于控制键盘行输出是8位数据缓存器74LVCH244,只有当控制信号1G和2G有效的时候,该器件的输入端数据(1A1-1A4)才能传送给输出端(1Y1-1Y4),而CLK信号是地址译码产生的nCSKEYIN信号,对应的端口地址是0X2000C000。
0x2000C000(ARM9)
读入键盘值
0x2000C000(ARM9)
输出键盘扫描值
基于该电路的按键识别程序实现过程如下:
1、S3C2440处理器先通过8D锁存器74HC273的低4位向键盘输入某一列为低电平,其它列为高电平。
(锁存器74HC273的高4位通过电路可以知道是高电平)
2、因为输出行与输入列是同个地址0x2000C000,所以需要一定的延时函数。
3、然后通过8位数据缓存器74LVCH244的输出端低4位读出行值并判断是否有为0的行。
(8位数据缓存器74LVCH244的输出端高4位不需要,可以将输出数据的高4位清零)
4、如果有为0的行,表明同时为低电平的行和列的交叉处按键被按下,就识别相应的按键的值。
5、如果没有为0的行,则读出的行值为0x0f。
继续扫描下一列,使下一列为低电平0,其它列为高电平1,重复2,3,4步骤。
6、对按键抖动进行处理,所以在读出首个行值后需要插入防抖动延迟时间,然后再重新读一次行值,如果两次读出结果相同,则可以确定为可靠的按键值,否则,会被认为是干扰。
作业:
实现按键在数码管上输出显示相应键值,并且结合步进电机旋转。
也就是按键盘1,数码管上输出显示1,步进电机正转1圈,按键盘2,数码管上输出显示2,步进电机正转2圈,依次类推,按F,数码管上输出显示F,步进电机正转15圈。
键盘值分布如下:
0123
4567
89AB
CDEF
(注:
可编辑下载,若有不当之处,请指正,谢谢!
)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 键盘输入 原理