講過了獨立按鍵檢測,理所當然應該講講FPGA中矩陣鍵盤的應用了。這個思維和電路在FPGA中有所不同,在此,在此做詳細解釋,Bingo用自己設計的成熟的代碼作為案例,希望對你有用。 一、FPGA矩陣鍵盤電路圖 在FPGA中的電路,與單片機雷同,如下所示: 在上電默認情況下,L[3:0] =4''b1,因為上拉了3.3V,而默認情況下H.[3:0]為低電平;一旦有某一個按鍵被按下,便是是的該路電路流向該按鍵的H,是的L檢測不到電流。因此可以通過對每一行H輸出的控制,來檢索是哪一個按鍵被按下了,這也原理和單片機中一樣,只是寫法不一樣罷了。 二、FPGA矩陣鍵盤FSM 1. 代碼 代碼如下所示,采用了三段式狀態(tài)機來描述矩陣鍵盤。本模塊形式與上一張按鍵消抖動雷同,方便移植。 /************************************************* * 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)模塊可分為一下幾個狀態(tài): |