导言
在现代的个人计算机体系中,一般都选用通用的规范键盘(如:规范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]:由键盘矩阵送来的检测信号;
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软件进行编译并下载到ALTERA的CYCLONE