⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 display7219.v

📁 基于Altera公司系列FPGA(Cyclone EP1C3T144C8)、Verilog HDL、MAX7219数码管显示芯片、4X4矩阵键盘、TDA2822功放芯片及扬声器等实现了《电子线路设计&
💻 V
字号:
//Display7219.v	 	7219显示模块   2006-11-03	version:2.0		作者:田世坤
//输入:
//		
//		
//输出:

module Display7219(ClkIn, Reset, ClkSecond, D7, D6, D5, D4, D3, D2, D1, D0, Dpoint, 
				SCK, SDA, CS);
input ClkIn, ClkSecond, Reset;
input [3:0]D7, D6, D5, D4, D3, D2, D1, D0;
input [7:0] Dpoint;
output SCK, SDA, CS;
reg  SDA, CS;


//wire [15:0] DataSerial;
reg [15:0] DataSerialTemp;

integer i = 204;

assign SCK = ClkIn;

always @ (negedge ClkIn)  //只能用同步
begin
	if(!Reset)
	begin
		SDA <= 1'b0;
		CS <= 1'b1;
		DataSerialTemp <=16'h0000;
		i = 204;
	end
	else
	begin
		if(!ClkSecond)
		begin
			
			if(i == 204)
			begin
				CS <= 1'b1;
				SDA <= 1'b0;
			  DataSerialTemp <= {8'h0c, 8'h01}; 	// 使其7219工作正常模式
			end
			else if(i<204 && i>=188)
			begin
				CS <= 1'b0;
				SDA <= DataSerialTemp[15];
				DataSerialTemp  <= DataSerialTemp << 1;
			end	
			
			else if(i == 187)
			begin
				CS <= 1'b1;
				SDA <= 1'b0;
			  DataSerialTemp <= {8'h0b, 8'h07};  	// 配置scan limit模式,使其8个管子都工作
			end
			else if(i<187 && i>=171)
			begin
				CS <= 1'b0;
				SDA <= DataSerialTemp[15];
				DataSerialTemp  <= DataSerialTemp << 1;
			end	
				 
			else if(i == 170)
			begin
				CS <= 1'b1;
				SDA <= 1'b0;
			  DataSerialTemp <= {8'h0a, 8'h0c};  	// 设置亮度为 1/2 亮
			end
			else if(i<170 && i>=154)
			begin
				CS <= 1'b0;
				SDA <= DataSerialTemp[15];
				DataSerialTemp  <= DataSerialTemp << 1;
			end
			
			else if(i == 153)
			begin
				CS <= 1'b1;
				SDA <= 1'b0;
			  	DataSerialTemp <= {8'h09, 8'hff};  	// 使8个管子都用编码方式
			end
			else if(i<153 && i>=137)
			begin
				CS <= 1'b0;
				SDA <= DataSerialTemp[15];
				DataSerialTemp  <= DataSerialTemp << 1;
			end
			
			else if(i == 136)
			begin
				CS <= 1'b1;
				SDA <= 1'b0;
			  DataSerialTemp <= {8'h08, Dpoint[7], 3'h0, D7};  	// 送入D7
			end
			else if(i<136 && i>=120)
			begin
				CS <= 1'b0;
				SDA <= DataSerialTemp[15];
				DataSerialTemp  <= DataSerialTemp << 1;
			end
			
			else if(i == 119)
			begin
				CS <= 1'b1;
				SDA <= 1'b0;
			  DataSerialTemp <= {8'h07, Dpoint[6], 3'h0, D6};  	// 送入D6
			end
			else if(i<119 && i>=103)
			begin
				CS <= 1'b0;
				SDA <= DataSerialTemp[15];
				DataSerialTemp  <= DataSerialTemp << 1;
			end
			
			else if(i == 102)
			begin
				CS <= 1'b1;
				SDA <= 1'b0;
			  DataSerialTemp <= {8'h06, Dpoint[5], 3'h0, D5};  	//// 送入D5
			end
			else if(i<102 && i>=86)
			begin
				CS <= 1'b0;
				SDA <= DataSerialTemp[15];
				DataSerialTemp  <= DataSerialTemp << 1;
			end
			
			else if(i == 85)
			begin
				CS <= 1'b1;
				SDA <= 1'b0;
			  	DataSerialTemp <= {8'h05, Dpoint[4], 3'h0, D4};  	// 送入D4
			end
			else if(i<85 && i>=69)
			begin
				CS <= 1'b0;
				SDA <= DataSerialTemp[15];
				DataSerialTemp  <= DataSerialTemp << 1;
			end
			
			else if(i == 68)
			begin
				CS <= 1'b1;
				SDA <= 1'b0;
			  	DataSerialTemp <= {8'h04, Dpoint[3], 3'h0, D3};  	// 送入D3
			end
			else if(i<68 && i>=52)
			begin
				CS <= 1'b0;
				SDA <= DataSerialTemp[15];
				DataSerialTemp  <= DataSerialTemp << 1;
			end
			
			else if(i == 51)
			begin
				CS <= 1'b1;
				SDA <= 1'b0;
			  	DataSerialTemp <= {8'h03, Dpoint[2], 3'h0, D2};  	// 送入D2
			end
			else if(i<51 && i>=35)
			begin
				CS <= 1'b0;
				SDA <= DataSerialTemp[15];
				DataSerialTemp  <= DataSerialTemp << 1;
			end
			
			else if(i == 34)
			begin
				CS <= 1'b1;
				SDA <= 1'b0;
			  	DataSerialTemp <= {8'h02, Dpoint[1], 3'h0, D1};  	// 送入D1
			end
			else if(i<34 && i>=18)
			begin
				CS <= 1'b0;
				SDA <= DataSerialTemp[15];
				DataSerialTemp  <= DataSerialTemp << 1;
			end
			
			else if(i == 17)
			begin
				CS <= 1'b1;
				SDA <= 1'b0;
			  	DataSerialTemp <= {8'h01, Dpoint[0], 3'h0, D0};  	//送入D0
			end
			else if(i<17 && i>=1)
			begin
				CS <= 1'b0;
				SDA <= DataSerialTemp[15];
				DataSerialTemp  <= DataSerialTemp << 1;
			end
			
			else if(i == 0)
			begin
				CS <= 1'b1;
				SDA <= 1'b0;
			  	DataSerialTemp <= 16'h0;  	// 最后将DataSerialTemp清零
			  	i = 204;
			end
			///////////////i变化实现串行/////////////
			i = i - 1;
			///////////////////////////////////////
		end
		else
		begin
			CS <= 1'b1;
			SDA <= 1'b0;
			DataSerialTemp <= 16'h0;  	// 最后将DataSerialTemp清零
			i = 204;
		end
	end
end

endmodule

/*
SendData_7219(0x0c,0x01); // 使其7219工作正常模式
SendData_7219(0x0b,0x07); // 配置scan limit模式,使其8个管子都工作
SendData_7219(0x0a,0x00); // 设置亮度为 1/2 亮
SendData_7219(0x09,0xff); // 使8个管子都用编码方式
//SendData_7219(0xff,0xff);
*/	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -