用Verilog HDL实现按键消抖.doc

用Verilog HDL实现按键消抖.doc

ID:59297143

大小:36.01 KB

页数:3页

时间:2020-09-06

用Verilog HDL实现按键消抖.doc_第1页
用Verilog HDL实现按键消抖.doc_第2页
用Verilog HDL实现按键消抖.doc_第3页
资源描述:

《用Verilog HDL实现按键消抖.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、按键消抖用按键控制一个数字,按键每按一次,这个数字加1,并通过数码管将这个数字显示出来(以16进制)。可能是悟性比较低,按键消抖都搞了1天才搞出来,下面这个程序是我经过参考别人的(有些地方没想明白),然后自己领会,写的一个程序,经过在开发板上实验,还是有一点小问题,但是我觉得,按键消抖的原理应该是这样的。希望本文能帮到需要的人,我也是一个初学者,可能程序中也有很多不足,还请能提出来,相互交流。QQ:1664619265moduleSW_debounce(rst_n,sy_clk,key,HEX0_D);inputrst_n;/低电平复位inputsy_clk;//

2、系统时钟50Mhzinputkey;按键output[6:0]HEX0_D;数码管//*************************/regkey_rst;always@(posedgesy_clkornegedgerst_n)beginif(!rst_n)key_rst<=1'b1;else每个时钟周期读一次按键的值key_rst<=key;end将按键的值存在key_rst中//*************************/regkey_rst_r;always@(posedgesy_clkornegedgerst_n)beginif(!rst_n)

3、key_rst_r<=1'b1;else每个时钟周期将key_rst中的值存入key_rst_r中。key_rst_r<=key_rst;这样key_rst和key_rst_r中存放的是前后两个时钟周期,按键的值end//*************************/wirekey_en,key_an;重点1:抖动时期的标志量,这两个标志量是用来给后面的计数器清零的assignkey_en=key_rst&(~key_rst_r);当按键由0变1时,key_en为1assignkey_an=key_rst_r&(~key_rst);当按键由1变0时,key_

4、an为1;看下面的按键波形,俺觉得,抖动期间,这两个标志量都有可能为1//**************************/reg[18:0]count;计数,是为了延时10ms左右always@(posedgesy_clkornegedgerst_n)beginif(!rst_n)count<=19'd0;elseif(key_en

5、key_an)count<=19'd0;出现抖动就将count清零,使其计不满,因为后面是每10ms读一次按键的值elseif(count==19'h7ffff)//10mscount<=19'd0;elsecount<=cou

6、nt+1'b1;end//************************/reglow_sw;always@(posedgesy_clkornegedgerst_n)beginif(!rst_n)low_sw<=1'b1;elseif(count==19'h7ffff)low_sw<=key;每10ms读一次按键的值,因为抖动期间,count的值是到不了7ffff的,所以抖动期间是不会读按键的值的,因此能消除抖动。end//*********************/reglow_sw_r;always@(posedgesy_clkornegedgerst_n)

7、beginif(!rst_n)low_sw_r<=1'b1;elselow_sw_r<=low_sw;low_sw和low_sw_r存放的是前后10ms,按键的值,这个值中,是按键稳定时的值end//*************************/wirectr;assignctr=low_sw&(~low_sw_r);按键松手时,ctr会出现一个系统周期的高电平//reg[3:0]control;always@(posedgesy_clkornegedgerst_n)beginif(!rst_n)control<=4'b0;elseif(ctr)如何用通过按

8、键产生的这个信号ctrcontrol<=control+1'b1;enddisplaydis1(control,HEX0_D);endmodulemoduledisplay(d,dis_data);input[3:0]d;output[6:0]dis_data;reg[6:0]dis_data;always@(d)begincase(d)4'b0000:dis_data=7'b1000000;//display04'b0001:dis_data=7'b1111001;//display14'b0010:dis_data=7'b0100100;//display24

9、'b001

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。