Você está na página 1de 6

Microcontroladores

Os Displays LCD Alfanuméricos


Introdução

Neste ponto veremos as principais funções e ferramentas para manipular displays LCD. Para implementar
nossos projetos é interessante a utilização de um display, capaz de tornar mais simples a visualização de
informações e a interação com nosso equipamento, escolhemos para tratar nesta obra de um display de
utilização muito comum em sistemas microcontrolados, suas características são as seguintes:

Tipo: Display LCD

Exibição: Caracteres Alfanuméricos

Quantidade de informações: 16 x 2 (dezesseis caracteres em 2 linhas)

Controlador: padrão HD44780 Hitachi

Um display LCD desse tipo, possui embutido em seu circuito um outro microcontrolador, e para podermos
utilizá-lo temos que entender um pouco
de seus comandos e funções. Dessa
forma, da mesma maneira com que
trabalhamos com o PIC, para utilizar um
display LCD temos que seguir uma
sequência de procedimentos.

Hardware e Pinagem

Existem modelos diferentes, com


localização diferente da pinagem,
porém a numeração e função dos pinos
geralmente é a mesma. Na maioria das
vezes, a aparência do LCD é a
mostrada da seguir:

Pino Função Descrição


1 alimentação Terra ou GND
2 Alimentação VCC ou +5V
Tensão para ajuste de contraste
3 V0
(ver figura1)
4 RS Seleção: 1 - dado, 0 - instrução
5 R/W seleção 1 - Leitura, 0 - Escrita
1 ou (1 - 0) Habilita, 0 -
6 E chip Select
desabilita
7 B0 LSB
8 B1
9 B2
10 B3
11 B4 barramento de dados
12 B5
12 B6
14 B7 MSB
A (display c/
15 Anodo p/ LED backlight
back)
K (display c/
16 Catodo p/ LED backlight
back)
Além da pinagem é importante entendermos uma outra característica de hardware desse dispositivo, que
são suas áreas de memória; ele possui três áreas de memória com funções bem diferentes:

1
Microcontroladores

CGROM: Memória não volátil onde estão gravados os códigos para escrita dos caracteres, isso é muito
útil, pois apenas enviamos o código ASCII do caracter e esse já é escrito no display.

DDRAM: É uma área de memória volátil, onde escrevemos o que queremos que apareça no display, cada
endereço dessa memória equivale a um endereço de caracter dos display, podemos fazer a seguinte
analogia para facilitar, cada caracter do display é como uma “janela” que exibe o conteúdo que escrevemos
na DDRAM.

CGRAM: É uma pequena área de memória onde podemos “desenhar” caracteres diferentes (apenas 8
caracteres). Ela é muito utilizada quando precisamos criar caracteres que não são comuns a todas as
línguas como por exemplo o caracter “ç” do português.

Endereço de cada caracter no display 16 x 2

Abaixo está o endereço em hexadecimal de cada caracter no display LCD 16 x 2, assim fica mais fácil a
movimentação do cursor e das letras a serem escritas:

LCD 16x2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Linha 1 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
Linha 2 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF

2
Microcontroladores

Lista de códigos dos Caracteres

A seguir o código que devemos enviar para o LCD a fim de obtermos um determinado caracter:

Endereços e Instruções

Agora conhecemos a pinagem desse LCD, vamos conhecer seu modo de funcionamento e saber um
pouco mais das instruções e dados que precisaremos utilizar.

É interessante atentarmos para a seguinte característica, a via de dados e instruções é a mesma, dessa
forma a sinalização, que indica se o Byte que chega no display é dado ou instrução é proveninte do sinal
encontrado no pino 4 (RS):

RS = 0 -> Instrução

RS = 1 -> Dado

Outra característica importante é que precisamos transitar (de 1 para 0) o sinal Enable (pino 6) para que
a informação que chega aos terminais do LCD seja interpretada pelo controlador do display.

Em nosso estudo manteremos o pino 5 (R/W) em zero, pois apenas escreveremos no LCD. Podemos ligar
este pino do LCD no PIC também.

3
Microcontroladores

