#define RS 4
#define RW 2
#define EN 15
byte DatosPins[] = { 19,21,22,23};
byte configuracion[]={3,3,3,2,2,8,0,0xe,0,1,0,6};
char Renglon1[] = " No me repruebe";
char Renglon2[] = " Inge ";
// Rutina para convertir y hacer cálculos
void ConversionDatos(byte datos) {
for (byte i = 0; i < 4; i++) {
digitalWrite(DatosPins[i], (datos & (1 << i)) ? HIGH : LOW); // Usando desplazamiento
}
digitalWrite (RW, LOW); // Modo escritura
digitalWrite(EN, HIGH);
digitalWrite(EN, LOW);
delay(3);
}
// Enviar datos en modo de 4 bits
void EnviarComando(byte comando) {
digitalWrite(RS, LOW); // Comando
ConversionDatos(comando >> 4); // Enviar los 4 bits más significativos
ConversionDatos(comando & 0x0F); // Enviar los 4 bits menos significativos
}
void EnviarCaracter(byte caracter) {
digitalWrite(RS, HIGH); // Datos
ConversionDatos(caracter >> 4); // Enviar los 4 bits más significativos
ConversionDatos(caracter & 0x0F); // Enviar los 4 bits menos significativos
}
// Configuración de pines para salida y de enable y RS en salida también
void setup() {
// Configurar pines como salida
for (int i = 0; i <= 3; i++) {
pinMode(DatosPins[i], OUTPUT);
}
pinMode(RS, OUTPUT);
pinMode(RW, OUTPUT);
pinMode(EN, OUTPUT);
// Inicializa el display LCD
digitalWrite(EN, LOW);
digitalWrite(RS, LOW);
delay(15);
EnviarComando(0x28); // Modo de 4 bits
EnviarComando(0x0C); // Enciende el LCD sin cursor
EnviarComando(0x01); // Clear Display
delay(3);
}
void loop() {
// Código principal que se ejecuta repetidamente
delay(15);
for(int i=0;i<=11;i++){
EnviarComando(configuracion[i]);
}
//enviar caracter
for(int i=0;i<=14;i++){
EnviarCaracter(Renglon1[i]);
}
//Instruccion para pasar al renglon de abajo
EnviarComando(0xc0);
//MENSAJE RENGLON DE ABAJO
for(int i=0;i<=13;i++){
EnviarCaracter(Renglon2[i]);
}
while(1){}
}