您的位置 首页 嵌入式

根据FPGA的键盘扫描模块的规划

在嵌入式计算机系统中,键盘是最基本的人机交互输入设备。除了使用通用的标准键盘外,实际工程应用中更需要进行单独设计并购程专用的各种小键盘。随着EDA(电子设计自动化)技术的迅速发展,利用FPGA来实现各

导言

在现代的个人计算机体系中,一般都选用通用的规范键盘(:规范101/102键盘或Microsoft天然PS/2键盘)来完结人与计算机之间的接口交互,然后将需求的各种数据和指令等信息都通过键盘来输人计算机川。

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

键盘扫描的基本知识

1.编码键盘和扫描键盘

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

当通用键盘上或按键数量较多时,遍及选用扫描办法产生键值。因而,可将按键连接成矩阵,每个按键坐落某行、某列的交点上位口图1所示),先通过扫描办法确认按下键的队伍方位,称为方位码或扫描码。再查表将方位码转化为按键码值或许直接运用扫描码,有些参考书称此为“非编码键盘”。但这种称号简单让人误解为没有对应的键值,因而又称为扫描式键盘。

1队伍式扫描健盘示意图

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

假如履行扫描的进程由硬件逻辑完结,则将这种键盘称为硬件扫描键盘或电子扫描式编码键盘。在履行键盘扫描时应留意一个问题,即键在闭合进程中往往存在一些难以避免的机械性颤动,使输出信号也产生颤动,一般达1020毫秒宽。若不避开颤动区,则或许误以为屡次按键。因而应该设置硬件延时电路,推迟数十毫秒后再读取键值,这种电路称为去抖电路〕还应留意一个问题,即当时一个键值还未送出,而又有按键按下时,后边的键值将掩盖前边的键值,形成键值丢掉问题。一般能够设置一操控信号.仅当时一键值送出后才答应产生后一键值,或许设置一组寄存器来保存前边若十个键值,等候体系逐一按次序处理。

硬件扫描键盘的长处是不需求主机背负扫描使命,仪当产生键值后才向主机宣布中止请求,CPU以相应中止办法接纳按键键值,或许CPU守时从某个地址获取按键键值。该办法大大减轻了CPU的运转负荷,使其能以更多的时刻去运转其它程序。

当然也能够履行键盘扫描程序,由CPU通过软件办法对键盘进行扫描。图2就是一种键盘扫描程序的流程图,这种键盘称为软件扫描键盘。按键时,键盘向主机提出中止请求。由软件扫描键盘来获得按键键值;或许由CPU守时履行键盘扫描程序,然后获得按键键值。即在扫描办法称为逐行扫描法,当有键按下时,首要获得此键的列值,然后逐行扫描就能够判别出按键地点的行值。这样,由队伍值就能够通过转化得到按键键值。当然,要在履行键盘扫描进程中加人必定的延时,以去除颤动影响。

2一种盘妇描租序流程圈

假如体系对CPU的运转速度要求较高,而且CPU的负荷较重、体系资源比较严重,则能够在键盘中设置一个单片机,由它担任履行键盘扫描程序,然后向CPU请求中止并送出扫描码或许按键键值。现代计算机的通用键盘.大多选用这样的键盘扫描办法。

依据FPGA的规划办法

1. 完结办法剖析

依据项目的实际需求.拟完结的键盘扫描模块应具有如下特色:

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

2)键盘去颤动所选用的办法是屡次扫描法,当接连几回扫描到同一键值时就以为此键被按下了,这样就完结了去颤动操作。

3)因为本项目不需求AS(:I I字符编码按键,故应将按键值规划为120直接送出。

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

2.依据FPGA的详细完结

本文拟选用四个模块来完结键盘扫描功用,分别是即时扫描模块、扫描操控模块、扫描脉冲模块和键值传送模块。图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的运转负荷,因而,本规划对大多数对体系资源比较灵敏的嵌人式体系来说,具有很强的现实意义。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/192816.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部