jhk
发表于 2016-8-20 07:22:08
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?快速注册
x
FPGA/CPLD在数字系统设计中的广泛应用,影响到了生产生活的各个方面。在FPGA/CPLD的设计开发中,VHDL语言作为一种主流的硬件描述语言,具有设计效率高,可靠性好,易读易懂等诸多优点。作为一种功能强大的FPGA/CPLD数字系统开发环境,Altera公司推出的Quar-tUSⅡ,为设计者提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程,为使用VHDL语言进行FPGA/-CPLD设计提供了极大的便利。矩阵键盘作为一种常用的数据输入设备,在各种电子设备上有着广泛的应用,通过7段数码管将按键数值进行显示也是一种常用的数据显示方式。在设计机械式矩阵键盘控制电路时,按键防抖和按键数据的译码显示是两个重要方面。本文在QuartusⅡ开发环境下,采用VHDL语言设计了一种按键防抖并能连续记录并显示8次按键数值的矩阵键盘及显示电路。
( y$ p; E* g x1 f3 j8 _; N; p. \9 v3 W5 t
1 矩阵键盘及显示电路设计思路- K: a) y5 {( o, p, G
' M1 u6 g( a" u. N1 V* e& R) V# B: Q" W# {" L, `
矩阵键盘及显示电路能够将机械式4×4矩阵键盘的按键值依次显示到8个7段数码管上,每次新的按键值显示在最右端的第O号数码管上,原有第0~6号数码管显示的数值整体左移到第1~7号数码管上显示,见图1。总体而言,矩阵键盘及显示电路的设计可分为4个部分:+ @0 |* _ z, D: v& R. h$ _
+ g* I% n9 w0 }. ?' G+ ^! J. O) [(1)矩阵键盘的行及列的扫描控制和译码。该设计所使用的键盘是通过将列扫描信号作为输入信号,控制行扫描信号输出,然后根据行及列的扫描结果进行译码。* O) y( ? K- e# |8 a
- O$ _( b% ~4 I& C. T! ?5 j/ ~; T3 f(2)机械式按键的防抖设计。由于机械式按键在按下和弹起的过程中均有5~10 ms的信号抖动时间,在信号抖动时间内无法有效判断按键值,因此按键的防抖设计是非常关键的,也是该设计的一个重点。
) a, |, S: h8 ~( z* K9 H1 u7 m/ N. d- }" H9 U9 m
(3)按键数值的移位寄存。由于该设计需要在8个数码管上依次显示前后共8次按键的数值,因此对已有数据的存储和调用也是该设计的重点所在。
) r. @; o, k u6 Y! ^, q
1 _5 D& J( H, i& f, k& ~, k% a(4)数码管的扫描和译码显示。由于该设计使用了8个数码管,因此需要对每个数码管进行扫描控制,并根据按键值对每个数码管进行7段数码管的译码显示。
. z% a) p( D/ S* I! ]2 p( _, K3 @ p
2 矩阵键盘及显示电路的实现
. v: x# M- P: U9 F$ J7 R& N1 w. B: O" t: B
本文所设计的矩阵键盘及显示电路的电路符号如图2所示。其中,clk为时钟信号输入端(频率可为1 024~32 768Hz);start为清零控制端;kbrow为列扫描信号输入端;kbeol为行扫描信号输出端;scan为数码管地址扫描信号输出端;seg7为数码管显示信号输出端。 9 y! B: X% \* X; U
3 ^& A% N# W+ R9 |4 @6 m
值得注意的是,本文设计的矩阵键盘及显示电路在按键防抖和数据寄存部分设计得更加简洁可靠,实现的功能更加强大,其具有如下特点:6 w8 `) W$ ^7 B3 Z
' e2 t$ f: E% h# S
(1)为了实现按键防抖,本文采用对按键状态连续记录的方式,即在按键弹起后连续8个时钟周期均无按键信号才确认1次按键有效,从而避免了按键按下和弹起过程中的数据抖动,相比于使用计数器从按键按下开始计数,直到5~10 ms后才让按键有效的防抖方式,这里设计的按键防抖更加可靠,且可有效避免长时间按下按键产生的重复数据输出,使每次按键无论时间长短均可且只会产生1次数据输出。另外,当电路采用32 768 Hz以上的时钟作为系统时钟时,可以通过增加按键状态连续记录的时钟周期数,实现可靠的防抖。 (2)该设计采用一个32位一维数组temp作为数据寄存器,使用移位寄存方式,实现了对连续8次按键数据的存储和调用,从而可以在8个数码管上连续显示数据。
& x6 |( q4 W# F4 i6 B1 g: v0 S9 l5 }- r
3 仿真结果分析9 q+ `3 D, P# s
' `+ X- k; ]6 e! c9 H本文设计的矩阵键盘及显示电路在QliartusⅡ开发环境下进行了仿真验证。其中,按键防抖功能的仿真波形如图3所示。仿真结果分析如下:. a# D5 f/ I1 ~% k/ N
8 }. y( p+ O" l6 f& |' F(1)clk为时钟输入信号,作为系统时钟;1 C5 Z5 u9 y1 O9 B! W1 H: M
3 G9 W8 U! a1 B(2)start为清零控制端,当其为高电平时,按键有效;6 G+ m/ |3 N# t) G
0 N$ Z9 Y+ W/ b% n) I0 Y8 P* I! M(3)kbrow为列扫输入信号,kbcol为行扫输出信号,图3中对kbrow[1]的输入波形进行设置,模拟了“A”键按下和弹起的过程;. q: n, p& H8 O7 C
* H3 O5 J+ L8 ~(4)fnq为防抖控制信号,scan为数码管地址扫描输出,seg7为数码管显示输出。由图3可知,只有在按键弹起后,才有数据输出,从而实现防抖功能。
2 ^# z1 C$ d4 o! z0 l$ H S- @% q+ @3 s: _
该设计的其他功能也可以通过仿真验证,不再赘述。
' f1 Q- t C4 ]2 p9 G' @+ z) [2 L9 u
4 结语4 i5 c! S8 Z& ]' E; I' |
& p* w5 W4 y. G/ I5 L& `8 U( ]
本文设计矩阵键盘及显示电路在QuartusⅡ开发环境下进行仿真验证后,下载到湖北众友科技实业股份有限公司的ZYllEDAl3BE实验箱中进行了硬件验证。该实验箱使用ACEXlK系列EPlK30QC208芯片作为核心芯片。实验证明,当电路的系统时钟频率在1 024~32 768 Hz范围内时,电路均可稳定运行,按键防抖可靠、功能完整。当系统时钟频率低于1 024 Hz时,需要减少防抖记录时钟周期的个数,否则容易错过短时按键动作;当系统时钟频率高于32 768 Hz时,需要增加防抖记录时钟周期的个数,以确保可靠的按键防抖。 |
|
|
|
|