欢迎来到天天文库
浏览记录
ID:24793742
大小:51.90 KB
页数:6页
时间:2018-11-11
《基于fpga的矩阵式按键的设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于FPGA的矩阵式按键扫描的设计摘要:本文介绍了一种基于FPGA的矩阵式按键扫描方案,实现了矩阵式键盘在FPGA时序逻辑的控制下自动完成按键的扫描、处理、编码等功能,按键结果的采集通过中断方式来获取,是一种电路设计简单,响应稳定、快速的方法。关键词:FPGA,矩阵式,按键扫描引言矩阵式键盘是一种常用的键盘设计方式,具有电路设计简单的特点,通过可编程逻辑(FPGA)来实现按键的扫描和控制,具有反应快速,设计灵活,易于扩展等特点。本文设计了一种基于FPGA的矩阵式按键扫描方法,系统架构如图1所示。CPU主要完成系统的控制功能,FPGA完成按键逻辑的控制,矩阵式键盘是一个4*6键盘。图1
2、矩阵式键盘系统架构1.按键扫描的原理在矩阵式键盘中每个按键是跨接在一条列线和一条行线之间,列线作为键盘的输入信号,行线作为按键的输出信号,当按键闭合时,行线采集到的信号电平就是列线上输入的信号电平。当按键断开时,行线采集到的信号是高电平[1]。因此,通过在FPGA中产生一个周期性的列扫描信号,也就是每个列线周期性的变为低电平。当某列为低电平时,采集行信号就可以判断是否有按键按下,同时也可以判断出是那个按键被按下。如图2所示,一个4*6的矩阵式键盘,在逻辑时序控制下,循环扫描信号由列线进入键盘,列信号Y[5:0]以“111110->111101->111011->110111->101
3、111->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”,扫描状态将不断变化下
4、去,一旦有按键按下去以后,采集到的行信号KEY_ROW[3:0]/=”1111”,这时候列扫描状态就不再向下一个状态变化,通过列扫描信号和采集到的行信号确认当前所按得值。按键结束后扫描信号状态又开始变化。按键扫描信号的状态转换图如图3所示。图3按键扫描信号状态转换图3.按键抖动的处理为什么要进行按键抖动的处理呢?因为机械式按键开关在按键的瞬间会在接触点出现来回弹跳的现象,导致一次按键会上报多次按键的结果[3]。为了能够确保按键识别的准确性和稳定性,就需要对按键进行消抖处理,消除按键抖动时不稳定、随机的脉冲信号。按键消抖普遍采用的是延时消抖方,就是通过锁存按键信号状态,来提取稳定的按键
5、信号,消除按键稳定前后的抖动脉冲。由于机械式按键的抖动次数、抖动时间、抖动波形得随机性。不同类型的按键其最长抖动时间也有差别,抖动时间的长短和按键的机械特性有关,一般为5到10ms,但是,有些按键的抖动时间可达到20ms,甚至更长。因此在具体设计中需要根据实际情况来调整消抖处理程序[4,5]。在时序逻辑控制下,当采集到一个按键信号为低电平时,首先通过5个时钟周期来锁存此按键信号状态,如果第5次采样到此按键信号仍然有效,然后就进入道延时电路,延时结束后,如果采集到的按键信号仍然有效,则认为此次按键确认有效。基于VHDL语言的按键消抖实现如下所示。/*------------------
6、状态锁存-------------------------*/process(SYSCLK,SYSRST_L)beginif(SYSRST_L='0')thenkey_pressed_reg0<='0';key_pressed_reg1<='0';key_pressed_reg2<='0';key_pressed_reg3<='0';key_pressed_reg4<='0';key_pressed_reg5<='0';elsif(SYSCLK'eventandSYSCLK='1')thenkey_pressed_reg0<=key_pressed;key_pressed_reg1<
7、=key_pressed_reg0;key_pressed_reg2<=key_pressed_reg1;key_pressed_reg3<=key_pressed_reg2;key_pressed_reg4<=key_pressed_reg3;key_pressed_reg5<=key_pressed_reg4;endif;endprocess;/*-----------------延时电路---------------------------*/pro
此文档下载收益归作者所有