4 4矩陣鍵盤的FPGA驅動

2021-10-02 05:15:37 字數 3685 閱讀 7341

4*4矩陣鍵盤有4行與4列,在按鍵按下時一行與一列即導通。其驅動方法非常簡單。本設計中以一定的時間頻率分別將每一行的引腳電平拉高,並在拉高某個引腳的同時檢測每一列的電平變化,當檢測到某列引腳有上公升沿跳變時,即為該行與該列導通對應的那個按鍵被按下。

例如上圖中,拉高pd4,此時檢測到pd2引腳有上公升沿電平跳變,則按鍵s5被按下。其餘同理。

//

// company: nanjing university of information science & technology

// engineer: yang cheng yu

// // create date: 2020/01/13 20:01:50

// design name: keyboard_4_4

// module name: keyboard_4_4

// project name: clock

// target devices:

// tool versions:

// description:

// // dependencies:

// // revision:

// revision 0.01 - file created

// additional comments:

// //

module keyboard_4_4

( input clk,

//時鐘

input rst,

//復位

output reg[3:

0] c_pin,

//行引腳

input[3:

0] r_pin,

//列引腳

output reg[3:

0] key_out//按鍵編號輸出);

reg[15:

0] div_cnt;

//分頻計數器

reg[2:

0] state;

reg cnt_full;

//分頻計數器計滿邏輯

localparam check_r1=

3'b000;

//檢測r1

localparam check_r2=

3'b001;

//檢測r2

localparam check_r3=

3'b011;

//檢測r3

localparam check_r4=

3'b010;

//檢測r4

//分頻計數器邏輯

always@(posedge clk or negedge rst)begin//此處設計每次拉高一行時間為1msif(

!rst)begin

div_cnt <=

16'd0;

cnt_full <=

1'b0;

endelse

if(div_cnt==

16'd49999)begin

div_cnt <=

16'd0;

cnt_full <=

1'b1;

endelse begin

div_cnt <= div_cnt +

1'b1;

cnt_full <=

1'b0;

endend

//狀態組合判斷

always@(posedge cnt_full or negedge rst)begin

if(!rst)

state <= check_r1;

else

case

(state)

check_r1:

if(cnt_full)

state <= check_r2;

else

state <= check_r1;

check_r2:

if(cnt_full)

state <= check_r3;

else

state <= check_r2;

check_r3:

if(cnt_full)

state <= check_r4;

else

state <= check_r3;

check_r4:

if(cnt_full)

state <= check_r1;

else

state <= check_r4;

default

: state <= state;

endcase

end//狀態機輸出邏輯

always@(posedge clk or negedge rst)begin

if(!rst)

c_pin <=

4'b0000;

else

case

(state)

check_r1:begin

c_pin <=

4'b1000;

case

(r_pin)

4'b1000:key_out <= 4'd0;

4'b0100:key_out <= 4'd1;

4'b0010:key_out <= 4'd2;

4'b0001:key_out <= 4'd3;

endcase

endcheck_r2:begin

c_pin <=

4'b0100;

case

(r_pin)

4'b1000:key_out <= 4'd4;

4'b0100:key_out <= 4'd5;

4'b0010:key_out <= 4'd6;

4'b0001:key_out <= 4'd7;

endcase

endcheck_r3:begin

c_pin <=

4'b0010;

case

(r_pin)

4'b1000:key_out <= 4'd8;

4'b0100:key_out <= 4'd9;

4'b0010:key_out <= 4'd10;

4'b0001:key_out <= 4'd11;

endcase

endcheck_r4:begin

c_pin <=

4'b0001;

case

(r_pin)

4'b1000:key_out <= 4'd12;

4'b0100:key_out <= 4'd13;

4'b0010:key_out <= 4'd14;

4'b0001:key_out <= 4'd15;

endcase

end

default

:begin

c_pin <=

4'b0000;

key_out <=

4'd0;

endendcase

endendmodule

狀態轉移圖

4 4矩陣鍵盤的實現方式

在網上看了些4 4矩陣鍵盤的程式,哥們自己也想寫乙個,首先是初始化就是p0口賦初值,這是數碼管的i o口,然後就是p3口的賦初值,這個是選通有幾個數碼管的,就是這個意思吧,最重要的是p1口這是連線鍵盤的i o口。首先說說它的原理 我是依據我自己的圖來寫的,我的圖是p1.0 p1.3是行,p1.4 p...

矩陣鍵盤驅動原理

矩陣鍵盤驅動原理 矩陣鍵盤由行訊號和列訊號組成矩陣。每個按鍵連線到行訊號和列訊號的交叉點。通過矩陣鍵盤控制器行訊號線順序逐行輸出掃瞄脈衝,列訊號線作為輸入訊號線。如果沒有按鍵按下,列訊號線不會產生中斷,沒有對按鍵的處理。如果有按鍵按下去,對應的行輸出掃瞄脈衝就會在對應的列訊號線產生變化,就會觸發鍵盤...

4 4 矩陣式鍵盤電路的改進

本文向大家推薦乙個精簡io介面的4 4鍵盤電路,該鍵盤電路僅僅使用4條io介面引線,即可完成一般需要8位介面才能完成的功能。在51微控制器系統中,經常使用4 4鍵盤,一般情況下,都是使用乙個8位的介面,外接16個按鍵。下圖就是乙個常規的4 4鍵盤電路圖。這種常規的矩陣鍵盤電路,相信大家都司空見慣了,...