嵌入式系统可以对各种数据信息进行快速计算、分析、输出,即完成对数据的处理,但很多时候就需要用户“告诉”系统如何执行下一步动作,这时,就需要使用输入设备将用户的“指示”或“依据”传递给嵌入式系统。
常见的人机交互输入设备包括按键、触摸屏、麦克风及其他各类用户可控输入的传感器等。随着科技的发展,不仅我们常见的交互输入设备出现了新的形态,而且也出现了不少新的交互输入方式。比如,现在手机中的电容按键及重力感应传感器、距离传感器。现在的交互设备不仅体现在硬件设备的复杂性上,而且在相关数据的复杂性上也与以往有了较大的增加。比如,可用于语音输入的麦克和可用于人脸识别的摄像头,为了完成这些人机交互输入,除了硬件输入设备对信息采集外,还需要后台进行大量的数据处理,以帮助系统“理解”用户的“输入信息”。
下面我们详细介绍*常用的输入设备:键盘/按键。
图1*常用的输入设备键盘
键盘
键盘是嵌入式应用的常用外部设备之一。键盘是由若干个按键组成的开关矩阵,它是*简单的数字量输入设备。对系统而言,键盘上不同的按键代表着不同的含义(一般来说,按键的含义可通过软件定义)。用户通过按动键盘的按键,输入数据或命令,实现简单的人机交互。
1、键盘的基本电路
键盘的基本电路是一个接触开关,通、断两种状态分别表示逻辑“0”和“1”。如图2所示,当开关打开时,处理器检测到相应引脚为高电平,表示逻辑“1”;当开关闭合时,处理器检测到相应引脚为低电平,表示逻辑“0”。
2、键盘的分类
按键排布的方式,键盘可分为可分成独立式按键键盘和矩阵式按键键盘;按读入键值的方式,可分为直读方式和扫描方式;按编码方式,可分成非编码方式和硬件编码方式;按微处理器响应方式可分为中断方式和查询方式。以上各种方式组合可构成不同硬件结构和接口的键盘。以下介绍较为常用的两种方式。
①独立式
独立式按键键盘是指将每个独立按键按一对一的方式直接接到微处理器的I/O输入端口,如图2所示。读键值时,处理器可以检测相应I/O输入端口的状态,判定输入电平,确定输入的逻辑值。按键之间在硬件和读取方式上均相互独立,所以习惯称这种按键为独立式按键。这种方式在软硬件上实现均比较简单,但每一个按键都占用一个I/O端口,占用的资源较多,一般在按键数量较少,微处理器I/O资源充足时采用。
图2键盘模型及按键抖动示意图
②矩阵式
矩阵式键盘是用n条I/O线组成行输入口,m条I/O线组成列输出口,在行列线的每一个交点上设置一个按键。如图3(b)所示,为一个4行4列的矩阵键盘。矩阵式键盘读取键值一般采用逐行扫描的方式,即输出口按位轮换输出低电平,再从输入口读入信息,*后计算各次从输入口读取的信息,获得键码。例如,将row0~3配置为输出模式,col0~3配置为输入模式;现将row0输出低电平,row1~3输出高电平,读取col0~3;如果此时第0行0列的按键有按下,则col0检测到输入为低电平,其他列为高电平。这种方式占用I/O线较少,在按键较多的应用中采用较多。
设计键盘时,通常小于4个按键的应用,可以使用独立式接口。如果按键较多,为了减少微处理器的I/O端口的占用,可以使用矩阵式键盘。
图3独立键盘与矩阵键盘
另外,如果使用处理器I/O直接与矩阵键盘接口相连,上述矩阵键盘的检测方式需要处理器不断对接口扫描检测。对速度较快的处理器来说,这种检测方式是对处理器的极大浪费。所以实际应用中建议使用专门的矩阵键盘的驱动芯片或I/O扩展芯片,来实现对矩阵键盘的检测,比如ZLG7290、CAT9555等扩展芯片。使用驱动或I/O扩展芯片,可以将处理器从简单但频繁的键盘扫描动作中解放出来。如图4为ZLG7290实现矩阵键盘应用的基本电路,该芯片支持2×8个I/O扩展,采用I2C接口与处理器连接,并支持中断输出,*大可扩展8×8的矩阵键盘。
图4ZLG7290矩阵键盘电路