10.18数码管静态显示
数码管以静态方式显示,循环0-f计数,每个循环完成后显示位数循环增加一位,效果演示:
代码:
module seg (rstn,clk,dig,seg);
input rstn,clk;
output[7:0] dig;
output[7:0] seg;
reg[25:0] count;
always @(posedge clk or negedge rstn)
if(~rstn) count<=1'b0;
else if(count==26'd25_000_000)
count<=1'b0;
else
count<=count+1'b1;
reg[3:0] num_d; //number
always @(posedge clk or negedge rstn)
if(~rstn) num_d<=4'h0;
else if(count==26'd25_000_000)
if(num_d==4'hf) num_d<=4'h0;
else num_d<=num_d+4'h1;
reg[2:0] num_s; //seg_sel
always @(posedge clk or negedge rstn)
if(~rstn) num_s<=3'd0;
else if(count==26'd25_000_000 && num_d==4'hf)
if(num_s==3'd7) num_s<=3'd0;
else num_s<=num_s+3'd1;
reg[7:0] seg_r;
always @(posedge clk or negedge rstn)
if(~rstn) seg_r<=8'h0;
else
case(num_d)
4'h0: seg_r<=8'h3f;
4'h1: seg_r<=8'h06;
4'h2: seg_r<=8'h5b;
4'h3: seg_r<=8'h4f;
4'h4: seg_r<=8'h66;
4'h5: seg_r<=8'h6d;
4'h6: seg_r<=8'h7d;
4'h7: seg_r<=8'h07;
4'h8: seg_r<=8'h7f;
4'h9: seg_r<=8'h6f;
4'ha: seg_r<=8'h77;
4'hb: seg_r<=8'h7c;
4'hc: seg_r<=8'h39;
4'hd: seg_r<=8'h5e;
4'he: seg_r<=8'h79;
4'hf: seg_r<=8'h71;
default: seg_r<=8'h0;
endcase
reg[7:0] dig_r;
always @(posedge clk or negedge rstn)
if(~rstn) dig_r<=8'b1111_1111;
else
case(num_s)
3'd0: dig_r<=8'b1111_1110;
3'd1: dig_r<=8'b1111_1100;
3'd2: dig_r<=8'b1111_1000;
3'd3: dig_r<=8'b1111_0000;
3'd4: dig_r<=8'b1110_0000;
3'd5: dig_r<=8'b1100_0000;
3'd6: dig_r<=8'b1000_0000;
3'd7: dig_r<=8'b0000_0000;
default: dig_r<=8'b1111_1111;
endcase
assign dig=dig_r;
assign seg=~seg_r;
endmodule