⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock.v

📁 数字电子钟的Verilog HDL语言描述。
💻 V
字号:
/*********************************//*
 名称:时、分、秒数字电子钟。
 功能描述:实现时、分、秒时间的四位数码管显示。
 作者:XTGQ
 时间:2009.02.26
**********************************/
module clock
	(			
		clk_100M,
		//key,
		clk_out,
		out_data,
		out_sel
	);

	input	clk_100M; //定义始终输入
	//input   [1:0] key;	
	output  clk_out;
	output	[7:0] out_data;          //定义段码输出
	output	[3:0] out_sel;           //定义位码输出
	
	
	reg     clk_1k;
	reg     [25:0] count;            //定义计数寄存器
	reg     [19:0] count1;	
	reg     [1:0] count2;
	reg     [15:0] min;              //定义现在时刻寄存器
	reg     [7:0]  out_data_reg;     //定义段码数据寄存器
	reg     [3:0]  out_sel_reg,led_buf;//定义段码寄存器
	reg     clk_1hz;      //定义标志位
	
	assign  out_data=out_data_reg;
	assign  out_sel=out_sel_reg;
	assign  clk_out =clk_1hz;
	
	parameter  countful= 100_000_000/2-1,  //10_1111_1010_1111_0000_0111_1111
	           counterfull_1k = 100_000_000/1000/2-1;
    
	always @(posedge clk_100M) //1HZ分频
	begin
		count <= count+26'h1;
		if(count==countful)
			begin
			   count <= 26'h000_0000;
			   clk_1hz <= ~clk_1hz;
			end
	end
    
    /******分频器 1KHZ***********/
	always @(posedge clk_100M)
	begin
		if(count1==counterfull_1k)  //100MHZ分频  
		   count1<=4'h0000;
		else
		   count1<=count1+4'h0001;	
	end
    always @(negedge clk_100M)
	begin
		if(count1==counterfull_1k)
		  clk_1k <= !clk_1k;
	end
    //定义上升沿触发过程
    always @(posedge clk_1k)  
	begin
		count2<=count2+1'b1;		
	end
	
   
	
	//BCD译码输出
	always @(led_buf)
	begin
		case(led_buf)
		    4'h0:out_data_reg=8'hc0;
		    4'h1:out_data_reg=8'hf9;
		    4'h2:out_data_reg=8'ha4;
		    4'h3:out_data_reg=8'hb0;
		    4'h4:out_data_reg=8'h99;
		    4'h5:out_data_reg=8'h92;
		    4'h6:out_data_reg=8'h82;
		    4'h7:out_data_reg=8'hf8;
		    4'h8:out_data_reg=8'h80;
		    4'h9:out_data_reg=8'h90;
		    4'ha:out_data_reg=8'h88;
		    4'hb:out_data_reg=8'h83;
		    4'hc:out_data_reg=8'hc6;
		    4'hd:out_data_reg=8'ha1;
		    4'he:out_data_reg=8'h86;
		    4'hf:out_data_reg=8'h8e;
		endcase
		if(((count2==2'b10)&clk_1hz))
		   out_data_reg=out_data_reg&8'h7f;//小数点闪烁
	end
    
    //位选输出
    always @(posedge clk_1k)
	begin
		case(count2)
		    2'b00:out_sel_reg=4'b1000;
		    2'b01:out_sel_reg=4'b0100;
		    2'b10:out_sel_reg=4'b0010;
		    2'b11:out_sel_reg=4'b0001;
		endcase
	end
    //数码管显示输出
    always @(posedge clk_1k)
	begin
		case(count2)
		    2'b00:led_buf=min[3:0];
		    2'b01:led_buf=min[7:4];
		    2'b10:led_buf=min[11:8];
		    2'b11:led_buf=min[15:12];
		endcase
	end

    //时分秒的计数
    always @(posedge clk_1hz)
	begin		        	
		    min=min+15'h1;
		    if(min[3:0]==4'ha)
		    begin
		       min[3:0]=4'h0;
		       min[7:4]=min[7:4]+4'h1;
		       if(min[7:4]==4'h6)
		       begin
		          min[7:4]=4'h0;
		          min[11:8]=min[11:8]+4'h1;
		          if(min[11:8]==4'ha)
		          begin
		             min[11:8]=4'h0;
		             min[15:12]=min[15:12]+4'h1;
		             if(min[15:12]==4'h6)
		                min[15:12]=4'h0;
		          end
		       end
		    end		
	end	
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -