LCD 화면에 문자를 인쇄하는 것과 관련된 질문이 있습니다.LCD에 문자 인쇄 - Verilog HDL
저는 Altera DE1-SoC 5CSEMA5F31C6N과 LT24 Terasic LCD를 사용하고 있습니다.
LCD에 문자를 연속으로 인쇄하는 것과 관련된 질문이 있습니다.
화면의 왼쪽 상단 모서리에서 (0,0) 시작하여 화면에서 래스터의 x 및 y 카운터를 사용하고 있습니다. 증가는 0으로 X를 재설정 Y를 증가 다음 화면이 끝날 때까지 다시 X를 계산 계속 행의 마지막에 모든 방법을 X, 한 번 끝에 도달
내가 문자 값 (8x8 픽셀)을 인쇄 할 배열 만들기
긴 배열은 모든 문자에 대해 '각 픽셀 행'을 연결 한 다음 카운터가 화면 전체에 걸쳐 표시되는 동안 각 문자의 픽셀이 lcd로 인쇄됩니다.
예 : row0 - 모든 문자에 대해 픽셀의 첫 번째 행을 인쇄합니다. row1 - 모든 문자에 대해 픽셀의 두 번째 행을 인쇄합니다.
제가 2 개 문자를 인쇄하려고 할 때하지만, 인쇄되는 문자의 순서 [원점에서 (0,0)] 반전
예컨대 만약 내가 '나는'다음 'M'을 인쇄하고 싶습니다. 나는 실제로 'M'과 'I'를 순서대로 얻는다.
3자를 인쇄하려고하면 아무 문자도 표시되지 않습니다.
정말 카운터 값이 현재의 문자 비트를 테스트하는 데 사용하고 픽셀
어떤 도움을 주시면 감사하겠습니다을 그리는대로이, 경우 이유를 이해하기 위해 고군분투하고있다.
나는 기본을 Verilog의 이해를 가지고 있지만,
감사합니다 C 프로그래밍,
코드 조각은 다음과 같습니다 편안.
////////////////////////////// code ////////////////////////////////////////////
reg [0] totalCharData [23:0]; // pixel row0
reg [1] totalCharData [23:0]; // pixel row1
reg [2] totalCharData [23:0]; // pixel row2
reg [3] totalCharData [23:0]; // pixel row3
reg [4] totalCharData [23:0]; //
reg [5] totalCharData [23:0]; //
reg [6] totalCharData [23:0]; //
reg [7] totalCharData [23:0]; // pixel row 7
// character ‘I'
totalCharData[7][7:0] = 8'b11111111;
totalCharData[6][7:0] = 8'b11111111;
totalCharData[5][7:0] = 8'b00111100;
totalCharData[4][7:0] = 8'b00111100;
totalCharData[3][7:0] = 8'b00111100;
totalCharData[2][7:0] = 8'b00111100;
totalCharData[1][7:0] = 8'b11111111;
totalCharData[0][7:0] = 8'b11111111;
// character ‘M'
totalCharData[7][15:8] = 8'b11100111;
totalCharData[6][15:8] = 8'b11101111;
totalCharData[5][15:8] = 8'b11111111;
totalCharData[4][15:8] = 8'b11111111;
totalCharData[3][15:8] = 8'b11010011;
totalCharData[2][15:8] = 8'b11000011;
totalCharData[1][15:8] = 8'b11000011;
totalCharData[0][15:8] = 8'b11000011;
// character ‘E'
totalCharData[7][23:16] = 8'b11111111;
totalCharData[6][23:16] = 8'b11111111;
totalCharData[5][23:16] = 8'b11100000;
totalCharData[4][23:16] = 8'b11111111;
totalCharData[3][23:16] = 8'b11111111;
totalCharData[2][23:16] = 8'b11100000;
totalCharData[1][23:16] = 8'b11111111;
totalCharData[0][23:16] = 8’b11111111;
// X Counter
always @ (posedge clock or posedge resetApp) begin
if (resetApp) begin
xAddr <= 8'b0;
end else if (pixelReady) begin
if (xAddr < (WIDTH-1)) begin
xAddr <= xAddr + 8'd1;
end else begin
xAddr <= 8'b0;
end
end
end
// Y Counter
always @ (posedge clock or posedge resetApp) begin
if (resetApp) begin
yAddr <= 9'b0;
end else if (pixelReady && (xAddr == (WIDTH-1))) begin
if (yAddr < (HEIGHT-1)) begin
yAddr <= yAddr + 9'd1;
end else begin
yAddr <= 9'b0;
end
end
end
// draw characters to the lcd
always @ (posedge clock or posedge resetApp) begin
if (resetApp) begin
pixelData[15:0] <= 16'h0000; ; // wipe the full screen with background
end else begin // whilst bitton held, make blue
if ((xAddr>=0) && (xAddr<24) && (yAddr>=0) && (yAddr<8))begin // draw complete row of pixels for all the characters in line
if ((totalCharData[yAddr][xAddr] == 1'b1))begin // test the current bit using the counters
pixelData[15:0] <= 16'hFFE0; // yellow - draw pixel if the current bit is 1 as defined
end
else begin
pixelData[15:0] <= 16'h0000;
end // else
end else begin
pixelData[15:0] <= 16'h0000; // black screen
end
end
end