MCO018703 2025 1 AULA10

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

1 Display de 7 segmentos e Display LCD 16x2

OBJETIVOS

O aluno será capaz de:

  • Saber como utilizar um display de 7 segmentos; e
  • Saber como funciona um display' LCD 16x2.


METODOLOGIA
A aula será expositiva e dialogada, utilizando apresentação de texto base na Internet, onde serão mostrados exemplos executados programas para programação de microcontroladores.


INTRODUÇÃO
Diversos projetos desenvolvidos no Arduino utilizam displays para trazer a informações de processos que estão sendo realizados. Um dos displays mais utilizados é o de 7 segmentos que você pode utilizar para trazer informações que compõem principalmente os dígitos (0..9), mas que pode trazer também algumas letras. Já o display LCD 16×2 é umas das opções para utilizar em projetos de programação e computação em microcontroladores onde podemos apresentar além dos números todos os caracteres de texto em duas linhas com até 16 caracteres por linha.


1.1 Display de 7 segmentos

O display de 7 segmentos é um display de baixo custo com a finalidade de mostrar informações alfanuméricas (binário, octal, decimal ou hexadecimal) para o usuário observar de forma simples o processo interno do dispositivo que o controla.



O display de 7 segmentos, possui 7 segmentos que podem ser agrupados de modo a formar números e letras.



Para mostrar o número 1, basta ativar os segmentos b e c. Para mostrar o número 3, os segmentos a, b, c, d e g.

A ligação ao Arduino pode utilizar os pinos de 2 a 9, mais o GND, na seguinte sequencia:

Pino

Arduíno

Segmento

Display

2 a
3 b
4 c
5 d
6 e
7 f
8 g
9 h
GND Central


Um ponto importante é a utilização dos resistores de 220 ohms para cada pino. Caso opte por utilizar apenas um resistor conectado a VCC, deve-se levar em consideração que luminosidade dos leds pode ficar diferente para os algarismos com mais ou menos leds acessos. Lembre-se que é necessário limitar a corrente, evitando queimar o componente.



Abaixo pode-se ver como ficaria as ligações considerando catodo comum, ou seja, se você está trabalhando com display anodo comum, você deverá ligar em VCC (5V):

Abaixo segue o código fonte do contador hexadecimal crescente:

// Programa : Contador crescente 0 a F
// Modificacoes e comentarios : Arduino e Cia
// Baseado no programa:
// Arduino 7 segment display example software
// http://www.hacktronics.com/Tutorials/arduino-and-7-segment-led.html
// License: http://www.opensource.org/licenses/mit-license.php (Go crazy)
// Define a ordem de ligação dos segmentos, dos digitos 0 a F
// Este padrão é para display de catodo comum
// Para display de anodo comum, modifique os valores de 0 para 1 e 
// de 1 para 0
// 1 = LED ligado, 0 = LED desligado, nessa ordem :
//                   Arduino pinos: 2,3,4,5,6,7,8

byte seven_seg_digits[16][7] = { { 1,1,1,1,1,1,0 },  // = Digito 0
                                 { 0,1,1,0,0,0,0 },  // = Digito 1
                                 { 1,1,0,1,1,0,1 },  // = Digito 2
                                 { 1,1,1,1,0,0,1 },  // = Digito 3
                                 { 0,1,1,0,0,1,1 },  // = Digito 4
                                 { 1,0,1,1,0,1,1 },  // = Digito 5
                                 { 1,0,1,1,1,1,1 },  // = Digito 6
                                 { 1,1,1,0,0,0,0 },  // = Digito 7
                                 { 1,1,1,1,1,1,1 },  // = Digito 8
                                 { 1,1,1,0,0,1,1 },  // = Digito 9
                                 { 1,1,1,0,1,1,1 },  // = Digito A
                                 { 0,0,1,1,1,1,1 },  // = Digito B
                                 { 1,0,0,1,1,1,0 },  // = Digito C
                                 { 0,1,1,1,1,0,1 },  // = Digito D
                                 { 1,0,0,1,1,1,1 },  // = Digito E
                                 { 1,0,0,0,1,1,1 }   // = Digito F
                                 };


void setup() 
{  
  pinMode(2, OUTPUT); //Pino 2 do Arduino ligado ao segmento A  
  pinMode(3, OUTPUT); //Pino 3 do Arduino ligado ao segmento B
  pinMode(4, OUTPUT); //Pino 4 do Arduino ligado ao segmento C
  pinMode(5, OUTPUT); //Pino 5 do Arduino ligado ao segmento D
  pinMode(6, OUTPUT); //Pino 6 do Arduino ligado ao segmento E
  pinMode(7, OUTPUT); //Pino 7 do Arduino ligado ao segmento F
  pinMode(8, OUTPUT); //Pino 8 do Arduino ligado ao segmento G
  pinMode(9, OUTPUT); //Pino 9 do Arduino ligado ao segmento PONTO
  writePonto(0);  // Inicia com o ponto desligado
}

void writePonto(byte dot)   //Funcao que aciona o ponto no display
{  
  digitalWrite(9, dot);
}

