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

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


  在上电默认情况下,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


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

                               
               
本文地址:https://www.eechina.com/thread-160849-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表