购买腾讯备案网站,怀化seo快速排名,有哪些炫酷的官方网站,暗色系网站实现按键消抖功能#xff1a; 
1.滤除按键按下时的噪声和松开时的噪声信号。 
2.获取已消抖的按键按下的标志信号。 
3.实现已消抖的按键的连续功能。 Verilog实现 
模块端口 
key_filter(input	wire 	clk		,input	wire 	rst_n	,input	wire 	key_in	,	//按下按键时为0output 	… 
实现按键消抖功能 
1.滤除按键按下时的噪声和松开时的噪声信号。 
2.获取已消抖的按键按下的标志信号。 
3.实现已消抖的按键的连续功能。 Verilog实现 
模块端口 
key_filter(input	wire 	clk		,input	wire 	rst_n	,input	wire 	key_in	,	//按下按键时为0output 	reg 	key_flag,	//第一次按下的标志信号(已消抖)output 	reg 	key_out	,	//输出按键信号(已消抖)output 	reg 	key_cont	//输出连续按键信号(已消抖)-计时一段时间拉高1次
); 
20ms计数 
always(posedge clk or negedge rst_n)if(!rst_n) cnt_20ms  20d0;else if(key_in)	//松下按键cnt_20ms  20d0;else if(cnt_20ms  CNT_20MS_MAX)	//达到消抖时间cnt_20ms  CNT_20MS_MAX;elsecnt_20ms  cnt_20ms20d1; 
按键第一次按下的标志信号 
always(posedge clk or negedge rst_n)if(!rst_n) key_flag1b0;else if(cnt_20ms  CNT_20MS_MAX-20d1)	//已消抖拉高key_flag一个周期key_flag 1b1;else key_flag1b0; 
已消抖的按键信号 
always(posedge clk or negedge rst_n)if(!rst_n) key_out1b0;else if(key_in)	//松下按键key_out 1b0;else if(key_flag)	//已消抖key_out 1b1;else ; 
连续信号所需计数器 
always(posedge clk or negedge rst_n)if(!rst_n) cnt_cont  20d0;else if(key_out) begin	//已消抖if(cnt_cont  CNT_CONT_MAX)cnt_cont  20d0;else cnt_cont  cnt_cont20d1;endelsecnt_cont  20d0; 
连续按键信号(已消抖)-计时一段时间拉高1次 
always(posedge clk or negedge rst_n)if(!rst_n) key_cont1b0;else if(key_flag)key_cont  1b1;else if(key_out) begin	//已消抖if(cnt_cont  CNT_CONT_MAX)	//连续按下一定时间拉高key_cont一个周期key_cont  1b1;else key_cont  1b0;endelsekey_cont  1b0; testbench: 
timescale 1ns/1ns
module tb_key_filter();reg clk ;
reg rst_n ;
reg key_in ;
reg [7:0] tb_cnt ;wire key_flag;
wire key_out ;
wire key_cont;defparam u_key_filter.CNT_20MS_MAX  20d9;
defparam u_key_filter.CNT_CONT_MAX  24d49;initial begin clk  1b1 ;rst_n  1b0;#20rst_n  1b1;#(20*199100)$stop;
endalways #10 clk~clk;always(posedge clk or negedge rst_n)if(!rst_n) tb_cnt 8b0;else if(tb_cnt 8d199)tb_cnt 8b0;elsetb_cnt  tb_cnt 8b1;always(posedge clk or negedge rst_n)if(!rst_n) key_in  1b1 ; else if(((tb_cnt8d9)  (tb_cnt8d39))||((tb_cnt8d159)  (tb_cnt8d179)))key_in{$random}%2;else if((tb_cnt8d9)||(tb_cnt8d179))key_in1b1;elsekey_in1b0;key_filter u_key_filter(.clk		(clk		),.rst_n		(rst_n		),.key_in		(key_in		), .key_flag	(key_flag	),	//第一次按下的标志信号(已消抖).key_out	(key_out	),	//输出按键信号(已消抖).key_cont	(key_cont	)	//输出连续按键信号(已消抖)-计时一段时间拉高1次
);endmodule仿真波形