新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于FPGA的键盘扫描模块的设计

基于FPGA的键盘扫描模块的设计

作者:时间:2017-06-06来源:网络收藏

引言

本文引用地址:http://www.amcfsurvey.com/article/201706/349544.htm

在现代的个人计算机系统中,一般都采用通用的标准键盘(:标准101/102键盘或Microsoft自然PS/2键盘)来实现人与计算机之间的接口交互,从而将需要的各种数据和指令等信息都通过键盘来输人计算机川。

但是,各种嵌人式系统(:手机、微波炉、电风扇等)所需的键盘的按键个数非常有限,通常为几个到十几个不等‘而标准键盘通常为二百多个按键),并且每个按键所代表的功能含义也各不相同。所以,每一种嵌人式系统都应对键盘(包括键盘扫描模块和相关控制信号等)进行专门设计,以便结合工程实际情况充分利用该系统已有的各种资源,使所设计的键盘很好地融合到嵌人式系统中。

键盘扫描的基本知识

1.编码键盘和扫描键盘

在数字电路中,可以利用编码器实现按键键值的直接编码,以将每个按键的输出信号对应连接到编码器的每一个输人端。这样,通过编码逻辑就可以在编码器的输出端得到对应于每个按键的码值,早期称这种键盘为编码键盘。但是当按键较多时,数码逻辑的成本就较高,并且直接编码的方法也不够灵活,而且一旦编码逻辑固定就难于更改。

当通用键盘上或按键数量较多时,普遍采用扫描方式产生键值。因此,可将按键连接成矩阵,每个按键位于某行、某列的交点上位口图1所示),先通过扫描方式确定按下键的行列位置,称为位置码或扫描码。再查表将位置码转换为按键码值或者直接使用扫描码,有些参考书称此为“非编码键盘”。但这种名称容易让人误解为没有对应的键值,因此又称为扫描式键盘。

1行列式扫描健盘示意图

2.硬件扫描键盘与软件扫描键盘

如果执行扫描的过程由硬件逻辑实现,则将这种键盘称为硬件扫描键盘或电子扫描式编码键盘。在执行键盘扫描时应注意一个问题,即键在闭合过程中往往存在一些难以避免的机械性,使输出信号也发生,通常达1020毫秒宽。若不避开区,则可能误认为多次按键。因此应该设置硬件延时电路,延迟数十毫秒后再读取键值,这种电路称为去抖电路〕还应注意一个问题,即当前一个键值还未送出,而又有按键按下时,后边的键值将覆盖前边的键值,造成键值丢失问题。通常可以设置一控制信号.仅当前一键值送出后才允许产生后一键值,或者设置一组寄存器来保存前边若十个键值,等待系统逐个按顺序处理。

硬件扫描键盘的优点是不需要主机担负扫描任务,仪当产生键值后才向主机发出中断请求,CPU以相应中断方式接收按键键值,或者CPU定时从某个地址获取按键键值。该方式大大减轻了CPU的运行负荷,使其能以更多的时间去运行其它程序。

当然也可以执行键盘扫描程序,由CPU通过软件方法对键盘进行扫描。图2便是一种键盘扫描程序的流程图,这种键盘称为软件扫描键盘。按键时,键盘向主机提出中断请求。由软件扫描键盘来获得按键键值;或者由CPU定期执行键盘扫描程序,从而获得按键键值。即在扫描方法称为逐行扫描法,当有键按下时,首先获得此键的列值,然后逐行扫描就可以判断出按键所在的行值。这样,由行列值就可以通过转换得到按键键值。当然,要在执行键盘扫描过程中加人一定的延时,以去除抖动影响。

2一种盘妇描租序流程圈

如果系统对CPU的运行速度要求较高,并且CPU的负荷较重、系统资源比较紧张,则可以在键盘中设置一个单片机,由它负责执行键盘扫描程序,然后向CPU申请中断并送出扫描码或者按键键值。现代计算机的通用键盘.大多采用这样的键盘扫描方法。

基于的设计方法

1. 实现方法分析

根据项目的实际需要.拟实现的键盘扫描模块应具有如下特点:

I)该模块应能实时地将扫描所得的键值信息写人存储器指定地址,其中键值信息包括同一按键的重复次数和键值,系统软件则应能定时从该地址读取键值信息以执行相应的操作

2)键盘去抖动所采用的方法是多次扫描法,当连续几次扫描到同一键值时就认为此键被按下了,这样就完成了去抖动操作。

