Diferencia entre revisiones de «LCD»

De ArduWiki
Saltar a: navegación, buscar
(Descripción)
(Referencias externas)
 
(No se muestran 20 ediciones intermedias del mismo usuario)
Línea 2: Línea 2:
 
La librería [https://github.com/arduino-libraries/LiquidCrystal 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.
 
La librería [https://github.com/arduino-libraries/LiquidCrystal 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 [https://github.com/marcoschwartz/LiquidCrystal_I2C 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.
+
Mucho mas eficiente es la libreria [https://github.com/marcoschwartz/LiquidCrystal_I2C LiquidCrystal_I2C] de Frank de Brabander (NOV-2015), que permite a un Arduino controlar un LCD via el bus [[Wire|I2C]], pero tendras que usar un adaptador.
  
 
== Placas aplicables ==
 
== Placas aplicables ==
Línea 9: Línea 9:
 
== Sintaxis ==
 
== Sintaxis ==
 
<pre>
 
<pre>
 +
#include <LiquidCrystal.h>
 +
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
 +
LiquidCrystal lcd(rs, rw, en, d4, d5, d6, d7);
 +
LiquidCrystal lcd(rs, en, d0, d1, d2, d3, d4, d5, d6, d7);
 
</pre>
 
</pre>
 +
 +
== Parametros ==
 +
;rs:el número del pin Arduino que está conectado al pin RS en la pantalla LCD.
 +
;rw:el número del pin Arduino que está conectado al pin RW en la pantalla LCD (opcional). Si no se usa conectar a GND.
 +
;en:el número del pin Arduino que está conectado al pin habilitar en la pantalla LCD.
 +
;dx:el número del pin Arduino que está conectado a los pines de datos en la pantalla LCD.
  
 
== Métodos ==
 
== Métodos ==
 +
{| class="wikitable"
 +
|-
 +
! Metodos !! Descripcion
 +
|-
 +
| begin(columnas, filas) || Inicializa la interfaz a la pantalla LCD y especifica las dimensiones de LCD.
 +
|-
 +
| setCursos(columna, fila) || Va a cierta posicion del LCD.
 +
|-
 +
| clear() || Limpia el LCD. <incluye un home().
 +
|-
 +
| home() || Va a la posicion 0,0 (arriba a la izquierda)
 +
|-
 +
| print(dato [, base]) || Imprime un dato tipo [[char]], [[byte]], [[int]], [[long]]. Retorna el numero de bytes escritos.
 +
|-
 +
| write(datos) || Escribe datos tipo [[string]] o [[String]] 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() || Esconde cursos LCD.
 +
|-
 +
| blink() || Hace parpadear al cursor.
 +
|-
 +
| noBlink() || Deja fijo el cursor.
 +
|-
 +
| display() || Vuelve a mostrar el contenido del LCD.
 +
|-
 +
| noDisplay() || Esconde el contenido del LDC.
 +
|-
 +
| autoscroll() || Activa el auto scroll.
 +
|-
 +
| noAutoscroll() || Desactiva el auto scroll.
 +
|-
 +
| scrollDisplayLeft() || Desplaza toda la pantalla una columna a la izquierda.
 +
|-
 +
| scrollDisplayRight() || Desplaza toda la pantalla una columna a la derecha.
 +
|-
 +
| leftToRight() || Establece sentido de escritura de izquierda a derecha.
 +
|-
 +
| rightToLeft() || Establece sentido de escritura de derecha a izquierda.
 +
|-
 +
| createChar() || Crea un caracter personalizado.
 +
|-
 +
| setRowOffsets() || Configura las direcciones de memoria donde se almacenan los caracteres del LCD.
 +
|}
  
 
== Comentarios ==
 
== Comentarios ==
Línea 55: Línea 109:
 
== Ejemplo 2 ==
 
== Ejemplo 2 ==
 
<syntaxhighlight lang="c++">
 
<syntaxhighlight lang="c++">
 +
#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
 +
}
 +
 +
</syntaxhighlight>
 +
 +
== Ejemplo 3 ==
 +
En este ejemplo creamos 5 caracteres especiales y los intercambiamos a velocidades distintas.
 +
 +
<syntaxhighlight lang="c++">
 +
#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;
 +
  }
 +
}
 +
</syntaxhighlight>
 +
 +
== Ejemplo 4 ==
 +
Recibimos un texto desde consola y lo escribimos en el LCD.
 +
 +
<syntaxhighlight lang="c++">
 +
#include <LiquidCrystal.h>
 +
LiquidCrystal lcd(7, 6, 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);
 +
      }
 +
    }
 +
  }
 +
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Línea 63: Línea 267:
 
* [https://www.arduinolibraries.info/libraries All Libraries]
 
* [https://www.arduinolibraries.info/libraries All Libraries]
 
* [https://www.arduino.cc/en/Reference/LiquidCrystal LiquidCrystal]
 
* [https://www.arduino.cc/en/Reference/LiquidCrystal LiquidCrystal]
 +
* [http://diymakers.es/aprender-usar-un-display-lcd/ Aprender a usar un display LCD] - Diy Makers
 +
* [https://eldesvandejose.com/2016/04/02/la-libreria-liquidcrystal/ La libreria LiquidCrystal] - El desvan de José
 +
* [https://www.pjrc.com/teensy/td_libs_LiquidCrystal.html Liquid Crystal Library] - PJRC
  
 
[[Category:Librerias]]
 
[[Category:Librerias]]

Revisión actual del 16:29 4 jul 2019

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);
LiquidCrystal lcd(rs, rw, en, d4, d5, d6, d7);
LiquidCrystal lcd(rs, en, d0, d1, d2, d3, d4, d5, d6, d7);

Parametros

rs
el número del pin Arduino que está conectado al pin RS en la pantalla LCD.
rw
el número del pin Arduino que está conectado al pin RW en la pantalla LCD (opcional). Si no se usa conectar a GND.
en
el número del pin Arduino que está conectado al pin habilitar en la pantalla LCD.
dx
el número del pin Arduino que está conectado a los pines de datos en la pantalla LCD.

Métodos

Metodos Descripcion
begin(columnas, filas) Inicializa la interfaz a la pantalla LCD y especifica las dimensiones de LCD.
setCursos(columna, fila) Va a cierta posicion del LCD.
clear() Limpia el LCD. <incluye un home().
home() Va a la posicion 0,0 (arriba a la izquierda)
print(dato [, base]) Imprime un dato tipo char, byte, int, long. Retorna el numero de bytes escritos.
write(datos) Escribe datos tipo string o String 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() Esconde cursos LCD.
blink() Hace parpadear al cursor.
noBlink() Deja fijo el cursor.
display() Vuelve a mostrar el contenido del LCD.
noDisplay() Esconde el contenido del LDC.
autoscroll() Activa el auto scroll.
noAutoscroll() Desactiva el auto scroll.
scrollDisplayLeft() Desplaza toda la pantalla una columna a la izquierda.
scrollDisplayRight() Desplaza toda la pantalla una columna a la derecha.
leftToRight() Establece sentido de escritura de izquierda a derecha.
rightToLeft() Establece sentido de escritura de derecha a izquierda.
createChar() Crea un caracter personalizado.
setRowOffsets() Configura las direcciones de memoria donde se almacenan los caracteres del LCD.

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(7, 6, 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