基于FPGA的4x4矩阵键盘驱动调试

       好久不见,因为博主最近两个月有点事情,加上接着考试,考完试也有点事情要处理,最近才稍微闲了一些,这才赶紧记录分享一篇博文。FPGA驱动4x4矩阵键盘。这个其实原理是十分简单,但是由于博主做的时候遇到了一些有意思的情况,所以我个人觉得值得记录分享一下。

       首先找了本书看了下矩阵键盘的驱动原理,一般来说4x4矩阵键盘的原理图如下,有四根行线和四根列线,行选通和列选通可以确定键盘上的一个位置。从原理图上看出,在没有操作的情况下,行线上接了一个10K的上拉电阻接vcc,这使得键盘在没有按下时,四根行线始终是高电平。

       列线是由处理器输入给矩阵键盘,空闲状态下保持为0。也就是行空闲时输出给处理器为四个1,列空闲时由处理器输入给四个0。

       当按下按键时,比如第一行第一个按键,对应的那一行导通输出为0,即row_data = 0111,此时由处理器逐渐输入列扫描信号由col_data = 0111——1110,当所按下按键为对应的那一行列的按键,矩阵键盘的行才会导通输出为0,否则会回到1111。其他按键类似,就是利用这个原理来驱动矩阵键盘。

 

       最后FPGA部分模块引脚设计如图,我们需要对按键进行消抖,和普通按键一样,采用20ms的延时对按键进行消抖,分为按下消抖和松开消抖,中间的状态转移,因为列信号需要输出判断行信号的变化,所以状态机状态转移用两个系统时钟周期跳转。采用状态机进行描述,状态转移图如下。

代码如下:(点击阅读原文查看博客) 

  1 `timescale      1ns/1ps
  2 // *********************************************************************************
  3 // Project Name :       
  4 // Author       : NingHeChuan
  5 // Email        : ninghechuan@foxmail.com
  6 // Blogs        : http://www.cnblogs.com/ninghechuan/
  7 // File Name    : Matrix_Key_Scan.v
  8 // Module Name  :
  9 // Called By    : 
 10 
 11 // Abstract     :
 12 //
 13 // CopyRight(c) 2018, NingHeChuan Studio.. 
 14 // All Rights Reserved
 15 //
 16 // *********************************************************************************
 17 // Modification History:
 18 // Date         By              Version                 Change Description
 19 // -----------------------------------------------------------------------
 20 // 2018/7/28    NingHeChuan       1.0                     Original
 21 //  
 22 // *********************************************************************************
 23 
 24 module Matrix_Key_Scan(
 25     input                   clk,    //50Mhz
 26     input                   rst_n,
 27     input           [3:0]   row_data,
 28     output                  key_flag,
 29     output      reg [3:0]   key_value,
 30     output      reg [3:0]   col_data
 31 );
 32 
 33 //FSM state
 34 parameter       SCAN_IDLE       =   8'b0000_0001;
 35 parameter       SCAN_JITTER1    =   8'b0000_0010;
 36 parameter       SCAN_COL1       =   8'b0000_0100;
 37 parameter       SCAN_COL2       =   8'b0000_1000;
 38 parameter       SCAN_COL3       =   8'b0001_0000;
 39 parameter       SCAN_COL4       =   8'b0010_0000;
 40 parameter       SCAN_READ       =   
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值