No hay mejor manera de explicar que mediante un ejemplo, cierto???
#include<18F452.h>
#fuses XT
#use delay(clock=4M)
#include "LCD.C"
#define SYMBOL_1 0
#define SYMBOL_2 1
#define SYMBOL_3 2
#define S_RIGHT 3
#define S_LEFT 4
#define S_UP 5
#define S_DOWN 6
char data_symbol_1[7] = {0b11111, 0b10001, 0b1010, 0b100, 0b1110, 0b11111, 0b11111};
char data_symbol_2[7] = {0x0e, 0x07, 0x03, 0x01, 0x03, 0x07, 0x0e};
char data_symbol_3[7] = {0x00, 0x0f, 0x1f, 0x01, 0x1f, 0x0f, 0x00};
char data_symbol_right[7] = {0x08, 0x0c, 0x0e, 0x0f, 0x0e, 0x0c, 0x08};
char data_symbol_left[7] = {0x02, 0x06, 0x0e, 0x1e, 0x0e, 0x06, 0x02};
char data_symbol_up[7] = {0x00, 0x04, 0x04, 0x0e, 0x0e, 0x0e, 0x1f};
char data_symbol_down[7] = {0x1f, 0x0e, 0x0e, 0x0e, 0x04, 0x04, 0x00};
void simbolos (void)
{
int8 i;
lcd_init();
lcd_command(LCD_OFF);
lcd_putc(SYMBOL_1);
lcd_command(CGRAM);
for(i=0;i<=7;i++)
{ lcd_send_byte(1, data_symbol_1[i]); }
for(i=0;i<=7;i++)
{ lcd_send_byte(1, data_symbol_2[i]); }
for(i=0;i<=7;i++)
{ lcd_send_byte(1, data_symbol_3[i]); }
for(i=0;i<=7;i++)
{ lcd_send_byte(1, data_symbol_right[i]); }
for(i=0;i<=7;i++)
{ lcd_send_byte(1, data_symbol_left[i]); }
for(i=0;i<=7;i++)
{ lcd_send_byte(1, data_symbol_up[i]); }
for(i=0;i<=7;i++)
{ lcd_send_byte(1, data_symbol_down[i]); }
}
void main (void)
{
simbolos();
lcd_init();
while(true)
{
lcd_gotoxy(1,1);
lcd_putc("W/c");
lcd_putc(SYMBOL_1);
lcd_putc(SYMBOL_2);
lcd_putc(SYMBOL_3);
lcd_putc(S_RIGHT);
lcd_putc(S_LEFT);
lcd_putc(S_UP);
lcd_putc(S_DOWN);
}
}
A lo de enviar los comandos de uno en uno, me refiero a que no se puede hacer lo siguiente: lcd_command(LCD_OFF | CURSOR_ON );, si no que toca enviar primero lcd_command(LCD_OFF) y luego lcd_command(CURSOR_ON).