Display LCD PDF
Display LCD PDF
Display LCD PDF
01. INTRODUÇÃO
Os módulos LCD são interfaces de saída muito útil em sistemas microprocessados. Estes
módulos podem ser gráficos e a caracter. Os módulos LCD gráficos são encontrados
com resuluções de 122x32, 128x64, 240x64 e 240x128 dots pixel, e geralmente estão
disponíveis com 20 pinos para conexão. Os LCD comuns (tipo caracter) são
especificados em número de linhas por colunas e são encontrados nas configurações
previstas na Tabela 1.
Os módulos podem ser encontrados com LED backlight (com uma iluminação de
fundo) para facilitar as leituras durante a noite. Neste caso, a alimentação deste led faz-
se normalmente pelos pinos 15 e 16 para os módulos comuns e 19 e 20 para os módulos
gráficos, sendo os pinos 15 e 19 para ligação ao anodo e os pinos 16 e 20 para o catodo.
A corrente de alimentação deste led varia de 100 a 200mA, dependendo do modelo.
Estes módulos utilizam um controlador próprio, permitindo sua interligação com
com outras placas através de seus pinos, onde deve ser alimentado o módulo e
interligado o barramento de dados e controle do módulo com a placa do usuário.
Naturalmente que além de alimentar e conectar os pinos do módulo com a placa do
usuário deverá haver um protocolo de comunicação entre as partes, que envolve o envio
de bytes de instruções e bytes de dados pelo sistema do usuário.
A Tabela 2 descreve cada pino do módulo ou do display para conexão deste a
outras placas:
2
Tabela 2 - Pinagem dos Módulos LCD
Pino Função Descrição
1 Alimentação Terra ou GND
2 Alimentação VCC ou +5V
3 V0 Tensão para ajuste de contraste (ver Figura 1)
4 RS Seleção: 1 - Dado, 0 - Instrução
5 R/W Seleção: 1 - Leitura, 0 - Escrita
6 E Chip select 1 ou (1 → 0) - Habilita, 0 - Desabilitado
7 B0 LSB
8 B1
9 B2 Barramento
10 B3 de
11 B4 Dados
12 B5
13 B6
14 B7 MSB
15 A (qdo existir) Anodo p/ LED backlight
16 K (qdo existir) Catodo p/ LED backlight
3
02. INTERFACE COM CPU
Os módulos LCD são projetados para conectar-se com a maioria das CPU’s
disponíveis no mercado, bastando para isso que esta CPU atenda as temporizações de
leitura e escrita de instruções e dados, fornecido pelo fabricante do módulo. A Figura 2
mostra um exemplo de diagrama de tempos típico requeridos para operação de escrita no
módulo LCD, estes tempos variam em função do clock da CPU do usuário.
4
sinais A0 e A1 estão conectados aos pinos 4 e 5, teremos então 04 (quatro) endereços
distintos para comunicação entre a CPU e o módulo LCD. A Tabela 4 mostra estes
endereços.
5
4000 0 0 Instrução - Escrita no modulo
4001 0 1 Dados - Escrita no modulo
4002 1 0 Instrução - Leitura no modulo
4003 1 1 Dados - Leitura no modulo
6
03. PROGRAMAÇÃO / INSTRUÇÕES
7
dados ou instruções serão enviados por nible. sendo enviado o nible mais significativo
primeiro. Por exemplo para limpar o display, escreve-se o nible 0000 e depois 0001.
A Tabela 6 traz um resumo das instruções mais usadas na comunicação com os
módulos LCD.
R R/W B7 B6 B5 B4 B3 B2 B1 B0
S
CÓDIGO 0 0 0 0 0 0 0 0 0 1
MSB LSB
R R/W B7 B6 B5 B4 B3 B2 B1 B0
S
CÓDIGO 0 0 0 0 0 0 0 0 1 *
MSB LSB
Faz retornar o cursor para a posição mais a esquerda da primeira linha e faz voltar
à posição original mensagens previamente deslocadas. O conteúdo da DDRAM
permanece inalterado.
R R/W B7 B6 B5 B4 B3 B2 B1 B0
S
CÓDIGO 0 0 0 0 0 0 0 1 X S
MSB LSB
Esta instrução tem efeito somente durante a leitura ou escrita de dados, portanto,
deve ser ativada na inicialização.
-Estabelece o sentido de deslocamento do cursor (X=0 p/ esquerda, X=1 p/ direita)
-Estabelece se a mensagem deve ou não ser deslocada com a entrada de um novo
caracter
S=1 SIM, S=0 NÃO. Exemplo: X=1 e S=1 => mensagem desloca p/ direita.
R R/W B7 B6 B5 B4 B3 B2 B1 B0
S
CÓDIGO 0 0 0 0 0 0 0 D C B
MSB LSB
9
3.1.5 - Deslocamento do Cursor ou da Mensagem
R R/W B7 B6 B5 B4 B3 B2 B1 B0
S
CÓDIGO 0 0 0 0 0 1 C R * *
MSB LSB
Desloca o cursor ou a mensagem sem que para isso tenha que escrever ou ler
dados do display. Utilizado para posicionamento dos dados no display.
C R FUNÇÃO
0 0 Desloca o cursor para a esquerda e decrementa o contador de
endereço.
0 1 Desloca o cursor para a direita e incrementa o contador de
endereço.
1 0 Desloca a mensagem e o cursor para a esquerda.
1 1 Desloca a mensagem e o cursor para a direita
R R/W B7 B6 B5 B4 B3 B2 B1 B0
S
CÓDIGO 0 0 0 0 1 Y N F * *
MSB LSB
R R/W B7 B6 B5 B4 B3 B2 B1 B0
S
CÓDIGO 0 0 0 1 A A A A A A
MSB LSB
10
Estabelece o endereço da CGRAM no contador de endereços (AC) como um
número binário AAAAAA e após isto os dados serão escritos ou lidos pela CPU
neste endereço. Cada caracter especial ocupa 8 endereços na CGRAM.
3.1.8 - Endereçamento da DDRAM
R R/W B7 B6 B5 B4 B3 B2 B1 B0
S
CÓDIGO 0 0 1 A A A A A A A
MSB LSB
R R/W B7 B6 B5 B4 B3 B2 B1 B0
S
CÓDIGO 0 1 BF A A A A A A A
MSB LSB
Busy Flag ou o bit 7 indica ao sistema onde está conectado o módulo LCD, se o
controlador do módulo está ocupado com alguma operação interna (BF=1), e
neste caso, não aceita nenhuma instrução até que BF volte para 0.
Além disso, permite a leitura do conteúdo do contador de endereços (AC)
expressa por AAAAAAA. O contador de endereços pode conter tanto endereço da
CGRAM como da DDRAM, depende neste caso, da instrução anterior.
R R/W B7 B6 B5 B4 B3 B2 B1 B0
S
CÓDIGO 1 0 A A A A A A A A
MSB LSB
11
3.1.11 - Leitura de dados na DDRAM ou CGRAM
R R/W B7 B6 B5 B4 B3 B2 B1 B0
S
CÓDIGO 1 1 A A A A A A A A
MSB LSB
caracter
Módulo 8x1 1 2 3 4 5 6 7 8
Endereço(hexa) 80 81 82 83 84 85 86 87
LCD 16x1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
80 81 82 83 84 85 86 87 88 89 8 8B 8C 8 8E 8F
A D
LCD 16x1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
80 81 82 83 84 85 86 87 C0 C1 C2 C3 C4 C5 C6 C7
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 8 8B 8C 8 8E 8F
A D
linha 2 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
LCD 20x2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93
linha 1
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3
linha 2
LCD 20x4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93
linha 1
12
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3
linha 2
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93
linha 3
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3
linha 4
LCD 24x1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
LCD 24x2
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97
linha 1
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7
linha 2
LCD 40x1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
a LCD 40X4
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93
linha 1
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3
linha 2
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93
linha 3
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3
linha 4
Cont. 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
94 95 96 97 98 99 9A 9B 9C 9E 9D 9F A0 A1 A2 A3 A4 A5 A6 A7
linha 1
D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7
linha 2
94 95 96 97 98 99 9A 9B 9C 9E 9D 9F A0 A1 A2 A3 A4 A5 A6 A7
linha 3
D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7
linha 4
OBS:
• Para os módulos de 04 linhas estamos considerando que existe um outro pino
de habilitação (como o pino 6) para as duas últimas linhas, portando outros
endereços de hardware.
• Antes de enviar uma instrução para escrita de dados no display, enviar antes
uma de endereçamento na DDRAM, com o endereço onde deve ser escrito o
caracter, tipo um gotoxy().
50 1 0 x x x 0E
51 1 0 x x 11
52 1 0 x 10
53 1 0 x 10
13
54 1 0 x x x 15
55 1 0 x x x 0E
56 1 0 x 10
57 1 0 00*
Isto significa que para utilizarmos o caracter gravado no endereço base 50,
durante a inicialização ou reset do sistema, teremos que escrevermos 8 bytes entre os
endereços 50 e 57, para construirmos o caracter. Para ilustrar este procedimento, supor
que queiramos construir o caracter {ç} no endereço base 50. Neste caso, devemos
construir o mapa deste caracter especial como mostrado na Tabela 7 (supondo estar
trabalhando com matriz 7x5 e com auto incremento de endereço a cada escrita). Observe
que o último endereço sempre será 00, pois esta posição é sempre ocupada pelo cursor.
Toda vez que alimentamos o módulo LCD deve ser executado o procedimento de
inicialização, que consiste no envio de uma seqüência de instruções para configurar o
modo de operação para execução de um dado programa de interfaceamento. Em muitos
display este procedimento ocorre automaticamente, dentro de condições específicas que
envolve temporizações mínimas referente a transição do nível lógico 0 para 1, ao
ligarmos a fonte. Em caso de dúvidas, recomendamos o envio destas instruções após o
reset do sistema.
14
MÓDULO LCD 1 2 3 4 5 6 7 8 9 10 11 12
1 linha - Matriz 7x5 e 8x5 3 3 3 2 2 0 0 8 0 1 0 1
1 linha - Matriz 10x5 3 3 3 2 2 4 0 8 0 1 0 1
2 linha - Matriz 7x5 e 8x5 3 3 3 2 2 8 0 8 0 1 0 1
15
04. ROTEIRO PARA PROGRAMAÇÃO
3 Após a escrita de dados na CGRAM envie a instrução 01, para posicionar o cursor.
5 Comandos úteis:
16
1 linha 5x10 (4 bits) 24H
Obs:
Após o endereçamento da CGRAM, o cursor se desloca para a primeira
posição da segunda linha (ou metade), portanto é recomendado enviar a
instrução 01 ou “limpa display e cursor home”.
17
05. CUIDADOS ESPECIAIS COM MÓDULOS LCD
1 - MANUSEIO
2 - INSTALAÇÃO
5.3 - OPERAÇÃO
18
06. EXEMPLO DE PROGRAMAÇÃO
;=======================================================================
; Programa: Exemplo para manuseio de display ou modulo LCD =
; Data: Out/98 =
; Descricao: =
; Este programa grava a mensagem "Kit Didatico" =
; no display LCD 2x20 (duas linha de 20 caracteres). =
; Os pinos de dados do mudulo LCD estao conectados =
; diretamente no barramento de dados da CPU, conforme =
; Figura 3 da apostila sobre LCD. =
;=======================================================================
$mod51
lcd_wr_inst equ 4000H
lcd_wr_dado equ 4001H
lcd_rd_inst equ 4002H
lcd_rd_dado equ 4003H
;========================================================================
; Programa principal
;========================================================================
ORG 0H
MOV SP,#50H
MOV TMOD,#11H ; TIMER1 / TIMER0 no modo 1
CLR EA ; desabilita todas as interrupcoes
CALL inicia_lcd
MOV R7,#0FFH
loop:
INC R7
MOV A,R7
MOV DPTR,#mensagem
MOVC A,@A+DPTR ; le caracter da mensagem
CJNE A,#0FFH,cont ; testa se fim da mensagem
JMP fim
cont:
CALL wr_dado ; escreve o conteudo de acumulador no LCD
CALL espera ; aguarda busy flag
JMP loop
fim:
JMP fim ; fim do programa
;=======================================================================
; Rotinas chamadas pelo Programa Principal
;=======================================================================
ORG 100H
inicia_lcd: ; rotina de inicializacao
MOV A,#38H ; 2 linhas / matriz 7x5
CALL wr_inst
CALL tempo ; delay de 15mS
MOV A,#38H ; 2 linhas / matriz 7x5
CALL wr_inst
CALL tempo ; delay de 15mS
MOV A,#06H ; cursor com autoincremento para direita
CALL wr_inst
CALL espera ; busy flag
MOV A,#0EH ; liga display / cursor
19
CALL wr_inst
CALL espera ; busy flag
MOV A,#01H ; limpa display / cursor home
CALL wr_inst
CALL espera ; busy flag
RET
;=========================================================
; Rotina de tempo: 15 mS / clock 12 MHz => 50.000 ciclos
;=========================================================
tempo:
MOV DPTR,#15536 ; (65536-50000)
MOV TH1,DPH
MOV TL1,DPL
SETB TR1 ; dispara timer1
JNB TF1,$ ; aguarda estouro => 50.0000
CLR TR1
CLR TF1 ; prepara para proxima chamada
RET
mensagem: ; mensagem a ser escrita no LCD
DB 'Kit didatico', 0FFH
END ; obrigatorio
20