基本功是每按一次按鍵,訊號電平發生一次反轉
按鍵長按或者不按訊號狀態不發生變化,比如按下後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...