



Os Displays LCD são muito úteis para quem pretende usar um Micro-controlador para desenvolver uma aplicação. Eles permitem uma interface visual entre homem e máquina (HMI em inglês), barata e simples de usar. No LCD você pode enviar textos, números, símbolos e até imagens que podem dar uma indicação do que o Micro-controlador esta fazendo, dos dados que podem estar sendo coletados ou transmitidos, etc. Para quem não sabe, LCD significa em inglês - Liquid Crystal Display - ou mostrador de cristal liquido. Uma grande vantagem dos LCDs é que não precisam de muita energia para funcionar. Lembram-se dos relógios digitais de LCD, há décadas atrás ? As pilhas podiam durar meses e até um ano. Mas os LCDs que estamos falando, tem LEDs atrás para que possam ser usados em ambientes com pouca ou nenhuma luz. Esses LEDs é que gastam um pouco mais. Mas se fosse usar somente os LCDs, o consumo de energia seria baixíssimo !
Os monitores dos primeiros Laptops da década de 1980 usavam a mesma tecnologia LCD ! E sem iluminação de LED.

Quando eles foram criados décadas atrás, eles não eram luminosos. Eles simplesmente deixavam passar a luz ou então a obstruíam, deixando sombras. O mostrador é formado de duas placas acrílicas transparentes. Entre essas placas está o cristal líquido. Esse cristal líquido altera o seu comportamento cristalino, dependendo da tensão aplicada entre ele. Os displays, como dá para ver, são formados de vários pontinhos. Cada pontinho pode ficar claro ou escuro, dependendo da polarização da eletricidade de cada um. Sob as placas transparentes, existem uma matriz invisível de conexões que controlam todos esses pontinhos. Quem faz isso, são os chips controladores que ficam por trás do display.
O chip controlador de LCD mais usado atualmente no mundo inteiro, é um que foi desenvolvido pela Hitachi - o HD44780, há muito tempo atrás. Ele é tão bom, que se tornou um padrão. Se quiser aprofundar os seus estudos sobre LCDs, aprendendo à usar todos os inúmeros recursos disponíveis, recomendo a leitura do datasheet.
Datasheet HD44780
A comunicação entre o Controlador de LCD e o Micro-controlador (por exemplo, Arduino), pode ser paralela ( 4 ou 8 bits) ou serial (I2C). Para um número limitado de portas digitais, é recomendável o uso da interface I2C.
Como curiosidade, saiba que esse chip possui uma ROM interna onde já estão gravados alguns caracteres e símbolos. E para que você possa gerar seus próprios símbolos, existe uma memória RAM interna. Muito versátil !
Veja uma parte da Tabela de caracteres gravada internamente - cada caracter é formado por uma matriz de 5 x 8 pontos:


