That's better, using the bit concatenation operation.
/****************时钟*******************************/
/****************EPM240T100C5N*********************/
/****************ID:共同学习FPGA********************/
/****************20251010**************************/
module shizhong
(
input clk, //系统时钟24MHz;
input res, //复位信号,低电平有效;
input k_jia, //加;
input k_jian, //减;
input k_ent, //确认;
output reg led_1, //led_1;
output reg led_2, //led_2;
output reg[7:0]x_c1, //数码管1字模,个位;
output reg[7:0]x_c2, //数码管2字模,十位;
output reg[7:0]x_c3, //数码管3字模,百位;
output reg[7:0]x_c4 //数码管4字模,千位;
);
/**************************************************/ //1.分频;
reg[24:0] num; //num计数器;
reg num1; //秒脉冲;
reg num2; //按键脉冲;
always@(posedge clk or negedge res)
begin
if(~res)
begin
num <=0;
num1 <=0;
num2 <=0;
led_1 <=0;
led_2 <=0;
end
else
begin
if(num ==24_000_000 -1)
begin
num <=0;
num1 <=1;
led_1 <= ~led_1;
led_2 <= ~led_2;
end
else
begin
num <=num +1;
if(num ==10)
begin
num2 <=1;
end
else
begin
num2 <=0;
end
num1 <=0;
end
end
end
/**************************************************/ //2.计时;
reg[7:0] shi; //时
reg[7:0] fen; //分
reg[7:0] miao; //秒
always@(posedge clk or negedge res)
begin
if(~res)
begin
shi <= 8'b0001_0010; //12:00
fen <= 0;
miao <= 0;
end
else
begin
if(num1)
begin
/**************************************************/ //秒进位
if(miao[7:4] == 4'd5 && miao[3:0] == 4'd9)
begin
miao <= 8'd0;
/**************************************************/ //分进位
if(fen[7:4] == 4'd5 && fen[3:0] == 4'd9)
begin
fen <= 8'd0;
/**************************************************/ //时进位
if(shi[7:4] == 4'd2 && shi[3:0] == 4'd4)
begin
shi <=8'd0;
end
else if(shi[3:0] == 4'd9 )
begin
shi <={shi[7:4] +4'd1,shi[3:0] <= 4'd0};
end
else
begin
shi <= shi +8'd1;
end
/**************************************************/
end
else if(fen[3:0] == 4'd9)
begin
fen <={fen[7:4] + 4'd1,4'd0};
end
else
begin
fen <= fen +8'd1;
end
/**************************************************/
end
else if(miao[3:0] == 4'd9)
begin
miao <= {miao[7:4] + 4'd1,4'd0};
end
else
begin
miao <= miao + 8'd1;
end
/**************************************************/
end
/**************************************************/ //按键
if(num2 == 1)
begin
if(k_jian == 0) //小时加
begin
if((shi[7:4] == 4'd2) && (shi[3:0] == 4'd4)) //24小时
begin
shi <= 8'd0;
end
else if(shi[3:0] == 8'd9)
begin
shi <= {shi[7:4] + 4'd1,4'd0};
end
else
begin
shi <= shi + 8'd1;
end
end
/**************************************************/
if(k_jia == 0) //分钟加
begin
if((fen[7:4] == 4'd5) && (fen[3:0] == 4'd9)) //59分钟
begin
fen <= 8'd0;
//shi <= shi + 4'd1;
end
else if(fen[3:0] == 8'd9)
begin
fen <= {fen[7:4] + 4'd1,4'd0};
end
else
begin
fen <=fen + 8'd1;
end
end
/**************************************************/
if(k_ent == 0) //分钟减
begin
if((fen[7:4] == 4'd0) && (fen[3:0] == 4'd0))
begin
fen <= {4'd5,4'd9};
end
else if((fen[7:4] > 4'd0) && (fen[3:0] == 4'd0))
begin
fen <= {fen[7:4] - 4'd1,4'd9};
end
else
begin
fen <=fen - 8'd1;
end
end
/**************************************************/
end
/**************************************************/
end
end
/**************************************************/ //3.显示;
reg[3:0] x_b1; //数码管1数字,个位;
reg[3:0] x_b2; //数码管2数字,十位;
reg[3:0] x_b3; //数码管3数字,百位;
reg[3:0] x_b4; //数码管4数字,千位;
/**************************************************/
parameter seg_0 =8'hc0, //0
seg_1 =8'hf9, //1
seg_2 =8'ha4, //2
seg_3 =8'hb0, //3
seg_4 =8'h99, //4
seg_5 =8'h92, //5
seg_6 =8'h82, //6
seg_7 =8'hf8, //7
seg_8 =8'h80, //8
seg_9 =8'h90, //9
seg_A =8'h88, //A
seg_B =8'h83, //B
seg_C =8'hc6, //C
seg_D =8'ha1, //D
seg_E =8'h86, //E
seg_F =8'h8e, //F
seg_off =8'hff; //熄灭
/**************************************************/
always@(posedge clk or negedge res)
begin
if(~res)
begin
x_b1 <=4'd0;
x_b2 <=4'd0;
x_b3 <=4'd0;
x_b4 <=4'd0;
x_c1 <='b1001_1001; //4;
x_c2 <='b1011_0000; //3;
x_c3 <='b1010_0100; //2;
x_c4 <='b1111_1001; //1;
end
else
begin
if(num1) //秒脉冲
begin
x_b1 <=fen[3:0];
x_b2 <=fen[7:4];
x_b3 <=shi[3:0];
x_b4 <=shi[7:4];
/**************************************************/
case(x_b1) //个位;
0: x_c1 = seg_0; // 0
1: x_c1 = seg_1; // 1
2: x_c1 = seg_2; // 2
3: x_c1 = seg_3; // 3
4: x_c1 = seg_4; // 4
5: x_c1 = seg_5; // 5
6: x_c1 = seg_6; // 6
7: x_c1 = seg_7; // 7
8: x_c1 = seg_8; // 8
9: x_c1 = seg_9; // 9
10: x_c1 = seg_A; // A
11: x_c1 = seg_B; // B
12: x_c1 = seg_C; // C
13: x_c1 = seg_D; // D
14: x_c1 = seg_E; // E
15: x_c1 = seg_F; // F
default: x_c1 = seg_off; // 不显
endcase
/**************************************************/
case(x_b2) //十位;
0: x_c2 = seg_0; // 0
1: x_c2 = seg_1; // 1
2: x_c2 = seg_2; // 2
3: x_c2 = seg_3; // 3
4: x_c2 = seg_4; // 4
5: x_c2 = seg_5; // 5
6: x_c2 = seg_6; // 6
7: x_c2 = seg_7; // 7
8: x_c2 = seg_8; // 8
9: x_c2 = seg_9; // 9
10: x_c2 = seg_A; // A
11: x_c2 = seg_B; // B
12: x_c2 = seg_C; // C
13: x_c2 = seg_D; // D
14: x_c2 = seg_E; // E
15: x_c2 = seg_F; // F
default: x_c2 = seg_off; // 不显
endcase
/**************************************************/
case(x_b3) //百位
0: x_c3 = seg_0; // 0
1: x_c3 = seg_1; // 1
2: x_c3 = seg_2; // 2
3: x_c3 = seg_3; // 3
4: x_c3 = seg_4; // 4
5: x_c3 = seg_5; // 5
6: x_c3 = seg_6; // 6
7: x_c3 = seg_7; // 7
8: x_c3 = seg_8; // 8
9: x_c3 = seg_9; // 9
10: x_c3 = seg_A; // A
11: x_c3 = seg_B; // B
12: x_c3 = seg_C; // C
13: x_c3 = seg_D; // D
14: x_c3 = seg_E; // E
15: x_c3 = seg_F; // F
default: x_c3 = seg_off; // 不显
endcase
/**************************************************/
case(x_b4) //千位
0: x_c4 = seg_0; // 0
1: x_c4 = seg_1; // 1
2: x_c4 = seg_2; // 2
3: x_c4 = seg_3; // 3
4: x_c4 = seg_4; // 4
5: x_c4 = seg_5; // 5
6: x_c4 = seg_6; // 6
7: x_c4 = seg_7; // 7
8: x_c4 = seg_8; // 8
9: x_c4 = seg_9; // 9
10: x_c4 = seg_A; // A
11: x_c4 = seg_B; // B
12: x_c4 = seg_C; // C
13: x_c4 = seg_D; // D
14: x_c4 = seg_E; // E
15: x_c4 = seg_F; // F
default: x_c4 = seg_off; // 不显
endcase
/**************************************************/
end
end
end
/**************************************************/
endmodule
/**************************************************/