[笔记] 数码管显示(十一)

一、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
原文地址:https://www.cnblogs.com/spartan/p/2224565.html