Mais um detalhe muito importante ! Para que a interface I2C funcione adequadamente, resistores de PULL UP devem ser usados nas duas linhas (SCL e SDA) . Esses resistores conectam essas linhas ao VCC . Nesse módulo I2C, esses resistores de PULL UP (4,7 K ohms) já existem. Portanto não acrescente mais resistores na interface.
Esse é o diagrama Fritzing do circuito para teste do Display LCD 16x2 com Arduino Nano :
E esse é o diagrama eletrônico do mesmo circuito - Arduino Nano com LCD 16x2:
Veja que o pino 5 (R/W) esta aterrado (nível zero) . Portanto o Display só pode receber dados (Write).
Para posicionar os caracteres no Display, existe esse endereçamento das linhas e das colunas. Veja que a contagem começa do 0 e não do 1 (Linha 0, coluna 0) ! As diferenças de um Display de 16x2 para um Display 20x4 são a quantidade de caracteres e o endereçamento. Todos os comandos são idênticos para os dois tipos de Displays.
Nessa montagem , usaremos a Biblioteca Liquid Crystal, portanto ela deve ser instalada usando o procedimento abaixo.
/* Programa de Teste de LCD
Blog Eletrogate - https://blog.eletrogate.com/guia-completo-do-display-lcd-arduino/
Arduino Nano - LCD 16/2 azul - IDE 1.8.5
Gustavo Murta 11/abril/2018
Biblioteca LiquidCrystal https://github.com/arduino-libraries/LiquidCrystal
*/
#include <LiquidCrystal.h> // usando a biblioteca LiquidCrystal
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7; // definicao dos pinos do Display
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // configurando os pinos
int thisChar = 0 ;
void setup()
{
lcd.begin(16, 2); // definindo o LCD - 16 colunas e 2 linhas
}
void Hello () // imprimindo mensagem
{
lcd.setCursor(0, 0); // selecionando coluna 0 e linha 0
lcd.print("Blog ELETROGATE"); // print da mensagem
lcd.setCursor(2, 1); // selecionando coluna 2 e linha 1
lcd.print("Guia do LCD"); // Print da mensagem
delay(1000); // atraso de 1 segundo
}
void Flash ()
{
lcd.noDisplay(); // desliga display
delay(1000); // atraso de meio segundo
lcd.display(); // liga display
delay(1000); // atraso de meio segundo
lcd.clear(); // limpa a tela
delay(1000); // atraso de 1 segundo
}
void Blink () // teste do cursor
{
lcd.noBlink(); // apaga cursor
delay(1000); // atraso de 1 segundo
lcd.blink(); // acende cursor
delay(1000); // atraso de 1 segundo
lcd.clear(); // limpa a tela
delay(1000); // atraso de 1 segundo
}
void AutoScroll () // teste de rolagem de mensagem
{
lcd.setCursor(16, 1); // selecionando coluna 16 e linha 1
lcd.autoscroll(); // configura rolagem automatica de mensagem
for (thisChar = 0; thisChar < 10; thisChar++) // imprime de 0 a 9
{
lcd.print(thisChar); // imprime o numero
delay(350); // atraso de 350 ms
}
lcd.noAutoscroll(); // desliga rolagem autoamtica
lcd.clear(); // limpa a tela
delay(1000); // atraso de 1 segundo
}
void dirText () // teste de direcao de mensagem
{
lcd.clear(); // limpa a tela
lcd.cursor(); // liga o cursor
lcd.setCursor(10, 0); // selecionando coluna 10 e linha 1
for (thisChar = 1; thisChar < 10; thisChar++) // imprime de 1 a 9
{
lcd.rightToLeft(); // imprime da direita para a esquerda
lcd.print(thisChar); // imprime o numero
delay(350); // atraso de 350 ms
}
for (thisChar = 1; thisChar < 10; thisChar++) // imprime de 1 a 9
{
lcd.leftToRight(); // imprime da esquerda para a direita
lcd.print(thisChar); // imprime o numero
delay(350); // atraso de 350 ms
}
lcd.noCursor(); // desliga o cursor
}
void loop()
{
Hello (); // imprimindo mensagem
Flash (); // piscando a mensagem
Blink (); // teste do cursor
AutoScroll (); // teste de rolagem de mensagem
dirText (); // teste de direcao de mensagem
delay(1000); // atraso de 1 segundo
} Mais um recurso bem legal da Biblioteca Liquid Crystal : criar caracteres especiais ! Essa biblioteca tem um método que permite, através do controle dos pontos da matriz 5x8 de cada caracter do LCD, a criação de qualquer símbolo ou caracter especial. Use o Gerador de caracteres do link abaixo, para criar o código do Sketch. Para desenhar, clique nos pontos da matriz 5x8. Copie o código gerado e insira-o no Sketch.
Gerador de símbolos e caracteres especiais
LCD16x2ArduinoCaracter.ino
/* Programa Gerador de Caracter Especial no LCD
Blog Eletrogate - https://blog.eletrogate.com/guia-completo-do-display-lcd-arduino/
Arduino Nano - LCD 16/2 azul - IDE 1.8.5
Gustavo Murta 12/abril/2018
Biblioteca LiquidCrystal https://github.com/arduino-libraries/LiquidCrystal
*/
#include <LiquidCrystal.h> // usando a biblioteca LiquidCrystal
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7; // definicao dos pinos do Display
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // configurando os pinos
byte customChar[8] = // Matriz do caracter especial
{
0b00000,
0b11011,
0b11011,
0b00100,
0b00100,
0b10001,
0b01110,
0b00000
};
void setup() // ate 8 caracteres especiais podem ser criados
{
lcd.clear(); // limpa a tela
lcd.createChar(1, customChar); // criando o caracter especial 1
lcd.begin(16, 2); // definindo o LCD - 16 colunas e 2 linhas
lcd.write((byte)1); // imprimindo o carcter especial 1
}
void loop()
{
}
Encontrei no Youtube, essa aplicação também bem interessante do uso de números grandes no Display LCD 16x2.
RPM Large Font (Ronivaldo)
Biblioteca Big Crystal
A biblioteca Liquid Crystal é bem versátil ! Permite o uso de vários tipos de interface :
Como já citei anteriormente, existe um módulo de Interface I2C especialmente projetado para o uso de Displays LCD. A grande vantagem é o número reduzido de portas usadas no Arduino - somente duas - SCL e SDA. Arduino - Biblioteca Wire / I2C Ligações das Portas I2C (para Arduino) :
Esse é o diagrama Fritzing do circuito para teste do Display LCD 16x2 (Interface I2C) com Arduino Nano :
Esse é o diagrama eletrônico do mesmo circuito – Display LCD 16x2 (Interface I2C) com Arduino Nano:
// I2C Scanner
// Written by Nick Gammon
// Date: 20th April 2011
#include <Wire.h>
void setup()
{
Serial.begin (9600);
Serial.println ();
Serial.println ("I2C scanner. Procurando ...");
byte count = 0;
Wire.begin();
for (byte i = 8; i < 120; i++)
{
Wire.beginTransmission (i);
if (Wire.endTransmission () == 0)
{
Serial.print ("Endereco I2C encontrado: ");
Serial.print (i, DEC);
Serial.print (" (0x");
Serial.print (i, HEX);
Serial.println (")");
count++;
delay (1);
}
}
Serial.print ("Encontrado ");
Serial.print (count, DEC);
Serial.println (" dispositivo(s).");
}
void loop() {}
Essa é a Biblioteca Liquid Crystal I2C usada nessa montagem de teste (instale-a usando o procedimento já citado anteriormente):
Biblioteca Liquid Crystal I2C
Usando a Biblioteca Liquid Crystal I2C, criei o programa para testar as mesmas funções do exemplo anterior (interface 4 bits) :
/* Programa de Teste de LCD - Interface I2C
Blog Eletrogate - https://blog.eletrogate.com/guia-completo-do-display-lcd-arduino/
Arduino Nano - LCD 16/2 azul - IDE 1.8.5
Gustavo Murta 13/abril/2018
Biblioteca LiquidCrystal I2C https://github.com/marcoschwartz/LiquidCrystal_I2C
*/
#include <Wire.h> // usando a biblioteca Wire
#include <LiquidCrystal_I2C.h> // usando a biblioteca LiquidCrystal I2C
LiquidCrystal_I2C lcd(0x3F, 16, 2); // Configura endereço I2C e display com 16 caracteres e 2 linhas
int thisChar = 0 ;
void setup()
{
lcd.init(); // inicializa LCD
lcd.backlight(); // ativa led de backlight
}
void Hello () // imprimindo mensagem
{
lcd.setCursor(0, 0); // selecionando coluna 0 e linha 0
lcd.print("Blog ELETROGATE"); // print da mensagem
lcd.setCursor(2, 1); // selecionando coluna 2 e linha 1
lcd.print("Guia do LCD"); // Print da mensagem
delay(1000); // atraso de 1 segundo
}
void Flash ()
{
lcd.noDisplay(); // desliga display
delay(1000); // atraso de meio segundo
lcd.display(); // liga display
delay(1000); // atraso de meio segundo
lcd.clear(); // limpa a tela
delay(1000); // atraso de 1 segundo
}
void Blink () // teste do cursor
{
lcd.noBlink(); // apaga cursor
delay(1000); // atraso de 1 segundo
lcd.blink(); // acende cursor
delay(1000); // atraso de 1 segundo
lcd.clear(); // limpa a tela
delay(1000); // atraso de 1 segundo
}
void AutoScroll () // teste de rolagem de mensagem
{
lcd.setCursor(16, 1); // selecionando coluna 16 e linha 1
lcd.autoscroll(); // configura rolagem automatica de mensagem
for (thisChar = 0; thisChar < 10; thisChar++) // imprime de 0 a 9
{
lcd.print(thisChar); // imprime o numero
delay(350); // atraso de 350 ms
}
lcd.noAutoscroll(); // desliga rolagem autoamtica
lcd.clear(); // limpa a tela
delay(1000); // atraso de 1 segundo
}
void dirText () // teste de direcao de mensagem
{
lcd.clear(); // limpa a tela
lcd.cursor(); // liga o cursor
lcd.setCursor(10, 0); // selecionando coluna 10 e linha 1
for (thisChar = 1; thisChar < 10; thisChar++) // imprime de 1 a 9
{
lcd.rightToLeft(); // imprime da direita para a esquerda
lcd.print(thisChar); // imprime o numero
delay(350); // atraso de 350 ms
}
for (thisChar = 1; thisChar < 10; thisChar++) // imprime de 1 a 9
{
lcd.leftToRight(); // imprime da esquerda para a direita
lcd.print(thisChar); // imprime o numero
delay(350); // atraso de 350 ms
}
lcd.noCursor(); // desliga o cursor
}
void loop()
{
Hello (); // imprimindo mensagem
Flash (); // piscando a mensagem
Blink (); // teste do cursor
AutoScroll (); // teste de rolagem de mensagem
dirText (); // teste de direcao de mensagem
delay(1000); // atraso de 1 segundo
}
Conheça a Metodologia Eletrogate e ofereça aulas de robótica em sua escola!
|
Os Displays LCD são muito úteis para quem pretende usar um Micro-controlador para desenvolver uma aplicação. Eles permitem uma interface visual entre homem e máquina (HMI em inglês), barata e simples de usar. No LCD você pode enviar textos, números, símbolos e até imagens que podem dar uma indicação do que o Micro-controlador esta fazendo, dos dados que podem estar sendo coletados ou transmitidos, etc.
Encontre tudo na Loja Eletrogate com frete grátis para compras acima de R$ 200