液晶画面に印刷文字に関する質問があります。文字をLCDに印刷する - Verilog HDL
私は、アルテラDE1-SoC 5CSEMA5F31C6NとLT24テラシックLCDを使用しています。
私はLCDの行に文字を印刷することに関して質問があります。
画面の左上隅の(0,0)から始まる、ラスターのxとyカウンターに依存しています。 インクリメントは、私は、行の終わりまでずっとX、一旦終わりに達し、0にXリセット、Yをインクリメントし、画面の端
まで再びXをカウントし続けます(8x8 px)
長い配列は、すべての文字に対して「各行の行」を連結し、カウンタが画面全体でラスタ化されている間に、各文字のピクセルがlcdに印刷されます。
例えば、 row0 - すべての文字に対して1行目のピクセルを印刷します。 row1 - すべての文字に対して2行目のピクセルを印刷します。
iは2つの文字を印刷しようとするが、印刷される文字の順序は、[原点(0,0)から】反転さ
例えばもし私が '私は'次に 'M'を印刷したいです。私は実際に 'M'と '私'の順番で取得します。
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