收藏 分销(赏)

用VerilogHDL实现按键消抖.doc

上传人:人****来 文档编号:10698950 上传时间:2025-06-10 格式:DOC 页数:3 大小:36.01KB 下载积分:5 金币
下载 相关 举报
用VerilogHDL实现按键消抖.doc_第1页
第1页 / 共3页
用VerilogHDL实现按键消抖.doc_第2页
第2页 / 共3页


点击查看更多>>
资源描述
按键消抖 用按键控制一个数字,按键每按一次,这个数字加1,并通过数码管将这个数字显示出来(以16进制)。 可能是悟性比较低,按键消抖都搞了1天才搞出来,下面这个程序是我经过参考别人的(有些地方没想明白),然后自己领会,写的一个程序,经过在开发板上实验,还是有一点小问题,但是我觉得,按键消抖的原理应该是这样的。希望本文能帮到需要的人,我也是一个初学者,可能程序中也有很多不足,还请能提出来,相互交流。QQ:1664619265 module SW_debounce(rst_n,sy_clk,key,HEX0_D); input rst_n; /低电平复位 input sy_clk; //系统时钟50Mhz input key; 按键 output [6:0]HEX0_D; 数码管 //*************************/ reg key_rst; always@(posedge sy_clk or negedge rst_n) begin if(!rst_n) key_rst<=1'b1; else 每个时钟周期读一次按键的值 key_rst<=key; end 将按键的值存在key_rst中 //*************************/ reg key_rst_r; always@(posedge sy_clk or negedge rst_n) begin if(!rst_n) key_rst_r<=1'b1; else 每个时钟周期将key_rst中的值存入key_rst_r中。 key_rst_r<=key_rst; 这样key_rst和key_rst_r中存放的是前后两个时钟周期,按键的值 end //*************************/ wire key_en,key_an; 重点1:抖动时期的标志量,这两个标志量是用来给后面的计数器清零的 assign key_en=key_rst&(~key_rst_r); 当按键由0变1时,key_en为1 assign key_an=key_rst_r&(~key_rst); 当按键由1变0时,key_an为1; 看下面的按键波形,俺觉得,抖动期间,这两个标志量都有可能为1 //**************************/ reg[18:0] count; 计数,是为了延时10ms左右 always@(posedge sy_clk or negedge rst_n) begin if(!rst_n) count<=19'd0; else if(key_en | key_an) count<=19'd0; 出现抖动就将count 清零,使其计不满,因为后面是每10ms读一次按键的值 else if(count==19'h7ffff) //10ms count<=19'd0; else count<=count+1'b1; end //************************/ reg low_sw; always@(posedge sy_clk or negedge rst_n) begin if(!rst_n) low_sw<=1'b1; else if(count==19'h7ffff) low_sw<=key; 每10ms读一次按键的值,因为抖动期间,count的值是到不了7ffff的,所以抖动期间是不会读按键的值的,因此能消除抖动。 end //*********************/ reg low_sw_r; always@(posedge sy_clk or negedge rst_n) begin if(!rst_n) low_sw_r<=1'b1; else low_sw_r<=low_sw; low_sw和low_sw_r存放的是前后10ms,按键的值,这个值中,是按键稳定时的值 end //*************************/ wire ctr; assign ctr=low_sw&(~low_sw_r); 按键松手时,ctr会出现一个系统周期的高电平 // reg[3:0]control; always@(posedge sy_clk or negedge rst_n) begin if(!rst_n) control<=4'b0; else if(ctr) 如何用通过按键产生的这个信号 ctr control<=control+1'b1; end display dis1(control,HEX0_D); endmodule module display(d,dis_data) ; input[3:0] d; output[6:0] dis_data ; reg[6:0] dis_data ; always@(d) begin case(d) 4'b0000: dis_data=7'b1000000; //display 0 4'b0001: dis_data=7'b1111001; //display 1 4'b0010: dis_data=7'b0100100; //display 2 4'b0011: dis_data=7'b0110000; //display 3 4'b0100: dis_data=7'b0011001; //display 4 4'b0101: dis_data=7'b0010010; //display 5 4'b0110: dis_data=7'b0000010; //display 6 4'b0111: dis_data=7'b1111000; //display 7 4'b1000: dis_data=7'b0000000; //display 8 4'b1001: dis_data=7'b0011000; //display 9 4'b1010: dis_data=7'b0100011; //display a; 4'b1011: dis_data=7'b0000011; //display b; 4'b1100: dis_data=7'b1000110; //display c; 4'b1101: dis_data=7'b0011100; //display d; 4'b1110: dis_data=7'b0000110; //display E; 4'B1111: dis_data=7'b0001110; //display F; endcase end endmodule
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服