基于FPGA的矩阵式按键的设计.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于FPGA的矩阵式按键扫描的设计 摘 要:本文介绍了一种基于FPGA的矩阵式按键扫描方案,实现了矩阵式键盘在FPGA时序逻辑的控制下自动完成按键的扫描、处理、编码等功能,按键结果的采集通过中断方式来获取,是一种电路设计简单,响应稳定、快速的方法。 关键词:FPGA,矩阵式,按键扫描 引言 矩阵式键盘是一种常用的键盘设计方式,具有电路设计简单的特点,通过可编程逻辑(FPGA)来实现按键的扫描和控制,具有反应快速,设计灵活,易于扩展等特点。本文设计了一种基于FPGA的矩阵式按键扫描方法,系统架构如图1所示。CPU主要完成系统的控制功能,FPGA完成按键逻辑的控制,矩阵式键盘是一个4*6键盘。 图1 矩阵式键盘系统架构 1. 按键扫描的原理 在矩阵式键盘中每个按键是跨接在一条列线和一条行线之间,列线作为键盘的输入信号,行线作为按键的输出信号,当按键闭合时,行线采集到的信号电平就是列线上输入的信号电平。当按键断开时,行线采集到的信号是高电平[1]。因此,通过在FPGA中产生一个周期性的列扫描信号,也就是每个列线周期性的变为低电平。当某列为低电平时,采集行信号就可以判断是否有按键按下,同时也可以判断出是那个按键被按下。 如图2所示,一个4*6的矩阵式键盘,在逻辑时序控制下,循环扫描信号由列线进入键盘,列信号Y[5:0]以“111110-111101-111011-110111-101111-0111111”的序列循环扫描[2],当没有按键按下时,行信号X[3:0]就是“1111”,当采集到的行信号X[3:0]不为“1111”,就是有按键按下,如果是行信号X[3:0] “1101”,而此时列信号为Y[5:0]为:“110111”,就可以判断出是K42被按下。 图2 矩阵式键盘示意图 2.按键扫描信号的产生 扫描信号是在FPGA中通过VHDL语言有限状态机实现的,通过周期性发送扫描序列信号来完成。键盘的输入信号是列信号,一共有6列,有6种扫描状态,再加上一个初始态,共有7种状态。在没有按键按下的情况,采集到的行信号KEY_ROW[3:0] =”1111”,扫描状态将不断变化下去,一旦有按键按下去以后,采集到的行信号KEY_ROW[3:0]/ =”1111”,这时候列扫描状态就不再向下一个状态变化,通过列扫描信号和采集到的行信号确认当前所按得值。按键结束后扫描信号状态又开始变化。按键扫描信号的状态转换图如图3所示。 图3 按键扫描信号状态转换图 3. 按键抖动的处理 为什么要进行按键抖动的处理呢?因为机械式按键开关在按键的瞬间会在接触点出现来回弹跳的现象,导致一次按键会上报多次按键的结果[3]。为了能够确保按键识别的准确性和稳定性,就需要对按键进行消抖处理, 消除按键抖动时不稳定、随机的脉冲信号。按键消抖普遍采用的是延时消抖方,就是通过锁存按键信号状态,来提取稳定的按键信号,消除按键稳定前后的抖动脉冲。由于机械式按键的抖动次数、抖动时间、抖动波形得随机性。不同类型的按键其最长抖动时间也有差别, 抖动时间的长短和按键的机械特性有关, 一般为5到10 ms, 但是, 有些按键的抖动时间可达到20 ms, 甚至更长。因此在具体设计中需要根据实际情况来调整消抖处理程序[4,5]。 在时序逻辑控制下,当采集到一个按键信号为低电平时,首先通过5个时钟周期来锁存此按键信号状态,如果第5次采样到此按键信号仍然有效,然后就进入道延时电路,延时结束后,如果采集到的按键信号仍然有效,则认为此次按键确认有效。 基于VHDL 语言的按键消抖实现如下所示。 /*------------------状态锁存-------------------------*/ process(SYSCLK, SYSRST_L) begin if(SYSRST_L = 0)then key_pressed_reg0 = 0; key_pressed_reg1 = 0; key_pressed_reg2 = 0; key_pressed_reg3 = 0; key_pressed_reg4 = 0; key_pressed_reg5 = 0; elsif(SYSCLKevent and SYSCLK = 1)then key_pressed_reg0 = key_pressed; key_pressed_reg1 = key_pressed_reg0; key_pressed_reg2 = key_pressed_reg1; key_pressed_reg3 =

文档评论(0)

ranfand + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档