Para utilizarmos esse novo dispositivo em nossos projetos, devemos seguir alguns passos:

1º Inicializar o LCD: Primeiramente criar uma rotina em nosso programa, que envie para o display uma
sequência de informações que determinará o modo com o qual trabalharemos, com por exemplo:

- Definição da matriz de pontos (nosso caso 5 x 7)

- Definição do cursor
- Definição da direção de deslocamento (mensagem ou cursor)
- Limpeza do display.
O mikroC automaticamente carrega as rotinas de inicilização do LCD na compilação de um programa. O
programador não precisa se preocupar em inicilizar o LCD desde que o hardware do dispositivo esteja
configurado no programa corretamente no modo 4 ou 8 bits.
Inicialização do LCD
Toda vez que alimentarmos o LCD, devemos executar um procedimento de inicialização, o qual consiste
em enviar comandos que configuram o modo de operação para execução de um dado programa: fixação
das condições de utilização, fixação do modo de controle ativo/inativo do display e limpeza da tela.
No MikroC Pro não precisamos nos preocupar em programar todos os comandos de inicialização do LCD,
pois, através de simples funções, o compilador se encarrega de programá-lo para nós. Por esse motivo
devemos informar ao sistema o “tipo” de LCD que estamos utilizando por meio de linhas de comando. A
seguir, vamos conhecer e estudar as instruções de controle de LCD usadas no mikroC.

Definindo o modo de operação do LCD.


O MikroC Pro possui uma biblioteca para controle do LCD. Veremos alguns comando pertencentes a esta
biblioteca
Protótipo: void Lcd_Init();
Descrição: Inicializa o módulo LCD

O exemplo a seguir ilustra o uso da função LCD_Init(). As variáveis globais seguintes devem ser
declaradas antes do uso da função.
// ajuste da dinagem do LCD
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;

// Direcao dos pinos


sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
...

Lcd_Init();

4
Microcontroladores

Protótipo: void Lcd_Out(char linha, char coluna, char *texto);


Descrição: Imprime o texto no LCD a partir da posição especificada. As variáveis tipo string e literais podem
ser passadas como um texto.

Parametros:
linha: número da linha da posição inicial
coluna: numero da coluna da posição inicial.
texto: texto a ser escrito

Para exemplificar veja o programa a seguir:


//**********************************************************
//Trabalhando com LCD no compilador MikroC Pro
//
//LCD: configuração dos pinos do LCD

sbit lcd_rs at rb2_bit;


sbit lcd_en at rb3_bit;
sbit lcd_d7 at rb7_bit;
sbit lcd_d6 at rb6_bit;
sbit lcd_d5 at rb5_bit;
sbit lcd_d4 at rb4_bit;

//LCD: direcionamento dos pinos

sbit lcd_rs_direction at trisb2_bit;


sbit lcd_en_direction at trisb3_bit;
sbit lcd_d7_direction at trisb7_bit;
sbit lcd_d6_direction at trisb6_bit;
sbit lcd_d5_direction at trisb5_bit;
sbit lcd_d4_direction at trisb4_bit;

//Declaração das variáveis globais

void main()
{
ADCON1=15;
// Inicializacao do LCD
Lcd_Init();
Lcd_cmd(_LCD_CLEAR); //Apaga o LCD(Limpa)
Lcd_cmd(_LCD_CURSOR_OFF); //desliga o cursor

// Escrever no LCD

Lcd_Out(1,4,"Etec P.V.");
Lcd_Out(2,5, " 2 ENT ");
Delay_ms(2000);
Lcd_cmd(_LCD_CLEAR);
Lcd_Out(1,1,"CHAVE- ");

while(1)
{
if (!PORTC.F0) //verifica se a chave ligada ao RC0 esta
//fechada (RC0 em nível 0).
Lcd_Out(1,8,"FECHADA"); //Se estiver, escreve no display "FECHADA"
else
Lcd_Out(1,8,"ABERTA "); //Se não, escreve "ABERTA"
}
}

