📄 clock.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 + -