键盘模块设计

来源:互联网 发布:2016如家酒店数据分析 编辑:程序博客网 时间:2024/06/05 15:16

在ARM嵌入式应用中,人机交互对话最通用的方法就是通过键盘和LCD显示进行的,操作者通过键盘向系统发送各种指令或置入必要的数据信息。键盘模块设计的好坏,直接关系到系统的可靠性和稳定性。

1 实例说明


在ARM应用系统中,键盘扫描只是ARM的工作之一,ARM在忙于各项工作任务时,如何兼顾键盘的输入,则取决于键盘的工作方式。键盘工作方式的选取原则是既要保证能及时响应按键操作,又要不过多占用ARM的工作时间。

本实例介绍ARM系统中常用的行列式键盘电路的硬件设计、键盘扫描及键盘测试,行列式键盘适应于按键数量较多,又不想使用专用键盘芯片的场合。这种方式的按键接口由行线和列线组成,按键位于行、列的交叉点上。

2键盘工作原理

2.1常用键盘接口

常用按键接门可分为独立式按键接口、行列式按键接口和专用芯片式等。具体采用哪  种方式,可根据所设计系统的实际情况而定。下面分别介绍这几种接口方式的优缺点及适用场合。

1. 独立式按键接口

独立式按键接口设计优点是电路配置灵活,软件实现简单。但缺点也很明显,每个按键需要占用一根口线,若按键数量较多,资源浪费将比较严重,电路结构也变得复杂。因此本方法主要用于按键较少或对操作速度要求较高的场合。软件实现时,可以采用中断方式,也可以采用查询方式,示意图如图13-1所示。


 


2. 行列式按键接口

行列式按键接口示意图如图13-4(a)所示,其使用原理将在下节详细讲述。行列式按键接口适应于按键数量较多,又不想使用专用键盘芯片的场合。这种方式的按键接口由行线和列线组成,按键位于行、列的交叉点上。这种方式的优点就是相对于独立接口方式可以节省很多I/O资源,相对于专用芯片键盘可以节省成本,且更为灵活。缺点就是需要用软件处理消抖、重键等。

行列式按键接口是一种老式的键盘接口,其键扫描方法是几乎所有PC键盘所采用的方法。

3.专用芯片式设计

专用键盘处理芯片一般功能比较完善,芯片本身能完成对按键的编码、扫描、消抖和重键等问题的处理,甚至还集成了显示接口功能。专用键盘处理芯片的优点很明显,可靠性高,口简单,使用方便,适合处理按键较多的情况。但在很多应用场合,考虑成本因素,可能并不是最佳选择。

2.2行列式键盘工作原理

ARM嵌入式系统使用常用的行列式键盘电路,此电路的优点是比较节省I/0口线,并且接口简单。它的工作模式如图13-2所示。

它的行线与按键的一个引脚相连,列线与按键的另一个引脚相连。平时列线被置成低电平,没有按键被按下时,行线保持高电平,而有按键被按下时,行线被拉成低电平。这时候控制器知道有按键被按下,但只能判断出在哪一行,不能判断出在哪一列,因此接下来就要进行键盘扫描,以确定具体是哪个按键被按下。


2.3键盘扫描流程

在行列式键盘方式中,ARM对键盘的扫描采取程序控制方式,一旦进入键扫描状态,则反复地扫描键盘,等待用户从按键上输入命令或数据。

而在执行键入命令或处理键入数据过程中,ARM将不再响应键入要求,直到ARM返回重新扫描键盘为止。编程扫描程序流程图如图13-3所示。


3硬件电路设计

3.1 ARM键盘接口

ARM由通用接口GPl支持键盘行扫描(Scanning keyboard row)和支持键盘阵列扫描(Scanning keyboard mattix)。

其中,Port A、Port B、Port D丰要用于外围芯片信号的控制,Port E有双重作用。例如,Port  A控制键盘的行信号,Port B用于RS-232,Port D用丁控制MODEM、FPGA。

ARM内置点阵式键盘,专用的8位列输出COL[7:0 ],Port A口可复用作键盘的行输入,任意一个键按下时都会产生中断。其特点如下:

·列输出能被驱动成全低、全高或者全高阻,允许8x8键矩阵的任意组和按键;

·Port A8位或的结果驱动一个键盘中断;

·键盘中断能够唤醒系统。

3.2键盘电路原理图

实现的系统硬件构成为4×4的行列式键盘,键盘的连接电路如图13-4所示。行线通过一个电阻被上拉到VCC,VCC是+5V电压。行线与按键的一个引脚相连,列线与按键的另一个引脚相连。平时列线被置成低电平,没有按键被按下时,行线保持高电平:而有按键被按下时,行线被拉成低电平,这时候控制器知道有按键被按下,但只能判断出在哪一行,不能判断出在哪一列,因此接下来就要进行键盘扫描,以确定具体是哪个按键被按下。

键盘扫描的过程是将列线逐列置成低电平,然后读取行线状态,直到行线中出现低电平,这时可知哪一列是低电平;然后将行线与列线的状态装入键码寄存器,进行按键译码,得到按下的按键的相应编码,这样就完成了按键扫描过程。当然,一个完整的按键扫描过程还需要配合相应的键盘去抖动手段才能正确地识别按键,不会发生重键和错误判断等情况。


对于使用者来说,利用此电路可以作为底层嵌入式的键盘控制器,即实现对键盘的扫描,识别出键码。控制器与ARM的通信协议可以采用串口、并行、PS/2、USB等。

4软件设计

4.1键盘扫描程序

键盘扫描程序的实现是首先给两个(矩阵中的2)口线上送高电平,然后在一个循环体内依次在端口PO(矩阵中的8)经锁存器送一个只有一位为O其余为 1的电平(即十六进制数0xFE循环左移一位实现),判断移位的次数和两个口线中的哪个为低电平亦即逻辑O来实现。下面通过具体程序来说明。

 



当然这只是最基本的键盘扫描子程序,当扫捕到键号以后还要根据其他一些具体条件来进行相应的译码,才能决定最后按下的键代表什么具体值。键值有功能键、数字键和字母键,每种键值都有不同的译码处理。键盘扫描子程序是与硬件结构相对应的,因此考虑到端口资源的充分利用,改用4×4的矩阵键盘结构可以节省两个 I/O端口,但是键盘扫描程序要稍微复杂一些;但由于ARM其运行速度远远超过传统的微处理器,这一点带来的影响可以忽略不计。下面是改进后的键盘扫描子程序。




这是改进后键盘的扫描子程序,而键盘的译码处理与用传统方式实现的系统基本相同。译码处理用了比较多的状态变量,这是因为在键盘上除功能键和数字键O以外,其他的数字键还有第二功能。冈此在译码过程中设置了一个结构体变量,用来存放每个键对应的所有状态,对应的程序代码如下所示。

 


在每个键的译码处理中,只要根据相应的状态变量就可以得到每个键在什么状态中应该得到的是什么键值,因而在程序中不同的环境下就可以只设置不同的状态变量,而不用去考虑按键及其处理情况。

4.2键盘测试程序

以下是键盘测试程序,当结果正确时,从串口输出按下的键值,连续按键时键值将随着改变。



4.3 键盘驱动

ARM-Linux 源码中提供的驱动是一个基于autocpu12结构的键盘驱动,驱动文件是/arm/kernel /linux.driverschar.clps711x_keyb.c。这个驱动和cdb89712结构所用的驱动是样的,只需要在驱动文件中个性以下几行即可。

 


 
 
原创粉丝点击