|
module clock(
clk,
rst,
point,
take1,
take2,
seven1,
seven2
);
input clk;//时钟50MHz
input rst;//复位
output [1:0] point;//两个动态七管LED的右下点
output [3:0] take1;//第一个动态七管LED的使动端
output [3:0] take2;//第二个动态七管LED的使动端
output [6:0] seven1;//第一个动态七管LED的数据输入端
output [6:0] seven2;//第二个动态七管LED的数据输入端
reg [1:0] point=2'd0;
wire clk_1Hz,clk_250Hz,time1,time2,time3,time4,time5,time6;
wire [3:0] digital1,digital2,digital3,digital4,digital5,digital6,
digital_out1,digital_out2;
assign time1=clk_1Hz;
clock_1Hz clk1(clk,rst,clk_1Hz);
PLL clk250(clk,rst,clk_250Hz);
div_10 clkto1(time1,rst,time2);//1Hz-->1/10Hz
div_6 clkto2(time2,rst,time3);//1/10Hz-->1/60Hz
div_10 clkto3(time3,rst,time4);//1/60Hz-->1/600Hz
div_6 clkto4(time4,rst,time5);//1/600Hz-->1/3600Hz
div_10 clkto5(time5,rst,time6);//1/3600Hz-->1/36000Hz
plus10 digitalto1(time1,rst,digital1);//产生秒钟个位
plus6 digitalto2(time2,rst,digital2);//产生秒钟十位
plus10 digitalto3(time3,rst,digital3);//产生分钟个位
plus6 digitalto4(time4,rst,digital4);//产生分钟十位
plus10 digitalto5(time5,rst,digital5);//产生时钟个位
plus6 digitalto6(time6,rst,digital6);//产生时钟十位
shaomiao putout(clk_250Hz,rst,digital1,digital2,digital3,digital4,digital5,digital6,
digital_out1,digital_out2,take1,take2); //扫描数码管,并赋值
decode4_7 led1(seven1[6],seven1[5],seven1[4],seven1[3],seven1[2],seven1[1],seven1[0],digital_out1[3],digital_out1[2],digital_out2[1],digital_out2[0]);
decode4_7 led2(seven2[6],seven2[5],seven2[4],seven2[3],seven2[2],seven2[1],seven2[0],digital_out2[3],digital_out2[2],digital_out1[1],digital_out1[0]);
endmodule
//------------------------------------------------------------------------------
module decode4_7(
a,
b,
c,
d,
e,
f,
g,
D3,
D2,
D1,
D0
);
//
output a,b,c,d,e,f,g;
input D3,D2,D1,D0;
//七管LED转换程序
reg a,b,c,d,e,f,g;
always @(D3 or D2 or D1 or D0)
begin
case({D3,D2,D1,D0})
4'd0:{a,b,c,d,e,f,g}=7'b1111110;
4'd1:{a,b,c,d,e,f,g}=7'b0110000;
4'd2:{a,b,c,d,e,f,g}=7'b1101101;
4'd3:{a,b,c,d,e,f,g}=7'b1111001;
4'd4:{a,b,c,d,e,f,g}=7'b0110011;
4'd5:{a,b,c,d,e,f,g}=7'b1011011;
4'd6:{a,b,c,d,e,f,g}=7'b1011111;
4'd7:{a,b,c,d,e,f,g}=7'b1110000;
4'd8:{a,b,c,d,e,f,g}=7'b1111111;
4'd9:{a,b,c,d,e,f,g}=7'b1111011;
default:{a,b,c,d,e,f,g}=7'b00000000;
endcase
end
endmodule
//---------------------------------------------------------------
module clock_1Hz(
//时钟转换
clk,//时钟
rst,
clk_1Hz
);
input clk;
input rst;
output clk_1Hz;
reg clk_1Hz;
reg [25:0] count_26;
always @(posedge clk or negedge rst)
begin
if(!rst)
count_26<=26'd0;
else if(count_26==26'd26214000)
begin
count_26<=26'd0;
clk_1Hz<=~clk_1Hz;
end
else
count_26<=count_26+26'd1;
end
endmodule
//------------------------------------------------------------------
module PLL(clk,rst,clk_250Hz);
//时钟转换
input clk,rst;
output clk_250Hz;
reg clk_250Hz;
reg [25:0] count_div_4;
always @(posedge clk or negedge rst)
begin
if(!rst)
count_div_4<=26'd0;
else if(count_div_4==26'd9999)
begin
count_div_4<=26'd0;
clk_250Hz<=~clk_250Hz;
end
else
count_div_4<=count_div_4+26'd1;
end
endmodule
//---------------------------------------------------------------------------
module div_10(
//十分频
clk_in,//时钟
rst,
clk_out
);
input clk_in;
input rst;
output clk_out;
reg clk_out;
reg [3:0] count_5;
always @(posedge clk_in or negedge rst)
begin
if(!rst)
count_5<=4'd0;
else if(count_5==4'd5)
begin
count_5<=4'd0;
clk_out=~clk_out;
end
else
count_5<=count_5+4'd1;
end
endmodule
//-------------------------------------------------------------
module div_6(
//六分频
clk_in,//时钟
rst,
clk_out
);
input clk_in;
input rst;
output clk_out;
reg clk_out;
reg [3:0] count_3;
always @(posedge clk_in or negedge rst)
begin
if(!rst)
count_3<=4'd0;
else if(count_3==4'd3)
begin
count_3<=4'd0;
clk_out=~clk_out;
end
else
count_3<=count_3+4'd1;
end
endmodule
//---------------------------------------------
module shaomiao(
//扫描程序
clk,
rst,
digital_in1,
digital_in2,
digital_in3,
digital_in4,
digital_in5,
digital_in6,
digital_out1,
digital_out2,
take1,
take2
);
input clk;//时钟
input rst;
input [3:0] digital_in1;//秒钟个位
input [3:0] digital_in2;//秒钟十位
input [3:0] digital_in3;//分钟个位
input [3:0] digital_in4;//分钟十位
input [3:0] digital_in5;//时钟个位
input [3:0] digital_in6;//时钟十位
output [3:0] digital_out1,take1;
output [3:0] digital_out2,take2;
reg [3:0] digital_out1,digital_out2,take1,take2;
reg [3:0] count_8;
always @(posedge clk or negedge rst)
begin
if(!rst)
count_8<=4'd0;
else if(count_8==4'd8)
count_8<=4'd0;
else
count_8<=count_8+4'd1;
case(count_8)
4'd0 : begin digital_out1<=digital_in1;
{take1,take2}=8'b00000001;
end
4'd1 : begin digital_out1<=digital_in2;
{take1,take2}=8'b00000010;
end
4'd2 : begin digital_out1<=digital_in3;
{take1,take2}=8'b00000100;
end
4'd3 : begin digital_out1<=digital_in4;
{take1,take2}=8'b00001000;
end
4'd4 : begin digital_out2<=digital_in5;
{take1,take2}=8'b00010000;
end
4'd5 : begin digital_out2<=digital_in6;
{take1,take2}=8'b00100000;
end
4'd6 : begin digital_out2<=4'd0;
{take1,take2}=8'b01000000;
end
4'd7 : begin digital_out2<=4'd0;
{take1,take2}=8'b10000000;
end
endcase
end
endmodule
//-------------------------------------------------------------------
module plus10(
//不断加1,到10归0
clk,//时钟
rst,
digitalt
);
input clk,rst;
output [3:0] digitalt;
reg [3:0] digital;
always @(posedge clk or negedge rst)
begin
if(!rst)
digital<=4'd0;
else if(digital==4'd9)
digital<=4'd0;
else
digital=digital+4'd1;
end
assign digitalt=digital;
endmodule
//-------------------------------------------------------------------------
module plus6(
//不断加1,到6归0
clk,//时钟
rst,
digital
);
input clk,rst;
output [3:0] digital;
reg [3:0] digital;
always @(posedge clk or negedge rst)
begin
if(!rst)
digital<=4'd0;
else if(digital==4'd5)
digital<=4'd0;
else
digital=digital+4'd1;
end
endmodule
这是一个数码管程序,运行时不对,逢10进1,变成逢3进1 |
|