基于FPGA的按鍵彈跳消除模塊的研究與應(yīng)用
2.2 程序設(shè)計(jì)
設(shè)計(jì)一個(gè)高脈沖計(jì)數(shù)器count1和一個(gè)低脈沖計(jì)數(shù)器conut0。引入一個(gè)采樣脈沖信號(hào)clk,對(duì)輸入信號(hào)button_in進(jìn)行采樣,并對(duì)clk進(jìn)行計(jì)數(shù)。若button_in為高電平,count1做加法計(jì)數(shù),直到count1各位全為1,停止計(jì)數(shù),歸零,使消抖后的輸出信號(hào)button_out輸出1。若button_in為低電平,count0做加法計(jì)數(shù),直到count0各位全為1,停止計(jì)數(shù)歸零,并使消抖后的輸出信號(hào)button_out輸出0。
部分程序如下:
module filter(clk,
reset,
button_in,
button_out);
input clk;
input reset;
input button_in;
output button_out;
wire buttong_out1;
reg [20:0] count0;
reg [20:0] count1;
reg button_out1_reg;
……
assign button_out=button_out1_reg;
//對(duì)輸入進(jìn)行采樣,計(jì)數(shù)
always@(posedge clk or negedge reset)
begin
if(!reset) count1=21'h000000;
else if(button_out1==1'b1) count1=count1+1;//對(duì)高電平計(jì)數(shù)
else count1=21'h000000;
end
always@(posedge clk or negedge reset)
begin
if(!reset) count0=21'h000000;
else if(button_out1==1'b0) count0=count0+1;//對(duì)低電平計(jì)數(shù)
else count0=21’h000000;
end
//輸出
always@(posedge clk or negedge reset
begin
if(!reset) button_out1_reg=1'b1;
else if(count0==21'h1312D0) //判斷低電平信號(hào)是否符合輸出條件
button_out1_reg=1'b0; //如果符合條件,則輸出低電平
else if(count1==21'h1312D0) //判斷低電平信號(hào)是否符合輸出條件
button_out1_reg=1'b1; //如果符合條件,則輸出高電平
else button_out1_reg=button_out1_reg;
end
endmodule
評(píng)論