基于VHDL的矩阵键盘及显示电路设计_第1页
基于VHDL的矩阵键盘及显示电路设计_第2页
基于VHDL的矩阵键盘及显示电路设计_第3页
基于VHDL的矩阵键盘及显示电路设计_第4页
基于VHDL的矩阵键盘及显示电路设计_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于VHDL的矩阵键盘及显示电路设计摘 要 : 为了有效防止机械式键盘按键抖动带来的数据错误, 这里在 Quartus ? 开发环境下,采用VHDL语言设计了一种能够将机械式 4X4矩阵键盘的按键值依次显示到 8 个 7 段数码管上的矩阵键盘及显示电路。仿真结果表明, 所设计的矩阵键盘及显示电路成功地实现了按键防抖和按键数据的准确显示。以ACEX1K(列EP1K30QC2085片为硬件环境,验证了各项设计功能的正确性。FPGA/ CPLD在数字系统设计中的广泛应用,影响到了生产生活的各个方面。在FPGA/ CPLD的设计开发中,V HDL语言作为一种主流的硬件描述语言,具有设计效 率高,可靠性

2、好,易读易懂等诸多优点。作为一种功能强大的FPGA/ CPLD数字 系统开发环境,Altera 公司推出的Quart us ?, 为设计者提供了一种与结构无关的设计环境, 使设计者能方便地进行设计输入、快速处理和器件编程, 为使用V HDL语言进行FPGA/ CPLD设计提供了极大的便利。矩阵键盘作为一种常用的数据输 入设备 , 在各种电子设备上有着广泛的应用, 通过 7 段数码管将按键数值进行显示也是一种常用的数据显示方式。在设计机械式矩阵键盘控制电路时, 按键防抖和按键数据的译码显示是两个重要方面。本文在 Quart us ?开发环境下,采用V HDL语言设计了一种按键防抖并能连续记录并显

3、示8 次按键数值的矩阵键盘及显示电路。1 矩阵键盘及显示电路设计思路矩阵键盘及显示电路能够将机械式 4 X4矩阵键盘的按键值依次显示到8个7段数码管上, 每次新的按键值显示在最右端的第0 号数码管上, 原有第 0,6 号数码管显示的数值整体左移到第1,7 号数码管上显示, 见图 1 。总体而言, 矩阵键盘及显示电路的设计可分为4 个部分 :图1矩阵键盘及显示电路原理图也 ybcmrd曲相包也3.4一/ ,杷*'Fk&i州3 J&=由耳2 0(1)矩阵键盘的行及列的扫描控制和译码。该设计所使用的键盘是通过将列扫 描信号作为输入信号,控制行扫描信号输出,然后根据行及列的扫描

4、结果进行译码。(2)机械式按键的防抖设计。由于机械式按键在按下和弹起的过程中均有5,10ms的信号抖动时间,在信号抖动时间内无法有效判断按键值,因此按键的防抖设计 是非常关键的,也是该设计的一个重点。(3)按键数值的移位寄存。由于该设计需要在8个数码管上依次显示前后共8次按键的数值,因此对已有数据的存储和调用也是该设计的重点所在。(4)数码管的扫描和译码显示。由于该设计使用了 8个数码管,因此需要对每 个数码管进行扫描控制,并根据按键值对每个数码管进行 7段数码管的译码显示。2矩阵键盘及显示电路的实现本文所设计的矩阵键盘及显示电图 2所示。其中,clk 为时钟信号输入端(频 率可为1 024,

5、32 768 Hz) ; start为清零控制端;kbrow为列扫描信号输入端;kbcol为行扫描信号输出端;scan为数码管地址扫描信号输出端;seg7为数码管 显示信号输出端。mziii -4 f图2矩阵键盘及显示电路的电路符号限于篇幅,在此不详述所设计矩阵键盘及显示电路的全部 V HDL代码,只对部分 重要代码段落进行详细说明如图1所示,全部代码由7个进程(process)组成。其中,进程P1和P2用于对列扫描输入信号kbrow进行读取,并通过或非运算产生行扫描使能控制信号 en 对行扫描输出信号kbcol进行控制,并生成一个与kbcol对应的状态信号state。若没有按键被按下(即kb

6、row = "0000” ),则en =,1?,行扫描输出信号kbcol不 断循环扫描各行;若有按键被按下,en = ,0?,则行扫描停止,并锁存当前kbcol的值。进程P1和P2的代码如下:Pl 婕Ik .kbrow )begineu - noi kibrcv(,0)di kbiax or Lbiviu (2 5or kbrow (3) n:if(dk event and dk = I thcuif CIl 1 1r tiled 8HLL= < = couuE 1 ;end if:cud ifend proc<$;P2 rocessfclk1be 虫 iiif elk

7、even! iA clk -】thencaw countwhen *00” = >kbcol < ="0001” :stale < ="OCT ;when "OP = >kbcoi< = "0010 :state< wlwn "IC" = >kbwK ="(H(Xr ;sute < ="1CT :id 耽 u $11" = > kbcol < =*1000” :state< =,llrr:when others -,kbwl v = &qu

8、ot; 1111";end case:end if;end pincess:进程P3使用“case ?when”语句,根据状态信号state的值(即kbcol的值)和列扫描输入信号kbrow的值进行按键值译码,生成一个4位二进制按键数值信 号dat ,用以记录当前按键值。例如,当kbcol = "0010”,kbrow = "0001 ”时“B键按下,dat ="1011”。进程P3的代码在此不再赘述。进程 P4和P5用于按键的防抖和按键值的移位寄存。通过将行扫描使能控制信号en不断赋给一个8位二进制变量reg8 ,再将reg8赋给8位二进制信号key

9、,实现对按键状态的记 录,然后通过对key的各位数值进行与运算,生成防抖控制信号f nq。一旦有按键 按下,en =,0?,则即便是按键在抖动,key中至少也有1位数值为,0?,从而使f nq 二,0?。只有当按键再次弹起,并且在连续8个时钟周期内不再有新的按键按下,key的数值全为,1?,则f nq =,1?,f nq产生一个上升沿,从而触发按键数值信号dat进入数值寄存信号temp (32位二进制数)的第0,3 位,并将temp原来的第 0,27位左移到第4,31位,实现1次按键按下的数值存储。进程 P4和P5的代码 如下:P4 :pracess (elk)variable rec3 :s

10、td logic vector(7 downto Cj :BEGIN 一 if(clk eveiu and elk = L ) rheurcgS := rcg8(6 tiovvnro 0) 4sxit: end if:ku尸=tu啰;end process ;fuq 厂 - k<y(0 iiiid ; d and i:ey(3)and kev( and 工匚、,二,sjiii ky(6) and key7 i ;Pg :proottfiiq .stan I BEGINIF tart - 0, then< = 'OOOOOQOOOOOOOQOOOOCKKWOOOQOQOQOQ

11、H .cl5ii (fjiq event and tnq " )t hentemp < - renip(27 do wnto 0) Ztdat:end if:end process:进程P6用于将数值寄存信号temp的32位二进制数分配给8个数码管,从而 生成数码管地址扫描输出scan ,以及数码管数值信号data (4 位2进制数)。进程P6代码如下:PS :process<dk .temp .cinS«beginif cynt Mid。嘉 I the 仁wS ' =cmS:工; «»d if:C2M: cm£ LSwhe

12、n 0 = > scan< "000 idata < =teuip(3 downto 0) i1 = axb口* ="00尸;由13父=UiupC Jqwuio 1); v/Mii 二=,笈nn* k "01(F:由二"=temp(11 downio 8); wlwft 3 = >K«n <-="011tt ;dbita < tcn(15JqwhIq12);lien 4 - > st it <* " 100H idata-1 cuip (19do w nlo16)二when.

13、5 - >sein< =*lGlh, idata 二-rtaj(23 downtc 20); when 6 - > scan.y="110" :dhta <- temp (27dbwnto24);wlica 7 > SMU U=" 11 ln :data < temp (31rk)vnto28:wIkh others = null,end cas icud pP0CC55:进程P7用于将数码管数值信号data译码成为7段数码管显示输出seg7 ,进程P7的代码在此不再赘述。值得注意的是,本文设计的矩阵键盘及显示电路在按键防抖和数

14、据寄存部分设计得更加简洁可靠,实现的功能更加强大,其具有如下特点(1)为了实现按键防抖,本文采用对按键状态连续记录的方式,即在按键弹起后 连续8个时钟周期均无按键信号才确认1次按键有效,从而避免了按键按下和弹起 过程中的数据抖动,相比于使用计数器从按键按下开始计数,直到5 ,10 ms 后才 让按键有效的防抖方式,这里设计的按键防抖更加可靠,且可有效避免长时间按下 按键产生的重复数据输出,使每次按键无论时间长短均可且只会产生1次数据输出。另外,当电路采用32 768 Hz以上的时钟作为系统时钟时,可以通过增加按键 状态连续记录的时钟周期数,实现可靠的防抖。(2)该设计采用一个32位一维数组te

15、mp作为数据寄存器,使用移位寄存方式 实现了对连续8次按键数据的存储和调用,从而可以在8个数码管上连续显示数 据。3仿真结果分析本文设计的矩阵键盘及显示电路在 Quartus ?开发环境下进行了仿真验证。其 中,按键防抖功能的仿真波形如图3所示。仿真结果分析如下:(1) clk为时钟输入信号,作为系统时钟;(2) start为清零控制端,当其为高电平时,按键有效;(3) kbrow 为列扫输入信号,kbcol为行扫输出信号,图3中对kbrow 1 的 输入波形进行设置,模拟了 “A”键按下和弓M起的过程;(4) f nq为防抖控制信号,scan为数码管地址扫描输出,seg7为数码管显示输出。由图3可知,只有在按键弹起后,才有数据输出,从而实现防抖功能。图3矩阵键盘及显示电路按键防抖仿真波形该设计的其他功能也可以通过仿真验证,不再赘述。4结语本文设计矩阵键盘及显示电路在 Quartus

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论