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的时候分没有反应,时就更没有反应了 谢谢了!!!
此帖出自
小平头技术问答
从你代码看没发现明显的问题,
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个时钟间隔是否符合你的显示需求?
'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//关位选 就成功了。不过还是谢谢你了。
楼主很好,问题解决能分享解决方法!
一周热门 更多>