Conectar um display de LCD HD44780 16×2 a um Arduíno e enviar códigos.
Tarefas:
Montar o circuito.
Executar o programa
Informações sobre o display LCD HD44780 16X2:
O HD44780 é um controlador de LCD alfanumérico desenvolvido pela Hitachi. Ele é amplamente usado em displays de 1 a 4 linhas, com 8 a 40 colunas por linha (o mais comum é esse que vamos utilizar de 16×2, com 16 caracteres por linha e 2 linhas).
Ele não exibe gráficos, apenas caracteres ASCII (e alguns personalizados). ASCII (sigla para American Standard Code for Information Interchange) é um padrão de codificação de caracteres usado para representar letras, números, símbolos e sinais de controle usando 8 bits.
Para que apareça, por exemplo “A” no display, o Arduino deve enviar o código do “A” em ASCII, que é “01000001” ou 65 em decimal. Esses valores são enviados pelos 4 pinos de comunicação 11 a 14 do display (data 4 a data 7). Os oito bits são enviados em duas etapas de 4 bits.
Existe uma biblioteca que facilita bastante a utilização! A função “lcd.print” faz praticamente tudo.
Além dos pinos de alimentação e massa, o pino 4 RS também é importante. Ele define se será enviado um caractere ou um comando ao LCD. No caso, “lcd.print” envia um caractere enquanto “lcd.setcursor”
Circuito:
Programa 1 – LCD Básico:
1
2
3
4
5
6
7
8
9
10
11
12
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);
voidsetup(){
lcd.begin(16,2);// Inicia o display de LCD com 16 caracteres e 2 linhas
lcd.print("CEFET -> Arduino");// Envia "CEFET -> ARDUINO" para a primeira linha
}
voidloop(){
lcd.setCursor(0,1);// Seleciona para escrever no primeiro caractere (0) da segunda linha (1)
lcd.print(millis()/1000);//Escreve na segunda linha o número de segundos do arduino ligado
}
Desafio: Tente usar a função millis() para fazer um relógio!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);
unsignedlongtempo;
intsegundo=0;
intminuto=44;
inthora=17;
intajuste=0;
voidsetup(){
lcd.begin(16,2);
lcd.print("RELOGIO");
tempo=millis();
Serial.begin(9600);
}
voidloop(){
lcd.setCursor(0,1);
//SE MILLIS - TEMPO > 1000 passou um segundo
if(millis()-tempo>1000){
segundo=segundo+1;
tempo=millis();
}
if(segundo>59){//Se passou mais que 59 segundos, passou um minuto
minuto=minuto+1;
segundo=0;
}
if(minuto>59){//Se passou mais que 59 minutos, passou uma hora
hora=hora+1;
minuto=0;
}
if(hora>23){/Se passou mais que23horas,virouodia
hora=0;
}
// Adiciona um "0" se a hora tiver menos de 1 caractere
if(hora<10){
lcd.print("0");
}
lcd.print(hora);
lcd.print(":");
// Adiciona um "0" se o minuto tiver menos de 1 caractere
if(minuto<10){
lcd.print("0");
}
lcd.print(minuto);
lcd.print(":");
// Adiciona um "0" se o segundo tiver menos de 1 caractere