LCD

De ArduWiki
Revisión del 22:02 13 may 2019 de Kike GL (Discusión | contribuciones) (Ejemplo 4)

Saltar a: navegación, buscar

Descripción

La librería LiquidCrystal de Adafruid (AGO-2017), permite a un Arduino controlar un LCD (HD44780 y compatibles) via 4 u 8 bits de datos mas ademas de RS y Enable. Opcionalmente puedes usar la linea RW.

Mucho mas eficiente es la libreria LiquidCrystal_I2C de Frank de Brabander (NOV-2015), que permite a un Arduino controlar un LCD via el bus I2C, pero tendras que usar un adaptador.

Placas aplicables

Todas

Sintaxis

#include <LiquidCrystal.h>
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

Métodos

Metodos Descripcion
begin(columnas, filas) Inicializa la interfaz a la pantalla LCD y especifica las dimensiones de LCD.
setCursos()
clear()
home()
print(dato [, base]) Imprime un dato tipo char, byte, int, long o String. Retorna el numero de bytes escritos.
write(datos) Escribe datos en LCD. Retorna el numero de bytes escritos.
cursor() Muestre el cursor LCD: un guión bajo (línea) en la posición en la que se escribirá el siguiente carácter.
noCursor()
blink()
noBlink()
autoscroll()
noAutoscroll()
leftToRight()
rightToLeft()
scrollDisplayLeft()
scrollDisplayRight()
createChar()
setRowOffsetsr()

Comentarios

Advertencias

Ejemplo 1

Ejemplo de LCD con manejo directo de 4 bits.

/*
 The circuit:
 * LCD RS pin to digital pin 12
 * LCD R/W pin to ground
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD VSS pin to ground
 * LCD VCC pin to 5V
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
*/

#include <LiquidCrystal.h>

const int rs=12, en=11, d4=5, d5=4, d6=3, d7=2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  lcd.begin(16, 2);      //Columnas, filas
  lcd.print("Hola mundo...");
}

void loop() {
  lcd.setCursor(0, 1);   //Poner cursor en columna 0, fila 1
  lcd.print(millis()/1000);
}

Ejemplo 2

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  lcd.begin(16, 2);      //Columnas, filas
}

void loop() {
  lcd.setCursor(0, 0);
  for (byte i=0; i<10; i++) {
    lcd.print(i);
    delay(500);
  }
  lcd.setCursor(16, 1);
  lcd.autoscroll();      //Prende scrolling
  for (byte i=0; i<10; i++) {
    lcd.print(i);
    delay(500);
  }
  lcd.noAutoscroll();   //Apaga scrolling
  lcd.clear();          //Limpia LCD
}

Ejemplo 3

En este ejemplo creamos 5 caracteres especiales y los intercambiamos a velocidades distintas.

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
bool a,b;

byte heart[8] = {
  0b00000,
  0b01010,
  0b11111,
  0b11111,
  0b11111,
  0b01110,
  0b00100,
  0b00000
};

byte smiley[8] = {
  0b00000,
  0b00000,
  0b01010,
  0b00000,
  0b00000,
  0b10001,
  0b01110,
  0b00000
};

byte frownie[8] = {
  0b00000,
  0b00000,
  0b01010,
  0b00000,
  0b00000,
  0b00000,
  0b01110,
  0b10001
};

byte armsDown[8] = {
  0b00100,
  0b01010,
  0b00100,
  0b00100,
  0b01110,
  0b10101,
  0b00100,
  0b01010
};

byte armsUp[8] = {
  0b00100,
  0b01010,
  0b00100,
  0b10101,
  0b01110,
  0b00100,
  0b00100,
  0b01010
};

void setup() {
  lcd.begin(16, 2);
  lcd.createChar(0, heart);
  lcd.createChar(1, smiley);
  lcd.createChar(2, frownie);
  lcd.createChar(3, armsDown);
  lcd.createChar(4, armsUp);
  lcd.setCursor(0, 0);
  lcd.print("I ");
  lcd.write(byte(0));     //heart
  lcd.print(" Arduino! ");
}

void loop() {
  if (millis()%500 < 5){
     lcd.setCursor(13, 0);
     if (a){
        lcd.write(1);    //smiley
     }else{
        lcd.write(2);    //frownie
     }
     a = !a;
  }
  if (millis()%200 < 5){
     lcd.setCursor(4, 1);
     if (b){
        lcd.write(3);    //armsDown
     }else{
        lcd.write(4);    //armsUp
     }
     b = !b;
  }
}

Ejemplo 4

Recibimos un texto desde consola y lo escribimos en el LCD.

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
   Serial.begin(9600);
   lcd.begin(16, 2);
}

void loop() {
  if (Serial.available()) {
    delay(100);
    lcd.clear();
    byte n = 0;
    while (Serial.available()) {
       lcd.write(Serial.read());
       delay(20);
       n++;
       if (n  16){  //Igual
          lcd.setCursor(0,1);
       }
    }
  }
}

Vea también


Referencias externas