📄 display7219.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 + -