基于FPGA的矩阵键盘控制器的设计

FPGA/ASIC技术

190人已加入

描述

摘要: 为改变采用CPU 控制矩阵键盘导致CPU 资源利用下降及引脚不足的现状,介绍了一种基于FPGA 的矩阵键盘控制器的开发。在ISE13.4 开发环境下,采用VHDL 硬件语言开发了一种能有效防止机械式矩阵键盘按键抖动带来的数据错误; 实现矩阵键盘的自动扫描、编码、存储、输出等功能; 并将输入的数据依次在8 个7 段数码管上进行显示的矩阵键盘控制器。将所设计的VHDL 控制器配置到开发的硬件电路系统上,验证了各项功能设计的正确性。

在便携式电子设备中有着广泛应用的矩阵键盘,一般利用单片机对其进行扫描控制,大大降低了单片机处理其它信息的能力,造成资源的浪费。利用FPGA 强大的逻辑处理能力及丰富的引脚,本文设计了基于FPGA 的矩阵键盘控制器,主要包括矩阵键盘抗抖动模块、扫描模块、译码模块、存储模块以及数码管显示模块,同时将矩阵键盘输入的数据通过7 段数码管进行显示。

1 矩阵键盘控制器及显示电路设计思路

为完成便携式设备的人机交互,利用4 × 4 矩阵键盘设计了基于FPGA 的矩阵键盘控制器及显示电路,如图1 所示。系统主要由FPGA、矩阵键盘、138 译码芯片以及数码管等组成,主要完成一个8 位数的输入,对所输入的8 位数进行存储供后续使用,利用数码管的显示功能来确认所输入的数据是否准确,降低输入误差。

由图1 可看出,本系统软件部分主要实现矩阵键盘行列扫描控制、输入抗抖动、按键译码、按键存储以及数码管显示等功能。

( 1) 矩阵键盘行列扫描控制模块: 产生周期性的扫描信号,根据扫描输入信号进行判断是否有按键被按下,若有按键被按下则立刻进行按键判断和编码,并将按键存储到内部寄存器。

( 2) 弹跳消除电路: 机械开关结构的矩阵键盘,按键被按下时,接触点会出现来回弹跳的信号。信号弹跳时间内程序无法有效的判断按键值,从而影响到输入的正确性,降低设备的性能。

( 3) 按键译码电路: 扫描回复信号( 按键输入给FPGA 的信号) 在FPGA 内部无法直接作为后续使用信号,必须定义中间信号,用以区分不同按键的功能,对按键进行译码。

( 4) 按键存储电路: 前一次按键的输入数据将被下一次扫描产生的新按键数据覆盖,因此需要一个移位寄存器来保存整个按键的输入。

( 5) 数码管显示电路: 为完成8 位数据的输入显示,需要对每个数码管进行扫描控制,并根据按键值对数码管进行译码显示。

矩阵

 

2 矩阵键盘控制器及显示的VHDL 设计

2. 1 矩阵键盘防抖设计

矩阵键盘抗抖动电路主要有计数器、移位寄存器、D 型触发器延时和采样型防抖微分电路四种方
法[2]。本文采用的去抖方法是: 将键盘输入信号作为电路输入信号,在时钟信号作用下,输入信号经过两级D 触发器延时后再使用RS 触发器进行处理。抖动消除电路所使用的脉冲信号频率必须比其它电路使用的脉冲信号频率更高,通常将扫描电路的工作频率定在24Hz 左右,而将弹跳电路的工作频率定在128Hz 左右[3]。根据以上设计思想,采用VHDL 硬件语言编写了键盘抗抖动模块,抗抖动模块经综合后其RTL 电路图如图2 所示。

矩阵

 

2. 2 时钟电路电路

时钟电路主要产生系统所需要的时钟信号,由FPGA 时钟分频得到系统工作时钟,然后采用计数器分频方法得到所需要的弹跳消除时钟信号、键盘扫描信号以及数码管显示时钟信号。键盘扫描电路用来产生键盘扫描信号,根据矩阵键盘工作原理,需要产生从第一列到第四列的周期性扫描信号。采用VHDL 硬件语言设计扫描模块,具体程序如下。

矩阵

 

2. 3 矩阵键盘译码电路

矩阵键盘所产生的扫描回复信号( 按键输入给FPGA 的信号) ,是无法直接在FPGA 内部作为信号进行使用,在使用前需要根据定义的不同功能将扫描回复信号译码为可供FPGA 识别的BCD 编码,完成矩阵键盘输入的译码,同时区分不同按键的功能。译码电路的主要功能是: 判断是否有键按下,然后根据扫描的信号确认所按下的键是数字键还是功能键,将所按下的键编写成BCD 码。表1 为所用键盘输入信号与按键位置之间的关系。

矩阵

矩阵

2. 4 存储及显示电路

每次扫描会产生新的按键输入,可能会覆盖前面的数据,所以需要一个按键存储器电路,将整个键盘扫面完毕后的结果记录下来。按键存储电路由移位寄存器电路组成。本设计采用串行输入、串行输出移位寄存器作为按键存储电路。设计思路: 八进制计数器cnt 按合适的频率进行计数; 每记一个数,便给位选信号segweixh 赋一个不同的值,通过I /O 口将segweixh 的值输出给138 译码器; 当位选信号segweixh 变化时,按一定的算法将键盘输入信号的四位赋值给内部寄存器datebuf; process( datebuf) 过程是数码管显示译码阶段,主要完成对输入信号的译码工作。( 限于篇幅,程序略)

3 实验结果分析

( 1) 扫描电路仿真分析: 图3 所示为分频和键盘扫描仿真图,图中clk 为频率为50MHz 的FPGA 时钟信号; clk_1kHz 为经过50000 分频得到的1kHz 的键盘扫描工作时钟信号; 在程序内部分频器的作用下对键盘进行扫描,clk_scan 为键盘扫描信号,由图3 可以看出仿真结果和理论要求一致。

矩阵

( 2) 数码管显示电路仿真分析: 图4 所示为数码管显示仿真波形,图中clk 为频率为50Mhz 的FPGA
时钟信号; clk_1khz 为经过50000 分频得到的1khz 的数码管显示工作时钟信号; 矩阵键盘输入数据存放在移位寄存器datain_x 中,假设输入数据为“0000 0001 0010 0011 0100 0101 0110 0111”,对应的显示数码为0、1、2、3、4、5、6、7; led_out 为138 位选信号,由仿真结果看得其与理论值一致; segma_out 为数码管显示断码,由图4 可得,在led_out为“000”、“001”、“010”、“011”、“100”、“101”、“110”、“111”时分别显示“11111010”、“ 00100010”、“ 10111001”、“ 10101011”、“ 01100011”、“ 11001011”、“ 11011011”、“10100010”,即0、1、2、3、4、5、6、7 与输入的数据一致。

矩阵

4 结语

本设计的矩阵键盘控制器及其显示电路在ISE13. 4 开发环境下进行仿真验证后,下载到采用138 译码芯片、矩阵键盘、FPGA 及4 位数码管建立开发的硬件系统中进行了硬件验证,该硬件采用Xilinx 系列spartan-xc3s500E 芯片作为核心芯片。实验证明,所设计的系统能够准确的完成目标功能,硬件系统结果与仿真结果一致,即验证了系统的正确性。所设计的系统误判概率低,反应速度快,能够满足设计要求。该模块以按键的释放控制按键编码输出,在按键被按下一段时间到释放按键之前,不能按一定的间隔连续输出被按键的键值,矩阵键盘没有连续按键的功能。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分