O comando Lcd_cmd(comando_LCD):
No MikroC Pro podemos configurar o LCD de formas diferentes. Através da função Lcd_cmd(), podemos
determinar diversas "tarefas" que o LCD deverá executar.

5
Microcontroladores

Protótipo: void Lcd_Cmd(char out_char);


Descrição: envia um comando ao LCD (out_char).
Parâmetro: out_char - um dos comandos existentes na tabela abaixo

out_char pode ser:


Comandos Descrição
_LCD_FIRST_ROW Move cursor para primeira linha do LCD
_LCD_SECOND_ROW Move cursor para segunda linha do LCD
_LCD_THIRD_ROW Move cursor para a terceira linha do LCD
_LCD_FOURTH_ROW Move cursor para a quarta linha do LCD
_LCD_CLEAR Apaga display
_LCD_RETURN_HOME Retorna cursor para a primeira coluna da primeira linha do LCD
_LCD_CURSOR_OFF Desliga cursor
_LCD_UNDERLINE_ON Salta cursor para a linha inferior
_LCD_BLINK_CURSOR_ON Ativa o modo piscante do cursor
_LCD_MOVE_CURSOR_LEFT Move cursor para a esquerda sem movimentar os textos
_LCD_MOVE_CURSOR_RIGHTMove cursor para a direita sem movimentar os textos
_LCD_TURN_ON Liga cursor
_LCD_TURN_OFF Apaga todo o visor do LCD, sem perder os dados no visor
_LCD_SHIFT_LEFT Movimenta textos do LCD para a esquerda
_LCD_SHIFT_RIGHT Movimenta textos do LCD para a direita
No exemplo utilizamos o seguinte comando para apagar o display LCD:
Lcd_cmd(_LCD_CLEAR); //apaga LCD
Utilizamos o comando para desligar o cursor do LCD
Lcd_cmd(_LCD_CURSOR_OFF); // desliga cursor
Para escrever no LCD utilizamos o comando:
lcd_out(1,4," Etec P.V."); //escreve mensagem na primeira linha quarta coluna
//do LCD

LCD1
LM016L

R1
10k

U1
2 15
V DD
V SS

V EE

RW

RA0/AN0/C1IN- RC0/T1OSO/T13CKI
RS

D1
D2

D4
D0

D5
D3

D6
D7

3 16
E

RA1/AN1/C2IN- RC1/T1OSI/CCP2B
4 17
RA2/AN2/C2IN+/VREF-/CVREF RC2/CCP1/P1A
5 18
9
7
1
2

12
3

5
6

10

13
11

14

RA3/AN3/C1IN+/VREF+ RC3/SCK/SCL
6
RA4/T0CKI/C1OUT RC4/SDI/SDA
23 SW1
7 24 SW-SPST
RA5/AN4/SS/HLVDIN/C2OUT RC5/SDO
14 25
RA6/OSC2/CLKO RC6/TX/CK
POT 13
RA7/OSC1/CLKI RC7/RX/DT
26

33 19
RB0/AN12/FLT0/INT0 RD0/PSP0
34 20
10K RB1/AN10/INT1 RD1/PSP1
35 21
RB2/AN8/INT2 RD2/PSP2
36 22
RB3/AN9/CCP2A RD3/PSP3
37 27
RB4/KBI0/AN11 RD4/PSP4
38 28
RB5/KBI1/PGM RD5/PSP5/P1B
39 29
RB6/KBI2/PGC RD6/PSP6/P1C
40 30
RB7/KBI3/PGD RD7/PSP7/P1D

8
RE0/RD/AN5
9
RE1/WR/AN6
10
RE2/CS/AN7
1
R4
RE3/MCLR/VPP
10k
PIC18F4520

Circuito de teste

PODEMOS ATERRAR O PINO R/W DO LCD, POIS AS FUNÇÕES DE CONTROLE DO LCD NO MIKROC
PRO NÃO UTILIZA ESTE PINO SIMPLESMENTE DEIXAM ESTE PINO EM NIVEL LÓGICO 0. CASO
VENHAMOS A ATERRAR O PINO RW, ECONOMIZAREMOS 1 PINO DE I/O DO PIC.

Você também pode gostar