#define RS 12
#define ENABLE 11
#define D4 10
#define D5 9
#define D6 8
#define D7 7
//Localização dos caracteres no display 0x80
// primeira linha de 0x80 a 0x8f
// segunda linha de 0xc0 a 0xcf
//
#define Linha1 0x80
#define Linha2 0xC4
#define LimpaLCD 0x01 //(Clear Display) Limpa o display e posiciona o cursor na posição inicial.
void setup()
{
pinMode(RS, OUTPUT);
pinMode(ENABLE, OUTPUT);
pinMode(D4, OUTPUT);
pinMode(D5, OUTPUT);
pinMode(D6, OUTPUT);
pinMode(D7, OUTPUT);
inicializaLCD();
}
void inicializaLCD(void)
{
digitalWrite(RS,LOW); //modo comando
delay(15);
comandoLCD(0x03); //(Inicialização)
comandoLCD(0x02); //(Modo de 4 bits) Muda o LCD para o modo de 4 bits.
delay(2);
comandoLCD(0x28); // (Função Set) Configura o LCD para o modo de 4 bits, duas linhas e caracteres de 5x7 pontos.
comandoLCD(0x0c); //(Display On/Off Control) Liga o display e desliga o cursor
comandoLCD(0x06); // (Entry Mode Set) Configura o LCD para incrementar automaticamente a posição do cursor após cada caractere.
comandoLCD(LimpaLCD);
delay(20);
}
void textoLCD(const char* texto)
//a função textoLCD, atribui um ponteiro para um char (const char*)
//e itera sobre cada caractere da string, enviando-os individualmente
//para o display LCD.
{
while (*texto) {
digitalWrite(RS, HIGH);
delay(2);
nibleLCD(*texto >> 4); // envia parte mais significativa do byte (nible alto)
nibleLCD(*texto & 0x0f); // envia parte menos significativa do byte (nible baixo)
delay(2);
texto++;
}
}
void comandoLCD(int comando)
{
digitalWrite(RS, LOW);
delay(2);
nibleLCD(comando >> 4); // envia a parte mais significativa deslocando 4 bits
nibleLCD(comando & 0x0f); // envia a parte menos significativa - zerando os bits mais significativos
delay(2);
}
void nibleLCD(int dado) // Envia 4 bits para LCD
{
digitalWrite(D4, dado & 0x01); // envia para a saída o valor do bit 0
digitalWrite(D5, dado & 0x02); // envia para a saída o valor do bit 1
digitalWrite(D6, dado & 0x04); // envia para a saída o valor do bit 2
digitalWrite(D7, dado & 0x08); // envia para a saída o valor do bit 3
digitalWrite(ENABLE, HIGH);
delay(2); // para estabilizar o display
digitalWrite(ENABLE, LOW);
}
void loop()
{
comandoLCD(Linha1);
textoLCD("TESTE");
delay(200);
comandoLCD(Linha2);
textoLCD("ANDERSON");
delay(200);
comandoLCD(LimpaLCD);
delay(500);
}