资源描述:
《Verilog-按键消抖程序.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、按键消抖一、程序(50mhz)modulexiaodou(clk,clr,key1,key2,key3,key4,key5,key_out1,key_out2,key_out3,key_out4,key_out5);inputclk,clr;inputkey1,key2,key3,key4,key5;outputkey_out1,key_out2,key_out3,key_out4,key_out5;//-------------------------------------------------reg[4:0]key_rst;reg[4:0]key_rst_n;reg
2、[19:0]cnt;reg[4:0]key_next;reg[4:0]key_next_n;regd1,d2,d3,d4,d5;wire[4:0]key_flag;wire[4:0]key_out_n;reg[23:0]count1;regcount_flag;always@(posedgeclkornegedgeclr)//getthefistvaluebeginif(!clr)beginkey_rst<=5'b11111;endelsebeginkey_rst<={key5,key4,key3,key2,key1};endend//-------------------
3、--------------------always@(posedgeclkornegedgeclr)beginif(!clr)beginkey_rst_n<=5'b11111;endelsebeginkey_rst_n<=key_rst;endend//----------------------------------------assignkey_flag=key_rst_n&(~key_rst);//--------------jishu-------------------always@(posedgeclkornegedgeclr)beginif(!clr)be
4、gincnt<=20'd0;endelseif(key_flag)begincnt<=20'b0;endelsebegincnt<=cnt+1'b1;endend//-----------------20msafter-------------always@(posedgeclkornegedgeclr)beginif(!clr)beginkey_next<=5'b11111;endelseif(cnt==20'hfffff)beginkey_next<={key5,key4,key3,key2,key1};endend//-------------------------
5、---------always@(posedgeclkornegedgeclr)beginif(!clr)beginkey_next_n<=5'b11111;endelsebeginkey_next_n<=key_next;endend//-------------------------------------------assignkey_out_n=key_next_n&(~key_next);//--------------------------------------always@(posedgeclkornegedgeclr)beginif(!clr)begi
6、nd1<=1'b1;d2<=1'b1;d3<=1'b1;d4<=1'b1;d5<=1'b1;count_flag<=1;endelse//应led止显示一个时钟周期,我们观测不到,begin//此处有个计数延时,目的是led灯显示能够持续一段时间if(key_out_n[0])begind1<=1'b0;count_flag<=1'b0;endelseif(count1==24'hffffff)begind1<=1'b1;count_flag<=1;endif(key_out_n[1])begind2<=1'b0;count_flag<=1'b0;endelseif(cou
7、nt1==24'hffffff)begind2<=1'b1;count_flag<=1;endif(key_out_n[2])begind3<=1'b0;count_flag<=1'b0;endelseif(count1==24'hffffff)begind3<=1'b1;count_flag<=1;endif(key_out_n[3])begind4<=1'b0;count_flag<=1'b0;endelseif(count1==24'hffffff)begind4<=1'b1;count_flag<=1;en