// Definición de pines para la conexión del LCD
int RS = 19; // Pin de selección de registro
int E = 23; // Pin de habilitación
int D4 = 5; // Pin de datos D4
int D5 = 4; // Pin de datos D5
int D6 = 2; // Pin de datos D6
int D7 = 15; // Pin de datos D7
// Configuración inicial en el setup()
void setup() {
// Inicializa los pines del LCD como salidas
pinMode(RS, OUTPUT);
pinMode(E, OUTPUT);
pinMode(D4, OUTPUT);
pinMode(D5, OUTPUT);
pinMode(D6, OUTPUT);
pinMode(D7, OUTPUT);
// Inicializa el LCD en modo 4 bits
lcd_init();
// Muestra "Mecatrónica" en la primera línea
lcd_setCursor(2, 0);
lcd_print("MECATRONICA");
// Muestra "2023" en la segunda línea
lcd_setCursor(6, 1);
lcd_print("2024");
}
// Función de bucle principal
void loop() {
}
// Función para inicializar el LCD en modo 4 bits
void lcd_init() {
lcd_command(0x02); // Inicializa en modo 4 bits
lcd_command(0x28); // Configura el LCD en 2 líneas y 5x8 caracteres
lcd_command(0x0C); // Enciende el LCD sin parpadeo del cursor
lcd_command(0x06); // Desplaza el cursor a la derecha después de escribir
lcd_command(0x01); // Limpia la pantalla
delay(2); // Pequeña espera después de limpiar
}
// Función para enviar comandos al LCD
void lcd_command(byte cmd) {
digitalWrite(RS, LOW); // Modo comando
lcd_write(cmd);
}
// Función para escribir caracteres en el LCD
void lcd_print(const char *str) {
digitalWrite(RS, HIGH); // Modo datos
while (*str) {
lcd_write(*str);
str++;
}
}
// Función privada para enviar datos al LCD
void lcd_write(byte data) {
// Envía los 4 bits superiores
digitalWrite(D4, (data >> 4) & 0x01);
digitalWrite(D5, (data >> 5) & 0x01);
digitalWrite(D6, (data >> 6) & 0x01);
digitalWrite(D7, (data >> 7) & 0x01);
// Habilita el LCD para recibir los datos
digitalWrite(E, HIGH);
delayMicroseconds(1);
digitalWrite(E, LOW);
// Envía los 4 bits inferiores
digitalWrite(D4, (data >> 0) & 0x01);
digitalWrite(D5, (data >> 1) & 0x01);
digitalWrite(D6, (data >> 2) & 0x01);
digitalWrite(D7, (data >> 3) & 0x01);
// Habilita el LCD para recibir los datos
digitalWrite(E, HIGH);
delayMicroseconds(1);
digitalWrite(E, LOW);
delay(2); // Pequeña espera después de escribir
}
// Función para establecer la posición del cursor en el LCD
void lcd_setCursor(byte col, byte row) {
byte offset[] = {0x00, 0x40, 0x14, 0x54};
lcd_command(0x80 | (col + offset[row]));
}