按鍵檢測(二)

2021-10-19 13:17:38 字數 2030 閱讀 8132

基本功是每按一次按鍵,訊號電平發生一次反轉

按鍵長按或者不按訊號狀態不發生變化,比如按下後led點亮,此時繼續保持按下或者鬆開,led狀態不變,當按鍵再次按下後,led才會熄滅。

應用場景:如果按鍵按下為高電平,那麼就可以用來檢測按鍵按下時的上公升沿,或者中斷的上公升沿,調整防抖時延實現不同的靈敏度。

module	key_flap

( clk,

rst_n,

key,

flap_o);

input clk;

input rst_n;

input key;

output reg flap_o;

/*延時計算*/

parameter period=

32'd1000000 ;

reg [31:

0] cunter;

reg time_up;

reg clear;

//1: 開始計數 0:清零計數

always @(posedge clk or negedge rst_n)

begin

if(!rst_n)

begin

cunter<=

32'd0;

time_up<=0;

endelseif(

!clear)

begin

cunter<=

32'd0;

time_up<=0;

endelse

if(cunter==period)

begin

cunter<=

32'd0;

time_up<=1;

endelse

begin

cunter<=cunter+

1'b1;

time_up<=0;

end

end

/*按鍵上公升沿檢測*/

reg key_old;

reg key_upedge;

always @(posedge clk or negedge rst_n)

begin

if(!rst_n)

begin

key_upedge<=0;

endelse

begin

key_old<=key;

key_upedge<=key&

(!key_old)

; end

end/*延時開關*/

always @(posedge clk or negedge rst_n)

begin

if(!rst_n)

begin

clear<=0;

endelse

if(key_upedge)

begin

clear <=1;

endelse

if(time_up)

clear<=0;

end/*時序邏輯time_up會有兩個週期的高電平,因此需要去掉乙個*/

wire time_up_flag;

assign time_up_flag=time_up&clear;

//他倆高電平重疊乙個週期,可通過signal tap 除錯

/*狀態輸出*/

always @(posedge clk or negedge rst_n)

begin

if(!rst_n)

begin

flap_o<=0;

//預設輸出低電平,可根據需要更改初始狀態

endelse

if(time_up_flag)

begin

if(key)

begin

flap_o<=

~flap_o;

endelse

begin

flap_o<=flap_o;

end

endelse

flap_o<=flap_o;

endendmodule

矩陣鍵盤 按鍵檢測 按鍵次數檢測

在進行矩陣按鍵檢測的時候,對於51微控制器來說,由於io輸出電流較小,驅動能力不足,若用乙個a號io口去檢測b號io口,無論b口高電平還是低電平,a口皆是低電平 若a口置高,可用來檢測b口的低電平。io.h檔案 ifndef matrix h define matrix h include stc1...

7 按鍵檢測

當按鍵沒有按下去,電容達到飽和,電路短路,gpio口pa0為低電平 當按鍵k1按下,四腳按鍵左側1,2和右側3,4導通,pa0變成高電平。而且與按鍵併聯的電容放電達到了消除按鍵抖動產生的波紋的效果,避免檢測不正確。確定好兩個gpio口 goioa 0和gpioc 13,進行埠初始化,還要對埠進行檢測...

python檢測按鍵按下 如何檢測按鍵是否被按下?

對於python,作為乙個新手,我嘗試著用一本指南來編寫我自己的遊戲。不過,在這個遊戲中,我試著檢測什麼時候乙個鍵一直被按住而不是僅僅按下。我使用的當前 不會使字元移動,而且如果沒有實現halt self,evt 會導致飛船在按住按鈕足夠長時間後無法控制地加速。在from tkinter impor...