简单数字钟设计

2019-03-25 09:08发布

module tim(clk,sel,seg);//这是做一个数字钟
input clk;   
output[5:0] sel;
output[7:0] seg;
reg[5:0] sel;//位选
reg[7:0] seg;//段选
reg[3:0] sl;   //秒低位
reg[3:0] sh; //秒高位
reg[3:0] ml; //分低位
reg[3:0] mh; //分高位
reg[3:0] hl; //时低位
reg[3:0] hh; //时高位
reg[25:0] count;  //1秒计数
reg[3:0]data;  //数码管要显示的数据
always@(posedge clk)
begin
 count<=count+1;
 if(count==50000000)//1秒到了
  begin
   if(sl=='b1001)//判断秒低位是不是到9了
    begin sl<=0; sh<=sh+1;  //到了9就为0,同时秒高位加一
     if(sh=='b0101)
      begin sh<=0; ml<=ml+1;
       if(ml=='b1001)
        begin ml<=0; mh<=mh+1;
         if(mh=='b0101)
          begin mh<=0; hl<=hl+1;
           if(hl=='b1001)
            begin hl<=0; hh<=hh+1;
             if(hh=='b0010)
              hh<=0;
            end
          end
        end
      end
    end
   else begin sl<=sl+1;count<=0;end  //秒低位没到9的话,秒低位加一
  end
end
always //扫描数码管
begin
 case(count[15:13])
 'b000:begin sel[5:0]<=6'b011111;data<=sl; end  //开第一个数码管的位选,同时将秒低位给data
 'b001:begin sel[5:0]<=6'b101111;data<=sh; end
 'b010:begin sel[5:0]<=6'b110111;data<=ml; end
 'b011:begin sel[5:0]<=6'b111011;data<=mh; end
 'b100:begin sel[5:0]<=6'b111101;data<=hl; end
 'b101:begin sel[5:0]<=6'b111110;data<=hh; end
 default:begin sel[5:0]<=6'bx;data<=6'bx;end
 endcase
 case(data[3:0]) //显示数码管,可以理解为这是表。
 'b0000:seg[7:0]<=8'b11000000; //0
 'b0001:seg[7:0]<=8'b11111001; //1
 'b0010:seg[7:0]<=8'b10100100;//2
 'b0011:seg[7:0]<=8'b10110000;//3
 'b0100:seg[7:0]<=8'b10011001;//4
 'b0101:seg[7:0]<=8'b10010010;//5
 'b0110:seg[7:0]<=8'b10000010;//6
 'b0111:seg[7:0]<=8'b11111000;//7
 'b1000:seg[7:0]<=8'b10000000;//8
 'b1001:seg[7:0]<=8'b10011000;//9
 default:seg[7:0]<=8'bx;
 endcase
end
endmodule 请求给位帮我看看  谢谢了!!! 问题是:秒的正常,就是秒加到59了变00的时候分没有反应,时就更没有反应了     谢谢了!!!
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
kobe1941
1楼-- · 2019-03-25 14:38
< / 大哥你上来就贴这么多代码,,谁有心情看啊,,建议先说实现的思想和框架,遇到的问题说的详细一些,
eeleader
2楼-- · 2019-03-25 16:54

从你代码看没发现明显的问题,

 

case(count[15:13])
 'b000:begin sel[5:0]<=6'b011111;data<=sl; end  //开第一个数码管的位选,同时将秒低位给data
 'b001:begin sel[5:0]<=6'b101111;data<=sh; end
 'b010:begin sel[5:0]<=6'b110111;data<=ml; end
 'b011:begin sel[5:0]<=6'b111011;data<=mh; end
 'b100:begin sel[5:0]<=6'b111101;data<=hl; end
 'b101:begin sel[5:0]<=6'b111110;data<=hh; end

从这段代码可以看到你设计的间隔 8192个时钟间隔是否符合你的显示需求?

南盗
3楼-- · 2019-03-25 21:19
case(count[15:13])
'b000:begin sel[5:0]<=6'b011111;data<=sl; end  //开第一个数码管的位选,同时将秒低位给data
'b001:begin sel[5:0]<=6'b101111;data<=sh; end
'b010:begin sel[5:0]<=6'b110111;data<=ml; end
'b011:begin sel[5:0]<=6'b111011;data<=mh; end
'b100:begin sel[5:0]<=6'b111101;data<=hl; end
'b101:begin sel[5:0]<=6'b111110;data<=hh; end
default:begin sel[5:0]<=6'bx;data<=6'bx;end
endcase

是default出了问题  ,今天发现分那里的亮度不同说明了分其实是没问题的,把sel[5:0]<=6'bx改成sel[5:0]<=6'b111111//关位选  就成功了。不过还是谢谢你了。
eeleader
4楼-- · 2019-03-25 23:31

楼主很好,问题解决能分享解决方法!

一周热门 更多>