锆石科技社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 326|回复: 3

数字钟

[复制链接]

4

主题

40

帖子

1134

积分

金牌会员

Rank: 6Rank: 6

积分
1134
发表于 2017-1-15 09:48:25 | 显示全部楼层 |阅读模式
设计数字钟时,利用按键加1,为什么数字却是随机变的,有谁知道是什么原因?
回复

使用道具 举报

发表于 2017-1-16 17:45:26 | 显示全部楼层
按键消抖了嘛?贴个代码来看下
回复 支持 反对

使用道具 举报

4

主题

40

帖子

1134

积分

金牌会员

Rank: 6Rank: 6

积分
1134
 楼主| 发表于 2017-1-24 10:57:47 | 显示全部楼层
module key_Module
(
        CLK_50M,RST_N,KEY,key_out
);
input CLK_50M,RST_N;
input [7:0]KEY;
output [7:0]key_out;
reg [7:0]key_r;
reg [7:0]key_out;
reg [7:0]key_out_n;
reg [20:0]time_cnt;
reg [20:0]time_cnt_n;
wire key_press;
assign key_press=key_r^KEY;
parameter TIME_20MS=21'd1000_000;
always@(posedge CLK_50M or negedge RST_N)
begin
        if(!RST_N)
                time_cnt<=21'h0;
        else
                time_cnt<=time_cnt_n;
end
always@(*)
begin
        if(time_cnt==TIME_20MS || key_press)
                time_cnt_n=21'h0;
        else
                time_cnt_n=time_cnt+21'h1;
end
always@(posedge CLK_50M or negedge RST_N)
begin
        if(!RST_N)
                key_r<=8'h0;
        else
                key_r<=KEY;
end               
always@(posedge CLK_50M or negedge RST_N)
begin
        if(!RST_N)
                key_out<=8'h0;
        else
                key_out<=key_out_n;
end
always@(*)
begin
        if(time_cnt==TIME_20MS)
                key_out_n=key_r;
        else
                key_out_n=8'h0;
end
endmodule
回复 支持 反对

使用道具 举报

发表于 2017-1-25 09:14:26 | 显示全部楼层
缘来就是你 发表于 2017-1-24 10:57
module key_Module
(
        CLK_50M,RST_N,KEY,key_out

你可以下载最新版本的《项目实战篇》,里面的按键消抖进行了更新,你可以看下更新过的按键消抖,可以很好的解决你这个问题。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|锆石科技社区 ( 苏ICP备15059756号  

GMT+8, 2019-5-27 11:56 , Processed in 0.156461 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表