包含按键输入并显示模块,输入为四位16进制信号,同步在led数码管显示,如果没有输入,则自动脉冲计数
module led(comscan,clr,k,kon,kc,o,comscanout);
input clr,kon;
input [3:0]k;
input [3:0]kc;
input comscan;
output reg [7:0]o;
reg [31:0]counter;
reg [3:0]show;
reg [7:0]clk0;
reg [15:0]temp;
reg clk;
output reg [2:0]comscanout;
always @(posedge comscan)
begin
comscanout[2:0]=comscanout[2:0]+1'b1;
end
always @ (posedge clk)
begin
if (!clr)
counter[31:0]=counter[31:0]+1'b1;
else
counter[31:0]=1'b0;
end
always @(posedge comscan)
begin
case(comscanout[2:0])
3'b000:begin
if (!kon) show[3:0]=counter[3:0];
else
if(kc[0]==1)
begin
show[3:0]<=k[3:0];
temp[3:0]<=k[3:0];
end
else
show[3:0]<=temp[3:0];
end
3'b001:begin
if (!kon)
show[3:0]<=counter[7:4];
else if (kc[1]==1)
begin
show[3:0]=k[3:0];
temp[7:4]=k[3:0];
end
else
show[3:0]=temp[7:4];
end
3'b010:begin
if (!kon)
show[3:0]<=counter[11:8];
else if (kc[2]==1)
begin
show[3:0]=k[3:0];
temp[11:8]=k[3:0];
end
else
show[3:0]=temp[11:8];
end
3'b011:begin
if (!kon)
show[3:0]<=counter[15:12];
else if (kc[3]==1)
begin
show[3:0]=k[3:0];
temp[15:12]=k[3:0];
end
else
show[3:0]=temp[15:12];
end
3'b100:show[3:0]<=counter[19:16];
3'b101:show[3:0]<=counter[23:20];
3'b110:show[3:0]<=counter[27:24];
3'b111:show[3:0]<=counter[31:28];
endcase
begin
if (clk0[7:0]==8'b1111_1111)
begin
clk=~clk;
clk0[7:0]=8'b0000_0000;
end
else
clk0[7:0]=clk0[7:0]+1'b1;
end
end
always @(1)
begin
case(show[3:0])
4'b0000:o[7:0]<=8'h3f;
4'b0001:o[7:0]<=8'h06;
4'b0010:o[7:0]<=8'h5b;
4'b0011:o[7:0]<=8'h4f;
4'b0100:o[7:0]<=8'h66;
4'b0101:o[7:0]<=8'h6d;
4'b0110:o[7:0]<=8'h7d;
4'b0111:o[7:0]<=8'h07;
4'b1000:o[7:0]<=8'h7f;
4'b1001:o[7:0]<=8'h6f;
4'b1010:o[7:0]<=8'h77;
4'b1011:o[7:0]<=8'h7c;
4'b1100:o[7:0]<=8'h39;
4'b1101:o[7:0]<=8'h5e;
4'b1110:o[7:0]<=8'h79;
4'b1111:o[7:0]<=8'h71;
endcase
end
endmodule
tance 转载标明出处