LCD Display - 8 bits
Este ejemplo muestra la acción más básica que se hace con un display LCD: Mostrar un mensaje de Bienvenida. En nuestro caso disponemos de un display LCD con control de contraste y luz de fondo. Usaremos un potenciómetro para regular el contraste
La mayoria de los displays LCD son controlados por un estandar industrial establecido por Hitachi. De acuerdo con esto hay un grupo de pins dedicados a enviar datos y posiciones de los datos en la pantalla, el usuario puede elegir usar 4 o 8 pines para enviar datos. Además hay tres pines que son necesários para sincronizar la comunicación hacia el display.
En el ejemplo que nos ocupa, usamos casi todos los pins disponibles de la placa de Arduino para controlar el display, pero hemos decidido mostrarlo de esta forma por simplicidad.
Imagen de una placa prototipo con el display y un potenciómetro
[-
/* LCD Hola
* --------
*
*
* En este primer ejemplo se usa un display LCD
* configurado con transferencia de datos sobre 8 bits. El ejemplo
* usa todos los pines de la placa Arduino, pero puede fácilmente
* mostrar datos en el display
*
* Se han utilizado los siguientes pines
*
* - DI, RW, DB0..DB7, Enable (11 en total)
*
* El pinout para displays LCD es standar y se puede encontrar
* la documentación completa en internet
*
* (cleft) 2005 DojoDave for K3
*
*/
int DI = 12;
int RW = 11;
int DB[] = {3, 4, 5, 6, 7, 8, 9, 10};
int Enable = 2;
void LcdCommandWrite(int value) {
// aplica a todos los pins
int i = 0;
for (i=DB[0]; i <= DI; i++) {
digitalWrite(i,value & 01);
value >>= 1;
}
digitalWrite(Enable,LOW);
delayMicroseconds(1);
// envía un pulso para activar
digitalWrite(Enable,HIGH);
delayMicroseconds(1); // pausa 1 ms de acuerdo a la especificación
digitalWrite(Enable,LOW);
delayMicroseconds(1); // pausa 1 ms de acuerdo a la especificación
}
void LcdDataWrite(int value) {
// aplica a todos los pins
int i = 0;
digitalWrite(DI, HIGH);
digitalWrite(RW, LOW);
for (i=DB[0]; i <= DB[7]; i++) {
digitalWrite(i,value & 01);
value >>= 1;
}
digitalWrite(Enable,LOW);
delayMicroseconds(1);
// envía un pulso para activar
digitalWrite(Enable,HIGH);
delayMicroseconds(1);
digitalWrite(Enable,LOW);
delayMicroseconds(1); // pausa 1 ms de acuerdo a la especificación
}
void setup (void) {
int i = 0;
for (i=Enable; i <= DI; i++) {
pinMode(i,OUTPUT);
}
delay(100);
// initiatiza LCD después de una pequeña pausa
// necesário para los controladores LCD
LcdCommandWrite(0x30); // function set:
// 8-bit interface, 1 display lines, 5x7 font
delay(64);
LcdCommandWrite(0x30); // function set:
// 8-bit interface, 1 display lines, 5x7 font
delay(50);
LcdCommandWrite(0x30); // function set:
// 8-bit interface, 1 display lines, 5x7 font
delay(20);
LcdCommandWrite(0x06); // entry mode set:
// increment automatically, no display shift
delay(20);
LcdCommandWrite(0x0E); // display control:
// turn display on, cursor on, no blinking
delay(20);
LcdCommandWrite(0x01); // clear display, set cursor position to zero
delay(100);
LcdCommandWrite(0x80); // display control:
// turn display on, cursor on, no blinking
delay(20);
}
void loop (void) {
LcdCommandWrite(0x02); // set cursor position to zero
delay(10);
// Write the welcome message
LcdDataWrite('H');
LcdDataWrite('o');
LcdDataWrite('l');
LcdDataWrite('a');
LcdDataWrite(' ');
LcdDataWrite('C');
LcdDataWrite('a');
LcdDataWrite('r');
LcdDataWrite('a');
LcdDataWrite('c');
LcdDataWrite('o');
LcdDataWrite('l');
LcdDataWrite('a');
delay(500);
}
-]