Verilog-按键消抖程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

按键消抖

一、程序(50mhz)

module

xiaodou(clk,clr,key1,key2,key3,key4,key5,key_out1,key_out2,key_out3,key_out4,key_ out5);

input clk,clr;

input key1,key2,key3,key4,key5;

output key_out1,key_out2,key_out3,key_out4,key_out5;

//-------------------------------------------------

reg [4:0] key_rst;

reg [4:0] key_rst_n;

reg [19:0] cnt;

reg [4:0] key_next;

reg [4:0] key_next_n;

reg d1,d2,d3,d4,d5;

wire[4:0] key_flag;

wire [4:0] key_out_n;

reg [23:0] count1;

reg count_flag;

always @(posedge clk or negedge clr) //get the fist value

begin

if(!clr)

begin key_rst<=5'b11111;

end

else

begin key_rst<={key5,key4,key3,key2,key1};

end

end

//---------------------------------------

always @(posedge clk or negedge clr)

begin

if(!clr)

begin key_rst_n<=5'b11111;

end

else

begin key_rst_n<=key_rst;

end

end

//----------------------------------------

assign key_flag=key_rst_n&(~key_rst);

//--------------jishu-------------------

always @(posedge clk or negedge clr)

begin

if(!clr)

begin cnt<=20'd0;

end

else if(key_flag)

begin cnt<=20'b0;

end

else

begin cnt<=cnt+1'b1;

end

end

//-----------------20ms after -------------

always @(posedge clk or negedge clr)

begin

if(!clr)

begin key_next<=5'b11111;

end

else if(cnt==20'hfffff)

begin

key_next<={key5,key4,key3,key2,key1};

end

end

//----------------------------------

always @(posedge clk or negedge clr)

begin

if(!clr)

begin key_next_n<=5'b11111;

end

else

begin key_next_n<=key_next;

end

end

//-------------------------------------------

assign key_out_n=key_next_n&(~key_next);

//--------------------------------------

always @(posedge clk or negedge clr)

begin

if(!clr)

begin d1<=1'b1;

d2<=1'b1;

d3<=1'b1;

d4<=1'b1;

d5<=1'b1;

count_flag<=1;

end

else //应led止显示一个时钟周期,我们观测不到,

begin //此处有个计数延时,目的是led灯显示能够持续一段时间if(key_out_n[0])

begin d1<=1'b0;count_flag<=1'b0;end

else

if(count1==24'hffffff)

begin d1<=1'b1;count_flag<=1;end

if(key_out_n[1])

begin d2<=1'b0;count_flag<=1'b0;end

else

if(count1==24'hffffff)

begin d2<=1'b1;count_flag<=1;end

if(key_out_n[2])

begin d3<=1'b0;count_flag<=1'b0;end

else

if(count1==24'hffffff)

begin d3<=1'b1;count_flag<=1;end

if(key_out_n[3])

begin d4<=1'b0;count_flag<=1'b0;end

else

if(count1==24'hffffff)

begin d4<=1'b1;count_flag<=1;end

if(key_out_n[4])

begin d5<=1'b0;count_flag<=1'b0;end

else

if(count1==24'hffffff)

begin d5<=1'b1;count_flag<=1;end

end

相关文档
最新文档