Page 1 of 1

LCD module Custom Characters

Posted: Fri Sep 08, 2023 7:52 am
by Gunplumber
Hi Guys

Can someone help with some sample code to print custom characters?
There is a sample in the Help file, but it's overly complicated and not very clear how it works.
I know you have to write a series of bytes who's bit patterns correspond to the 5x8 pixels, but how is this done exactly? And once this but patterns have been written, can that character then be displayed at any character position? Or does the data bytes need to be written each time you want to display that custom character?

Cheers
Lee

Re: LCD module Custom Characters

Posted: Fri Sep 08, 2023 11:45 am
by Jerry Messina
With the HD44780 you get 8 custom chars.
These chars are displayed when you write character codes 0-7 to the display (DDRAM data), just like you would write ascii text ('1', '2', etc).
Each custom char pattern takes eight bytes of CGRAM data (the dot patterns).

Once you load the CGRAM data with the pattern then whenever you write the char code byte (0-7) to the DDRAM you get the custom pattern displayed at the current char position on the display, so you can write them anywhere on the display just like normal text.

Code: Select all

include "LCD.bas"

// custom char bitmap data patterns...
// programmable characters are available that use codes $00 to $07 
// each char takes eight bytes
const CGRAM_DATA(64) as byte = 
                          ($01,$01,$01,$01,$01,$01,$01,$00,  // char 0
                           $10,$10,$10,$10,$10,$10,$10,$00,  // char 1
                           $14,$14,$14,$14,$14,$14,$14,$00,  // char 2
                           $15,$15,$15,$15,$15,$15,$15,$00,  // char 3
                           $16,$16,$16,$16,$16,$16,$16,$00,  // char 4
                           $17,$17,$17,$17,$17,$17,$17,$00,  // char 5
                           $18,$18,$18,$18,$18,$18,$18,$00,  // char 6
                           $19,$19,$19,$19,$19,$19,$19,$00)  // char 7

LCD.Initialize()

// init custom char CGRAM data
// this will call the overloaded sub 'Private Sub WriteItem(ByRefConst pBitmap() As Byte)' in LCD.bas to load the bit patterns into CGRAM
LCD.Write(CGRAM_DATA)

// after that, just write chars 0 to 7 like you would ascii text
LCD.Write(0)		// char 0
LCD.Write(1)		// char 1
LCD.Write(7)		// char 7
HD44780U custom char map.jpg
HD44780U custom char map.jpg (82.08 KiB) Viewed 1864 times

Re: LCD module Custom Characters

Posted: Sat Sep 09, 2023 4:10 am
by Gunplumber
Hi Jerry

Once again, thanks for the help.. Much appreciated!!
I have the custom characters up and running.. :D

Cheers
Lee