4.2 键盘4.2.1键盘概念键盘是最常用也是最主要的输入设备,通过键盘,可以将英文字母、数字、标点符号等输入到计算机中,从而向计算机发出命令、输入数据等。
4.2.2键盘的分类按照键盘的工作原理和按键方式的不同,可以划分为四种:(1)机械式键盘(Mechanical) 采用类似金属接触式开关,工作原理是使触点导通或断开,具有工艺简单、噪音大、易维护的特点。
(2)塑料薄膜式键盘(Membrane)键盘内部共分四层,实现了无机械磨损。
其特点是低价格、低噪音和低成本,已占领市场绝大部分份额。
(3)导电橡胶式键盘(Conductive Rubber)触点的结构是通过导电橡胶相连。
键盘内部有一层凸起带电的导电橡胶,每个按键都对应一个凸起,按下时把下面的触点接通。
这种类型键盘是市场由机械键盘向薄膜键盘的过渡产品。
(4)无接点静电电容式键盘(Capacitives)使用类似电容式开关的原理,通过按键时改变电极间的距离引起电容容量改变从而驱动编码器。
特点是无磨损且密封性较好。
按其结构形式可分为以下两种:(1)编码键盘编码键盘采用硬件方法产生键码。
每按下一个键,键盘能自动生成键盘代码,键数较多,且具有去抖动功能。
这种键盘使用方便,但硬件较复杂,PC机所用键盘即为编码键盘。
(2)非编码键盘非编码键盘仅提供按键开关工作状态,其键码由软件确定,这种键盘键数较少,硬件简单,广泛应用于各种单片机应用系统,本次设计使用非编码键盘。
按照键盘与单片机的连接方式可分为一下两种:(1)独立式键盘独立式键盘,顾名思义,即各按键相互独立,每个按键占用一根I/O口线,每根I/O口线上的按键工作状态不会影响其他按键的工作状态。
这种按键软件程序简单,但占用I/O口线较多(一根口线只能接一个键),适用于键盘应用数量较少的系统中。
(2)矩阵式键盘矩阵式键盘又称行列式键盘,在其行、列交汇点接有若干个按键。
当需要较多按键时,与独立式键盘相比,单片机口线资源利用率大幅提高了。
但若需要更多的键盘,需采用接口扩展技术,如8155等。
综上所述,结合实际情况,本次设计选用非编码矩阵式键盘。
4.2.3非编码矩阵式键盘工作原理非编码矩阵式键盘,作为单片外围电路,应具有如下功能:(1)键扫描功能,即检测是否有键按下。
(2)键识别功能,确定被按下键所在的行列的位置。
(3)产生相应的键的代码(键值)。
(4)消除按键弹跳及对于多键串键(复按)。
非编码矩阵式键盘工作原理主要以下几方面:(1)键扫描键盘上的键按行列组成矩阵,在行列交点上都有对应有一个键。
为判定有无键被按下(闭合)以及被按键的位置,一般使用扫描法。
首先判定有没有键被按下。
键盘的行线一端经电阻接+5V电源,另一端接单片机的输入口线。
各列线的一端接单片机的输出口线,另一端悬空。
为判定有没有键按下,可先向所有列线输出低电平,然后再输入各行线状态。
若行线状态皆为高电平,则表示无键按下;若行线状态中有低电平则表明有键按下。
然后再判定被按键的位置。
因为键盘矩阵有键被按下时,被按键处的行线和列线被接通,使穿过闭合键的那条行线变成低电平。
(2)去抖动当扫描表明有键被按下之后,紧急着应进行去抖动处理。
因为常用键盘的键实际上是一个机械开关结构,被按下时,由于机械触点的弹性及电压突然跳变等原因,在触点闭合或断开的瞬间会出现电压的抖动。
抖动时间长短与键的机械特性有关,一般为5~10ms。
而键稳定闭合时间和操作者的按键动作有关,约为十分之几到几秒不等。
抖动现象会引起CPU对一次键操作进行多次处理,从而可能产生错误,因而必须设法消除抖动的不良后果。
通过去抖动处理,可以得到按键闭合与断开的稳定状态。
去抖动的方法有硬件与软件两种:硬件方法是加去抖动电路,如可通过RS触发器实现硬件去抖动;软件方法是在第一次检测到键盘按下后,执行一段20---30ms的延迟子程序后再确认该键是否确实按下,躲过抖动,待信号稳定之后,再进行键扫描。
为了简单起见,本设计采用软件方法去抖动。
(3)键码计算为了准确判断闭合键的位置,要对每个按键进行编码。
根据矩阵式键盘的结构,采用行扫描的键位识别方法。
使某条列线为低电平,如果这条列线上没有闭合键,则各行线的状态都为高电平;如果列线上有键闭合,则相应的那条行线即变为低电平。
于是就可以根据行线号与列线号计算出闭合键的键码。
扫描时由第一列开始,然后行线状态状态输入单片机,判断哪一行有键闭合,若无键闭合,再扫描第二列,检测下一列各行键闭合状态,由此一直扫描下去。
至此扫描似乎已经可以结束,但是实际上扫描往往要继续进行下去,以发现出现的多键同时被按下。
最后得出被按下键的行号、列号,计算键码,公式如下:键码 = 行首键号+列号(4)等待键释放计算键码后,再以延时后进行行扫描的方法等待键释放。
等待键释放是为了保证键的一次闭合仅进行一次处理。
(5)键处理子程序在计算机中每一个键都对应一个处理子程序,得到闭合键的键码后,就可以根据键码,转到相应的键处理子程序,进行字符、数据的输入或命令处理,这样就可以实现该键的功能。
(6)键盘扫描的中断控制方式在单片机系统中,CPU除了对键盘进行处理外,还要进行数据处理、结果输出显示及其它各种控制,因此键盘处理不应占用CPU过多的时间,但又必须保证CPU能够检测到键盘的工作。
为提高CPU的工作效率,可采用中断扫描方式。
当无键闭合时,CPU处理自已的工作,当有键闭合时,产生中断请求,CPU转去执行键盘扫描子程序并执行相应的功能。
设计中可采用4输入与门用于产生键盘中断,其输入端与各行线相连,输出端接至SM8958的外部中断输入端。
当无键盘闭合时,与门各输入端均为高电平,输出端为高电平;当有键闭合时,为低电平,于是向CPU申请中断。
若CPU开放中断,则会响应该键盘中断,转去执行键盘扫描子程序。
3.2.4 键盘设计本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O 线的数目,在按键比较多的时候,通常采用这样方法。
每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M 个按键的键盘。
在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。
4×4矩阵键盘的工作原理在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图5所示。
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。
由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。
扫描原理把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,经过比对之后就可知道是哪个键被按下。
比如说扫描码送入01111111,前面的0111是代表此时扫描第一行P1.0列,而后面的1111是让读取的4行接脚先设为VDD,若此时第一行的第三列按键被按下,那读取的结果就会变成01111101(注意1111变成1101),其中LSB的第三个bit 会由1变成0,这是因为这个按键被按下之后,会被垂直的扫描码电位short,而把读取的LSB的bit电位拉到0,此即为扫描原理。
由於这种按键是机械式的开关,当按键被按下时,键会震动一小段时间才稳定,为了避免让8051误判为多次输入同一按键,我们必须在侦测到有按键被按下,就Delay一小段时间,使键盘以达稳定状态,再去判读所按下的键,就可以让键盘的输入稳定。
图3.8为键盘整体模框图:图3.8 键盘整体模框图按键电路设计由于设计要求使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。
其原理如图2-5所示。
图2-5 行列式键盘原理电路图每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。
首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。
方法是:向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。
如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。
判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。
方法是:依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。
按键的操作面板如图2-6所示。
共计数字键10个,功能键2个。
图2-6按键操作面板示意图10个数字键用来输入密码,另外2个功能键分别是:开锁和上锁。
上锁和开锁的过程在1-2中已经详细介绍,在此不再说。
面板上还有一个蜂鸣器,其中一个功能是用来指示操作的按键是否在成功的按下;另外一个功能是当用户输入密码错误的次数超过了3次,鸣笛以示报警1.上锁过程图1-2键盘显示平面图按数字键,数字会从显示器的最右端开始显示,然后依次向左移位。
若要更改密码可按“开锁”键清除原有密码,再重新输入新密码。
本设计为的密码为4位,输入的多余数字本电路不予理会,不会显示在显示器上。
当密码输入正确后按下“上锁”键,就可将门锁上,同时将密码存储在电路中并清除显示器的显示。
2.开锁过程按数字键输入密码,密码在显示器上从右到左依次显示,4位密码输入正确后按下“开锁”甲,密码锁被打开并清除电路中所存储的密码,显示器也被清零。
当输入密码有误时,可按“上锁”键清除所输入的数字,内部存的秘密不会丢失,再重新输入正确的密码按“开锁”键即可。
注:当输入错误的密码超过3次后,电路会发出报警信号。
为防止大家忘记密码,本电路还设计了一个万用密码,无论以前的密码是什么,只要输入万用密码按“开锁”键即可开锁并清除原有密码。