基于FPGA的键盘扫描模块的设计
引言
在现代的个人计算机系统中,一般都采用通用的标准键盘(如:标准101/102键盘或Microsoft自然PS/2键盘)来实现人与计算机之间的接口交互,从而将需要的各种数据和指令等信息都通过键盘来输人计算机川。
但是,各种嵌人式系统(如:手机、微波炉、电风扇等)所需的键盘的按键个数非常有限,通常为几个到十几个不等‘而标准键盘通常为二百多个按键),并且每个按键所代表的功能含义也各不相同。所以,每一种嵌人式系统都应对键盘(包括键盘扫描模块和相关控制信号等)进行专门设计,以便结合工程实际情况充分利用该系统已有的各种资源,使所设计的键盘很好地融合到嵌人式系统中。
键盘扫描的基本知识
1.编码键盘和扫描键盘
在数字电路中,可以利用编码器实现按键键值的直接编码,以将每个按键的输出信号对应连接到编码器的每一个输人端。这样,通过编码逻辑就可以在编码器的输出端得到对应于每个按键的码值,早期称这种键盘为编码键盘。但是当按键较多时,数码逻辑的成本就较高,并且直接编码的方法也不够灵活,而且一旦编码逻辑固定就难于更改。
当通用键盘上或按键数量较多时,普遍采用扫描方式产生键值。因此,可将按键连接成矩阵,每个按键位于某行、某列的交点上位口图1所示),先通过扫描方式确定按下键的行列位置,称为位置码或扫描码。再查表将位置码转换为按键码值或者直接使用扫描码,有些参考书称此为“非编码键盘”。但这种名称容易让人误解为没有对应的键值,因此又称为扫描式键盘。
图1行列式扫描健盘示意图
2.硬件扫描键盘与软件扫描键盘
如果执行扫描的过程由硬件逻辑实现,则将这种键盘称为硬件扫描键盘或电子扫描式编码键盘。在执行键盘扫描时应注意一个问题,即键在闭合过程中往往存在一些难以避免的机械性抖动,使输出信号也发生抖动,通常达10一20毫秒宽。若不避开抖动区,则可能误认为多次按键。因此应该设置硬件延时电路,延迟数十毫秒后再读取键值,这种电路称为去抖电路〕还应注意一个问题,即当前一个键值还未送出,而又有按键按下时,后边的键值将覆盖前边的键值,造成键值丢失问题。通常可以设置一控制信号.仅当前一键值送出后才允许产生后一键值,或者设置一组寄存器来保存前边若十个键值,等待系统逐个按顺序处理。
硬件扫描键盘的优点是不需要主机担负扫描任务,仪当产生键值后才向主机发出中断请求,CPU以相应中断方式接收按键键值,或者CPU定时从某个地址获取按键键值。该方式大大减轻了CPU的运行负荷,使其能以更多的时间去运行其它程序。
当然也可以执行键盘扫描程序,由CPU通过软件方法对键盘进行扫描。图2便是一种键盘扫描程序的流程图,这种键盘称为软件扫描键盘。按键时,键盘向主机提出中断请求。由软件扫描键盘来获得按键键值;或者由CPU定期执行键盘扫描程序,从而获得按键键值。即在扫描方法称为逐行扫描法,当有键按下时,首先获得此键的列值,然后逐行扫描就可以判断出按键所在的行值。这样,由行列值就可以通过转换得到按键键值。当然,要在执行键盘扫描过程中加人一定的延时,以去除抖动影响。
圈2一种盘妇描租序流程圈
如果系统对CPU的运行速度要求较高,并且CPU的负荷较重、系统资源比较紧张,则可以在键盘中设置一个单片机,由它负责执行键盘扫描程序,然后向CPU申请中断并送出扫描码或者按键键值。现代计算机的通用键盘.大多采用这样的键盘扫描方法。
基于FPGA的设计方法
1. 实现方法分析
根据项目的实际需要.拟实现的键盘扫描模块应具有如下特点:
I)该模块应能实时地将扫描所得的键值信息写人存储器指定地址,其中键值信息包括同一按键的重复次数和键值,系统软件则应能定时从该地址读取键值信息以执行相应的操作
2)键盘去抖动所采用的方法是多次扫描法,当连续几次扫描到同一键值时就认为此键被按下了,这样就完成了去抖动操作。
3)由于本项目不需要AS(:I I字符编码按键,故应将按键值设计为1一20直接送出。
4)为了能表示长时间按键的操作,当确定某一按键按下时.以后梅隔一定时间才扫描一次,若获得同一键值,则将按键重复次数加一同时将重复次数和键值组合成键值信急送出;并在延迟一定时间后再次扫描……
2.基于FPGA的具体实现
本文拟采用四个模块来实现键盘扫描功能,分别是即时扫描模块、扫描控制模块、扫描脉冲模块和键值传送模块。图3是其模块工作流程。
圈3实现健盘扫描的模块结构
(1)即时扫描模块
输人信号:
CLKSMHZ:时钟信号,用于产生时序;
KB_IN[3:0]:由键盘矩阵送来的检测信号;
SCA
- Linux嵌入式系统开发平台选型探讨(11-09)
- 嵌入式系统中文输入法的设计(03-02)
- 基于MPC755的嵌入式计算机系统设计(05-10)
- WinCE下光电编码器的驱动程序设计(04-12)
- 为什么嵌入式开发人员要使用FPGA(05-13)
- VxWorks几种常用的延时方法介绍(05-16)