void sevenSegWrite(byte digit)  //Funcao que aciona o display
{
  byte pin = 2;

  //Percorre o array ligando os segmentos correspondentes ao digito
  for (byte segCount = 0; segCount < 7; ++segCount)  
  { 
    digitalWrite(pin, seven_seg_digits[digit][segCount]); // Catado comum: digitalWrite(pin, !seven_seg_digits[digit][segCount]);
    ++pin;
  }
    writePonto(1);  //Liga o ponto
    delay(100);   //Aguarda 100 milisegundos
    writePonto(0);  //Desliga o ponto
}

void loop() 
{
  //Contador de 0 a 15, ligando os segmentos correspondentes
  //0 a 9 = liga os segmentos correspondentes aos números
  //10 a 15 = Forma as letras A,B,C,D,E,F
  for (byte count = 0; count < 16; count++)
  {
     delay(500);
     sevenSegWrite(count);
  }
  delay(4000);
}
DESAFIO
Fazer uma animação com o display.

1.2 Display LCD 16x2

O display LCD 16X2 é ideal para programadores, profissionais da tecnologia, estudantes da área, projetistas ou simplesmente para pessoas que desejam praticar a programação. É utilizado para facilitar projetos em que o usuário precisa de uma resposta visual, que indica o funcionamento de sua configuração realizada.

Os principais usos desse display' pode ser em:

  • letreiros;
  • amperímetros;
  • voltímetros;
  • painéis de controle;
  • painéis gerais;
  • painéis informativos; e
  • calculadoras digitais.



É importante destacar quais características típicas desse tipo de display. Normalmente estes dispositivos contam com o controlador HD44780, que pode ser utilizado em diversas microcontroladores e minicomputadores, de forma facilitada.

Conheça as suas principais especificações técnicas:

  • corrente de trabalho com backlight desligado: 1,0mA ~ 1,5mA;
  • tensão de trabalho: 4,5V ~ 5,5V;
  • dimensões: 80 x 36 x 12 mm;
  • área do visor: 64,5 x 14 mm;
  • tamanho do caractere: 3 x 5,02 mm;
  • tamanho do ponto: 0,52 x 0,54 mm;
  • corrente do backlight: 75mA ~ 200mA.


Já a shield LCD 16x2 com keypad (teclado) pode ser utilizada para selecionar uma opção em um menu, digitar uma senha ou até mesmo controlar os passos de um robô. As aplicações são as mais diversas. Na Figura abaixo vemos a Shield LCD 16x2 com 5 botões customizáveis.



Possui um display LCD 16x2 com backlight azul, e 5 botões, além de um botão de reset do Arduino. O ajuste do contraste é feito pelo parafuso do trimpot. Além disso, a placa possui furos para soldagem de barras de pinos, para, por exemplo, colocar um sensor de temperatura.

Esta shield utiliza alguns pinos diferentes dos que usamos normalmente nos projetos para ligar um LCD. Nesta shield teremos que usar a seguinte sequência ao inicializar a biblioteca LiquidCrystal:

LiquidCrystal lcd(8,9,4,5,6,7); // RS,E,D4,D5,D6,D7

A tabela abaixo mostra a relação entre os pinos do Arduino e os sinais do display:

Pino Sinal do Display
4 DB4
5 DB5
6 DB6
7 DB7
8 RS
9 Enable

Os botões da shield usam uma única porta analógica, A0. A Figura abaixo mostra uma associação de resistores para determinar qual botão foi pressionado:

NOTA
Não podemos utilizar essas portas descritas para outras funções enquanto estivermos utilizando essa shield. O pino 10 também é utilizado pela placa para uma função específica, no caso o backlight, e não deve ser utilizado nos programas.

Para o programa de teste abaixo, é necessário o uso da biblioteca LiquidCrystal, e para determinar qual botão foi pressionado, faremos a leitura da porta analógica A0:

#include <LiquidCrystal.h>  
  
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);  
  
void setup()   
{  
 lcd.begin(16, 2);  
 lcd.setCursor(0,0);  
 lcd.print("Bem vindo!");  
 lcd.setCursor(0,1);  
 lcd.print("Tecle: ");  
}  
  
void loop()  
{  
 int botao;  
 botao = analogRead (0);  //Leitura do valor da porta analógica A0
 lcd.setCursor(8,1);  
 if (botao < 100) {  
  lcd.print ("Direita ");  
 }  
 else if (botao < 200) {  
  lcd.print ("Cima    ");  
 }  
 else if (botao < 400){  
  lcd.print ("Baixo   ");  
 }  
 else if (botao < 600){  
  lcd.print ("Esquerda");  
 }  
 else if (botao < 800){  
  lcd.print ("Select  ");  
 }  
}
DESAFIO
Tente incluir uma animação no display!
#include <LiquidCrystal.h>  
  
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);  
  
void setup()   
{  
 lcd.begin(16, 2);  
 lcd.setCursor(0,0);
 lcd.print("Santa Catarina");  
}  
  
void loop()  
{  
for (int posicao = 0; posicao < 3; posicao++)
  {
    lcd.scrollDisplayLeft();
    delay(300);
  }
  
  //Rolagem para a direita
  for (int posicao = 0; posicao < 6; posicao++)
  {
    lcd.scrollDisplayRight();
    delay(300);
  }

}

2 Referências

[1] https://www.makerhero.com/blog/como-usar-um-display-7-segmentos-com-o-arduino/

[2] https://www.arduinoecia.com.br/2013/08/arduino-shield-lcd-16x2-com-keypad.html