实现数码管闪烁显示不是简简单单地和一个2hz的闪烁信号相与,我在这里用了使能端的思想,通过把一个闪烁信号传递到使能端,来使数码管闪烁。
使能端可以做很多事的
module segflitter (clk,segled,cat,enable);
input enable;
input clk;
output reg [7:0] cat;
output reg [6:0] segled;//段选7duan
reg [2:0] pianxuan;//4个
reg [6:0]seg[9:0];
initial //共阴极
begin
seg[0] = 7'b1111110;
seg[1] = 7'b0110000;
seg[2] = 7'b1101101;
seg[3] = 7'b1111001;
seg[4] = 7'b0110011;
seg[5] = 7'b1011011;
seg[6] = 7'b1011111;
seg[7] = 7'b1110000;
seg[8] = 7'b1111111;
seg[9] = 7'b1111011;
end
initial
begin
cat=8'hef;//DISP4
pianxuan=1'b0;
end
always @(posedge clk) //动态扫描显示模块
begin
if(enable==0)
pianxuan<=3'b100;
else
begin
if(pianxuan==3'b011)
pianxuan<=0;
else
pianxuan<=pianxuan+1;
end
end
always @ (posedge clk)//动态显示片选
begin
case (pianxuan)
3'b000:cat<=8'hfe;//DISP0
3'b001:cat<=8'hfd;//DISP1
3'b010:cat<=8'hf7;//DISP3
3'b011:cat<=8'hef;//DISP4
3'b100:cat<=8'hff;//全灭,使能端为0
endcase
end
always@(posedge clk )
begin
case (cat)
8'hfe:segled=seg[4];
8'hfd:segled=seg[5];
8'hf7:segled=seg[6];
8'hef:segled=seg[7];
default:segled=seg[0];
endcase
end
endmodule
下面是top.v 文件用于test
module top(clk,segled,cat);//闪烁显示
input clk;
output [7:0] cat;
output [6:0] segled;
wire flitter;
divide #(.N(500),.WIDTH(9)) d1(.clk(clk),
.rst_n(1),
.clkout(flitter));//2hz闪烁信号
segflitter s1( .clk(clk),
.cat(cat),
.segled(segled),
.enable(flitter));
endmodule
不要忘记在file里面添加devide.v
来源:CSDN
作者:枯叶酿茶
链接:https://blog.csdn.net/Laura_Luo/article/details/103587493