Verilog 实现数码管闪烁显示

a 夏天 提交于 2019-12-18 04:24:40

实现数码管闪烁显示不是简简单单地和一个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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!