ccs 发表于 2010-5-12 15:09:35

fpga键盘扫描后的多个键值怎样组合起来

请问一下:fpga键盘扫描后的多个键值怎样组合起来。
譬如:按键1,2,3,enter后输出123

fpga 发表于 2010-5-13 12:11:05

  2 基于FPGA的实现方法
  2.1 实现方法分析
  根据项目的实际需要,拟实现的键盘扫描模块应具有如下特点:
  该模块实时地将扫描所得的键值信息写入存储器指定地址,键值信息包括同一按键的重复次数和键值,系统软件定时从该地址读取键值信息以执行相应的操作。
  键盘去抖动的方法是多次扫描法,当连续几次扫描到同一键值时就认为此键被按下,这样就完成了去抖动操作。
  由于该项目不需要ASCⅡ字符编码按键,故将按键值设计为1~20直接送出。
  为了能表示长时间按键的操作,当确定某一按键按下时,以后每隔一定时间才扫描一次,若获得同一键值,则将按键重复次数加一,同时将重复次数和键值组合成键值信息送出;延迟一定时间后再次扫描。
  2.2 FPGA具体实现
  该设计采用4个模块来实现键盘扫描功能,分别为即时扫描模块、扫描控制模块、扫描脉冲模块和键值传送模块,如图3所示。

  2.2.1 即时扫描模块
  该模块完成键盘即时扫描功能,当检测到SCAN信号有一个窄脉冲到来时,模块内部将产生一组相应的KB_OUT信号输出到键盘矩阵,然后对KB_IN输入信号进行检测,以判断有无键被按下及哪个键被按下,并送出相应的即时键值VALUE。
  2.2.2 扫描控制模块
  该模块的功能是控制是否允许进行扫描及完成键盘去抖动等。在无键按下时.CTRL置高电平允许扫描;当连续几次扫描到同一个按键时,则认为此键被按下(已经完成去抖动操作)。然后CTRL置低电平,禁止扫描并同时开始延时,当CNT达到某一数值时,重新进行扫描并再次延时,同时将按键重复次数和键值VALUE组合成KEYVALUES并输出。以此类推,直到无键按下或检测到其他的键值。
  2.2.3 扫描脉冲模块
  该模块的主要功能为产生扫描指示窄脉冲和扫描延时计数。当CTRL为高电平时,在每个CLK为50Hz的上升沿送出一个SCAN窄脉冲;当CTRL为低电平时,延时计数器开始计数,达到某一特定值时才送出一次扫描脉冲信号SCAN。
  2.2.4 键值传送模块
  该模块负责把键值信息写入存储器,供应用软件定时查询。当输入端KEYVALUES的值发生改变时,才会发起一次存储器写操作。
  3 结束语
  此模块用VHDL硬件描述语言来实现,经过功能、时序仿真后利用QUARTUS Ⅱ软件进行编译并下载到Altera的CYCLONE 1C20开发板上。经过对键盘的实际操作检验,证明此模块可以正常实现键盘扫描和去抖动等功能,能正确地识别每一个按键的动作。同时,若对该模块稍加修改同样可以移植到其他的系统中,这样可以大大减轻CPU的运行负荷,这对大多数对系统资源比较敏感的嵌入式系统来说具有很强的现实意义。

Sunlife 发表于 2015-5-16 11:19:39

该模块的主要功能为产生扫描指示窄脉冲和扫描延时计数。当CTRL为高电平时,在每个CLK为50Hz的上升沿送出一个SCAN窄脉冲;当CTRL为低电平时,延时计数器开始计数,达到某一特定值时才送出一次扫描脉冲信号SCAN。
页: [1]
查看完整版本: fpga键盘扫描后的多个键值怎样组合起来