always @ (posedge clk or negedge rst_n)
if (!rst_n)
begin
d1 <= 1'b0
d2 <= 1'b0
d3 <= 1'b0
end
else
begin
if ( led_ctrl[0] ) d1 <= ~d1
if ( led_ctrl[1] ) d2 <= ~d2
if ( led_ctrl[2] ) d3 <= ~d3
end
assign led_d5 = d1 ? 1'b1 : 1'b0
assign led_d3 = d2 ? 1'b1 : 1'b0
assign led_d4 = d3 ? 1'b1 : 1'拆败b0
我知道的已有3种:1:设计一个20ms的循环定乱族时器,20ms扫描一次,key_reg[1:0]用于扫描纪录并用来判断下降沿。
2:参见特权同学的消抖方法。
3:自己刚学时写的:在系统时钟上升沿,用if语句对key低电平(有效电平)判断,低的话cnt +1,加到20ms的值时,就让20ms的值付给cnt,只要禅稿按键一直按着,cnt就是20ms的值,else if判断cnt是否等于20ms值,若果是,则设置key_flag位有效,else 语句key_flag无效。这样可保证一次按键哗袭弊只有一个系统时钟的有效信号。
上面就是一个简单的去抖动程序。时钟的频率和去除抖动的时间自皮滚姿己根据产品实际确定。程序的思路简而言之,如果输入电平改变,就开始计数器计数,只有到达一定时间才认为是真正的备并变化,这时候输出才随之变化;否则就认为是抖动,输出燃绝保持不变。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)