3)由于本项目不需要AS(:I I字符编码按键,故应将按键值设计为120直接送出。

4)为了能表示长时间按键的操作,当确定某一按键按下时.以后梅隔一定时间才扫描一次,若获得同一键值,则将按键重复次数加一同时将重复次数和键值组合成键值信急送出;并在延迟一定时间后再次扫描……

2.基于的具体实现

本文拟采用四个模块来实现键盘扫描功能,分别是即时扫描模块、扫描控制模块、扫描脉冲模块和键值传送模块。图3是其模块工作流程。

3实现的模块结构

(1)即时扫描模块

输人信号:

CLKSMHZ:时钟信号,用于产生时序;

KB_IN[3:0]:由键盘矩阵送来的检测信号;

SCAN:扫描指示信号,每一个正脉冲到来时执行一次键盘扫描

输出信号:

KB OU T[4:O]:输出到键盘的控制信号,以便从键盘矩阵取得相应的信

号并进行检测;

VALUE[7:0]:扫描所得的即时键值输出到扫描控制模块,以便进行抖动。

模块功能描述:

本模块用于完成键盘即时扫描功能当检测到SCAN信号有一个窄脉冲到来时,模块内部将产生一组相应的KB_ OUT信号并输出到键盘矩阵,然后再对KB_ IN输人信号进行检测,以判断有无键被按下以及哪个键被按下,同时送出相应的即时键值VALUE。

(2)扫描控制模块

输人信号:

CLKSOHZ:时钟信一号,用于产生时序;

V ALUE[7:0]:由即时扫描模块送来的即时键值;

CNT[4:0]:来自扫描脉冲模块的计数器值,用于对扫描进行延时。

输出信号:

KEYVALUES[15:0]:此值为去抖动后的键值与按键重复次数组合而成的数据;

CTRL:扫描使能信号.高电平为使能,低电平为禁止。

模块功能描述:

本模块用于控制是否允许进行扫描以及完成键盘去抖动等。在无键按下时,CTRL置高电平以允许扫描;当连续几次扫描到同一个按键时,则认为此键被按下了(已经完成了去抖动操作)。然后CTRL置低电平以禁止扫描同时开始延时,当CNT达到某一数值时,重新进行扫描并再次延时。

同时将按键重复次数和键值VALUE组合成KEYVALUES并输出。以此类推,直到无键按下或检测到其他的键值。

(3)扫描脉冲模块

输人信号:

CLK50HZ:时钟信号,用于产生时序;

CLKSMHZ:时钟信号,用于产生时序;

CTRL:扫描使能信号,高电平为使能,低电平为禁止。

输出信号:

SCAN:扫描指示信号,每输出一个正脉冲执行一次键盘扫描;

CNT[4:O]:扫描延时计数器,用于对扫描进行延时。

模块功能描述:

本模块的主要功能是产生扫描指示窄脉冲和扫描延时计数。当CTRL为高电平时,在每个CLK50HZ的上升沿送出一个SCAN窄脉冲;CTRL为低电平时,延时计数器开始计数,当达到某一特定值时,则送出一次扫描脉冲信号SCANo

(4)健值传送模块

输人信号:

SYSCLK:系统时钟信号,用于产生时序;

KEYVALUES[15:0]:此值为去抖动后的键值与按键重复次数组合而成的数据。

输出信号:

WRITE_ N:存贮器的写使能信号,低电平有效;

ADDRESS[31:0存贮器的键值信息写人地址,为恒定值;

KEYVALUE[ 15:0]:要写人存贮器的键值信息,其中包括按键重复次数和键值。

模块功能描述:

本模块负责把键值信息写入存贮器,供应用软件定时查询。当且仅当输人端KEYVALUES的值发生改变时.才会发起一次存贮器写操作。

结束语

将此模块用VHDL硬件描述语言予以实现,然后经过功能仿真.再利用QUARTUS II软件进行编译并下载到ALTERACYCLONE 1C20开发板上后.经过对键盘的实际操作检验证明,此模块可以正常地实现键盘扫描、去抖动等功能。同时,若对该模块稍加修改,同样可以移植到其他嵌人式系统中,这样可以大大减轻CPU的运行负荷,因此,本设计对大多数对系统资源比较敏感的嵌人式系统来说,具有很强的现实意义。



评论


相关推荐

技术专区

关闭