【从零开始走进FPGA】 基于PLD的矩阵键盘状态机控制

可编程逻辑

1360人已加入

描述

关键词: FPGA , PLD

  讲过了独立按键检测,理所当然应该讲讲FPGA中矩阵键盘的应用了。这个思维和电路在FPGA中有所不同,在此,在此做详细解释,Bingo用自己设计的成熟的代码作为案例,希望对你有用。
  一、FPGA矩阵键盘电路图
  在FPGA中的电路,与单片机雷同,如下所示:
  

【从零开始走进FPGA】 基于PLD的矩阵键盘状态机控制



  在上电默认情况下,L[3:0] =4''b1,因为上拉了3.3V,而默认情况下H.[3:0]为低电平;一旦有某一个按键被按下,便是是的该路电路流向该按键的H,是的L检测不到电流。因此可以通过对每一行H输出的控制,来检索是哪一个按键被按下了,这也原理和单片机中一样,只是写法不一样罢了。
  二、FPGA矩阵键盘FSM
  1. 代码
  代码如下所示,采用了三段式状态机来描述矩阵键盘。本模块形式与上一张按键消抖动雷同,方便移植。
  /*************************************************
  * Module Name : matrix_key_design.v
  * Engineer : Crazy Bingo
  * Target Device : EP2C8Q208C8
  * Tool versions : Quartus II 11.0
  * Create Date : 2011-6-26
  * Revision : v1.0
  * Description :
  **************************************************/
  module matrix_key_design
  (
  input clk,
  input rst_n,
  input [3:0] col_data,
  output reg [3:0] row_data,
  output key_flag, //the mark of key is pressed
  output reg [3:0] key_value
  );
  //generate for 2ms signal
  reg [19:0] cnt; //fffff,≈50Hz 20ms
  always @(posedge clk or negedge rst_n)
  begin
  if(!rst_n)
  cnt ---0----1----2----3
  * | | | |
  * R2 >---4----5----6----7
  * | | | |
  * R1 >---8----9----A----B
  * | | | |
  * R0 >---C----D----E----F
  * | | | |
  * C3 C2 C1 C0
  *****************************************************/
  parameter SCAN_IDLE = 3'b000;
  parameter SCAN_JITTER= 3'b001;
  parameter SCAN_COL0 = 3'b011;
  parameter SCAN_COL1 = 3'b010;
  parameter SCAN_COL2 = 3'b110;
  parameter SCAN_COL3 = 3'b100;
  parameter SCAN_READ = 3'b101;
  parameter SCAN_JTTTER2= 3'b111;
  reg [2:0] current_state;
  reg [2:0] next_state;
  always@(posedge clk or negedge rst_n)
  begin
  if(!rst_n)
  current_state

【从零开始走进FPGA】 基于PLD的矩阵键盘状态机控制



  (2)模块可分为一下几个状态:
  

【从零开始走进FPGA】 基于PLD的矩阵键盘状态机控制


                               
                 

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

全部0条评论

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

×
20
完善资料,
赚取积分