一、Code
module seg7(
// input
input clk_50,
input rst_n,
//output
output[6:0] HEX7,HEX6,HEX5,HEX4,HEX3,HEX2,HEX1,HEX0
);
reg[24:0] cnt; //2的25次方,约640ms
always@(posedge clk_50 or negedge rst_n)
if(!rst_n)
cnt <= 25'd0;
else
cnt <= cnt+1'b1;
reg[3:0] num;
always@(posedge clk_50 or negedge rst_n)
if(!rst_n)
num <= 4'd0;
else if(cnt == 25'h1ffffff)
num <= num+1'b1;
/* 共阴极 :不带小数点
parameter seg0 = 7'h3f,
seg1 = 7'h06,
seg2 = 7'h5b,
seg3 = 7'h4f,
seg4 = 7'h66,
seg5 = 7'h6d,
seg6 = 7'h7d,
seg7 = 7'h07,
seg8 = 7'h7f,
seg9 = 7'h6f,
sega = 7'h77,
segb = 7'h7c,
segc = 7'h39,
segd = 7'h5e,
sege = 7'h79,
segf = 7'h71; */
// 共阳极 :不带小数点
parameter seg0 = 7'h40,
seg1 = 7'h79,
seg2 = 7'h24,
seg3 = 7'h30,
seg4 = 7'h19,
seg5 = 7'h12,
seg6 = 7'h02,
seg7 = 7'h78,
seg8 = 7'h00,
seg9 = 7'h18,
sega = 7'h08,
segb = 7'h03,
segc = 7'h46,
segd = 7'h21,
sege = 7'h06,
segf = 7'h0e;
reg[6:0] HEX_r; //7段数码管(不包括小数点)
always @ (num)
case (num) //NUM值显示在两个数码管上
4'h0: HEX_r <= seg0;
4'h1: HEX_r <= seg1;
4'h2: HEX_r <= seg2;
4'h3: HEX_r <= seg3;
4'h4: HEX_r <= seg4;
4'h5: HEX_r <= seg5;
4'h6: HEX_r <= seg6;
4'h7: HEX_r <= seg7;
4'h8: HEX_r <= seg8;
4'h9: HEX_r <= seg9;
4'ha: HEX_r <= sega;
4'hb: HEX_r <= segb;
4'hc: HEX_r <= segc;
4'hd: HEX_r <= segd;
4'he: HEX_r <= sege;
4'hf: HEX_r <= segf;
default: ;
endcase
assign HEX0 = HEX_r;
assign HEX1 = HEX_r;
assign HEX2 = HEX_r;
assign HEX3 = HEX_r;
assign HEX4 = HEX_r;
assign HEX5 = HEX_r;
assign HEX6 = HEX_r;
assign HEX7 = HEX_r;
endmodule