矩阵键盘简介以及其fpga设计思路

矩阵键盘简介以及其fpga设计思路

ID:21954130

大小:170.07 KB

页数:6页

时间:2018-10-25

矩阵键盘简介以及其fpga设计思路_第1页
矩阵键盘简介以及其fpga设计思路_第2页
矩阵键盘简介以及其fpga设计思路_第3页
矩阵键盘简介以及其fpga设计思路_第4页
矩阵键盘简介以及其fpga设计思路_第5页
资源描述:

《矩阵键盘简介以及其fpga设计思路》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、接高电平扫描键盘的设计思想和代码技巧非常伉得学习。首先扫描键盘可以节省FPGA的引脚资源,例如一个4x4的扫描键盘有16个按键,如果不用扫描方式而是直接把16跟控制线接入FPGA,就要16个引脚,而用扫描方式只需要4+4=8个引脚。尤其是随着键盘的增大,比如8x9=72的键盘,用扫描方式只耑要17个引脚。要想了解扫描键盘的原理,首先要知道矩阵键盘的电路结构。3.3vColOCol1Col2Col3如上图所示,矩阵键盘的某一个按钮按下会使对应的一条行线和列线导通,为了便于分析扫描过程做如下简化:键盘行线高低电平的变化输入

2、给FPGA由FPGA输岀给键盘高低电平的组合,即是扫描码扫描键盘的工作状态分为两种:第一种状态是判断是否有键按下,该状态下四根列线对应的电平状态是{colO,coll,col2,col3}=0000。叫根行线左端都接高电平,没有键被按下吋,叫根行线右端的状态是{rowO,row1,row2,row3}=1111。假如上图中按键3被按下了,也就是说rowO和col0接通了。那么四根行线右端的状态将会是{rowO,row1,row2,row3}=0111。也就是说,在第一种状态卜‘,只要键盘行线输入FPGA的状态不是就说明

3、有键被按下了。马上进入第二状态。第二种状态是判断具体哪个键被按下了。该状态下叫根行线左端接高电平不变,叫根列线对应的电平状态不断变化,由FPGA的输出的扫描码控制叫根列线的电平状态。由第一状态的行线输入己经可以确定按键所处的行了。接下来只要再确定按键所处的列就nJ•以确定到底哪个键被按下了。如何根据行线的输入确定按键所处的列,奥妙就在于扫描码了。让列线以1000、0100、0010、0001的电平状态不断循环。假设上一状态确定按键处于rowO行,那么随着扫描的进行,行线输入的变化规律如下表:扫描码10000100001

4、0000110000100001000011000010000100001RowO100010001000Rowl111111111111Row2111111111111Row3111111111111观察上表可以发现,在mwO是1的时候与之对应的扫描码可以体现出按键所在列。一个随之而来的设计思路是在第一状态确定按键所在行,然后在第二状态捕捉特定行是高电平的时候所对应的扫描码。但是这里有一个不可避免的实际问题,那就是机械键盘的抖动!这种抖动主要体现在两个方面:第一,我们手指按某个键的时候可能由于接触面积大无意中碰到周围

5、的键。第二,在按着一个键的吋候由于力度不均或者接触不良,行线和列线并不能时刻保持接通的状态。下图來自网络上,描述的是单片机的机械键盘,借用一下。整个按键数百ms按下瞬间,抖动时间大概10ms弹起瞬间,抖动大概10ms按键一次出现的电平芰化如何避免抖动的影响才是矩阵键盘设计的难点。由于抖动的存在,我们在第-•状态下只能确定有键按下了,并不确定是哪一行的键被按下了。所以第一状态的任务是判断是否有键按下,如果有就进入第二状态,如果没有,就从笫二状态冋到第一状态。第二状态开始输出扫描码给键盘的列,同时从键盘的行收集行线的电平状

6、态作为输入。然后根据行线输入和扫描码判断按键位置。还要有一个消抖模块,消除抖动影响的原理就是抖动时间都很短,例如在0.5秒内循环扫描了200次,其•屮150次扫描结果都显示按键6被按下了,32次显示按键5被按下了,18次显示按键2被按下了。那么就可以确定按键是6,并且按键的人力度偏向于右上方。如果抖动吋间是10ms的话,我们设定扫描结果中某个按键连续山现了16ms以上的吋间,则该按键有效,小于16ms的按键都视为抖动被“过滤”掉。在总体架构的设计屮,根据行线输入和扫描码判断按键位置的功能可以独立作为一个模块。先用纟11

7、合逻辑试试。输出是4位的二进制数,从0到F代表按键位置的编号,如图二矩阵键盘简化示意图所示。enKey一row一inKey_positionKey_col_scanKey_position其中en是使能信号,en为高电平时模块开始判断按键位置。由行线输入和扫描码判断按键位罝的具体原理是什么呢?还是要分别确定行和列。首先看行线输入,如果是0111。就确定是第一行。如果是0100就确定是第二行……如果是1111,就捕捉对应的扫描码。将行与扫描码对应就得到按键位置。在没有键按下的时候列线电平状态是{col0,coll,col

8、2,col}=0000。一旦有键按下立即输出列线扫描码key_col_scan和始能信号给key_position模块,没有键按下就回到{col0,coll,col2,col}=0000的状态同时把en拉低。此功能可独立作力一个模块。前面分析可知,只要key_mw_in不是4’bllll就是有键按下了。扫描码的频率取多少合适呢?夏

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。