目前只是实现了4位分别显示0~9的功能的7位数码管,后期有添加内容还会有删改。
就不用提数码管的原理了(像什么共阳极,共阴极之类的),我会把每一步都解析标注出来。
首先是实现4个数码管显示相同数字。
module LED
(
input [3:0]i_num, //输入4位2进制的数
output reg [6:0] o_led_num //7位分别对应7位数码管的每个灯泡
);
always @ *
begin
case(i_num) //输入情况不同对应不同的方案
4'h0:o_led_num = 7'b000_0001;
//o_led_num 的7位分别代表了每个灯泡的亮灭,由于用的共阳极的数码管,所以0为亮
4'h1:o_led_num = 7'b100_1111;
4'h2:o_led_num = 7'b001_0010;
4'h3:o_led_num = 7'b000_0110;
4'h4:o_led_num = 7'b100_1100;
4'h5:o_led_num = 7'b010_0100;
4'h6:o_led_num = 7'b010_0100;
4'h7:o_led_num = 7'b000_1111;
4'h8:o_led_num = 7'b000_0000;
4'h9:o_led_num = 7'b000_1100;
default:
o_led_num = 7'b111_1111; //若值不在0~9之间则全部熄灭
endcase
end
endmodule
由于没有具体选择4个数码管的哪一个所以4个都会显示同样的值。文章来源:https://www.toymoban.com/news/detail-542080.html
接下来是想实现 4 个数码管显示不同的内容,就要利用人眼的视觉暂留,对 4 个 7 段数码管进行分时复用。当数码管的刷新频率高于人眼的视觉暂留时,人眼就无法察觉数码管的信息改变。文章来源地址https://www.toymoban.com/news/detail-542080.html
`timescale 1ns / 1ps //仿真时间的定义即在仿真中用#100表示延迟100ns。1ps表示时间精度
module LED
(
input clk, //使用时钟信号,频率为50MHz
input [3:0]i_num_1, //这里分别定义了想要输入的4个数
input [3:0]i_num_2,
input [3:0]i_num_3,
input [3:0]i_num_4,
output reg[3:0] an, //这里是使能信号,即选择是哪个数码管显示
output reg [6:0] o_led_num //7位对应一个数码管的七个灯泡
);
reg[17:0] regN; //结合regN用途一起看
reg[3:0] i_num; //用来储存4个输入数中需要显示的那一个
always @(posedge clk)
regN = regN+1; //clk每到上升沿regN就会+1 //再结合后面看
always @(regN[17:16])
//clk为18位,这里取第17,18位,即1-16位是用于计时,所以时钟需要跳2的16次方
(是一个很短且对于视觉残留和板子频率有益的时间)显示的数码管才更改,
进位到17~18位就用于确定哪个数码管
begin
case (regN[17:16])
2'b00:begin
an=4'b1110;
i_num=i_num_1;
end
2'b01:begin
an=4'b1101;
i_num=i_num_2;
end
2'b10:begin
an=4'b1011;
i_num=i_num_3;
end
2'b11:begin
an=4'b0111;
i_num=i_num_4;
end
endcase
end
always @ * //控制7个数码管里灯泡的亮灭
begin
case(i_num)
4'h0:o_led_num = 7'b000_0001;
4'h1:o_led_num = 7'b100_1111;
4'h2:o_led_num = 7'b001_0010;
4'h3:o_led_num = 7'b000_0110;
4'h4:o_led_num = 7'b100_1100;
4'h5:o_led_num = 7'b010_0100;
4'h6:o_led_num = 7'b010_0100;
4'h7:o_led_num = 7'b000_1111;
4'h8:o_led_num = 7'b000_0000;
4'h9:o_led_num = 7'b000_1100;
default:
o_led_num = 7'b111_1111;
endcase
end
endmodule
到了这里,关于Vivado 实现4个7位数码管显示数字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!