Привожу свой пример, может поможет:
Код
//--- Дополнительные символы для знакогенератора LCD модуля --------------
static const unsigned char lcd_charset[]={ 0b00000000, //0
0b00010000,
0b00011000,
0b00011100,
0b00011100,
0b00011000,
0b00010000,
0b00000000,
0b00000000, //1
0b00000001,
0b00000011,
0b00000111,
0b00000111,
0b00000011,
0b00000001,
0b00000000,
0b00000000, //2
0b00011111,
0b00010001,
0b00010001,
0b00010001,
0b00010001,
0b00011111,
0b00000000,
0b00000000, //3
0b00011111,
0b00011111,
0b00011111,
0b00011111,
0b00011111,
0b00011111,
0b00000000,
0b00000000, //4
0b00000000,
0b00000000,
0b11011011,
0b11011011,
0b11011011,
0b11011011,
0b11011011};
#define lcd_udg_data = 5*8
//--- write data to LCD char,RS ---
void lcd_data(unsigned char c, unsigned char reg)
{
DelayMs(4);
TRISD2 = 0;
LCD_RS = reg;
LCD_PORT = (LCD_PORT & 0xF0) | (c >> 4);
LCD_STROBE;
LCD_PORT = (LCD_PORT & 0xF0) | (c & 0x0F);
LCD_STROBE;
}
void lcd_loadchars(void)
{
unsigned char i;
// загрузка дополнительных символов в LCD модуль
for (i=0;i<lcd_udg_data;i++)
{
lcd_data(0x40+i,0);
lcd_data(lcd_charset[i],1);
}
}