As unidades de exibição são os dispositivos de saída mais importantes em projetos integrados e produtos eletrônicos. 16x2 LCD é uma das unidades de exibição mais utilizadas. LCD 16x2 significa que existem duas linhas nas quais 16 caracteres podem ser exibidos por linha, e cada caractere ocupa 5X7 de espaço de matriz no LCD. Neste tutorial, conectaremos o módulo LCD 16X2 ao microcontrolador 8051 (AT89S52). A interface do LCD com o microcontrolador 8051 pode parecer bastante complexa para os novatos, mas depois de entender o conceito, pareceria muito simples e fácil. Embora possa demorar porque você precisa entender e conectar 16 pinos do LCD ao microcontrolador. Portanto, primeiro vamos entender os 16 pinos do módulo LCD.
Podemos dividi-lo em cinco categorias, pinos de energia, pino de contraste, pinos de controle, pinos de dados e pinos de luz de fundo.
Categoria |
PIN NO. |
Nome do Pin |
Função |
Pinos de energia |
1 |
VSS |
Pino de aterramento, conectado ao aterramento |
2 |
VDD ou Vcc |
Pino de tensão + 5V |
|
Pino de contraste |
3 |
V0 ou VEE |
Configuração de contraste, conectado ao Vcc por meio de um resistor variável. |
Pinos de controle |
4 |
RS |
Registrar Selecionar Pin, RS = 0 modo de comando, RS = 1 modo de dados |
5 |
RW |
Pino de leitura / gravação, RW = 0 modo de gravação, RW = 1 modo de leitura |
|
6 |
E |
Habilitar, um pulso alto a baixo precisa habilitar o LCD |
|
Pinos de dados |
7-14 |
D0-D7 |
Pinos de dados, armazena os dados a serem exibidos no LCD ou nas instruções de comando |
Pinos de luz de fundo |
15 |
LED + ou A |
Para alimentar a luz de fundo + 5V |
16 |
LED- ou K |
Backlight Ground |
Todos os pinos são claramente compreensíveis por seu nome e funções, exceto os pinos de controle, então eles são explicados a seguir:
RS: RS é o pino de seleção de registro. Precisamos configurá-lo para 1, se estivermos enviando alguns dados para serem exibidos no LCD. E o definiremos como 0 se estivermos enviando alguma instrução de comando como limpar a tela (código hexadecimal 01).
RW: Este é o pino de leitura / gravação, vamos configurá-lo como 0, se vamos gravar alguns dados no LCD. E defina-o como 1, se estivermos lendo do módulo LCD. Geralmente isso é definido como 0, porque não precisamos ler os dados do LCD. Apenas uma instrução “Get LCD status”, precisa ser lida algumas vezes.
E: Este pino é usado para habilitar o módulo quando um pulso alto a baixo é fornecido a ele. Um pulso de 450 ns deve ser dado. Essa transição de HIGH para LOW torna o módulo HABILITADO.
Existem algumas instruções de comando predefinidas no LCD, nós as usamos em nosso programa abaixo para preparar o LCD (na função lcd_init ()). Algumas instruções importantes de comando são fornecidas abaixo:
Código Hex |
Comando para registro de instrução do LCD |
0F |
LCD LIGADO, cursor LIGADO |
01 |
Limpar tela de exibição |
02 |
Voltar para casa |
04 |
Diminuir cursor (deslocar o cursor para a esquerda) |
06 |
Incrementar o cursor (deslocar o cursor para a direita) |
05 |
Shift display right |
07 |
Shift display left |
0E |
Display ON, cursor piscando |
80 |
Força o cursor para o início da primeira linha |
C0 |
Força o cursor para o início da segunda linha |
38 |
2 linhas e matriz 5 × 7 |
83 |
Linha do cursor 1 posição 3 |
3C |
Ativar segunda linha |
08 |
Display OFF, cursor OFF |
C1 |
Pule para a segunda linha, posição 1 |
OC |
Display ON, cursor OFF |
C1 |
Pule para a segunda linha, posição 1 |
C2 |
Pule para a segunda linha, posição 2 |
Diagrama de Circuito e Explicação
O diagrama do circuito para a interface do LCD com o microcontrolador 8051 é mostrado na figura acima. Se você tem conhecimentos básicos de 8051, deve saber sobre EA (PIN 31), XTAL1 e XTAL2, pino RST (PIN 9), Vcc e pino de aterramento do microcontrolador 8051. Usei esses pinos no circuito acima. Se você não tem ideia sobre isso, recomendo que leia este artigo Interface de LED com microcontrolador 8051 antes de passar pela interface de LCD.
Além dos pinos acima, conectamos os pinos de dados (D0-D7) do LCD ao microcontrolador da porta 2 (P2_0 - P2_7). E os pinos de controle RS, RW e E para o pino 12,13,14 (pino 2,3,4 da porta 3) do microcontrolador, respectivamente.
PIN 2 (VDD) e PIN 15 (fornecimento de luz de fundo) do LCD são conectados à tensão (5v), e PIN 1 (VSS) e PIN 16 (aterramento de luz de fundo) são conectados ao aterramento.
O pino 3 (V0) é conectado à tensão (Vcc) por meio de um resistor variável de 10k para ajustar o contraste do LCD. A perna intermediária do resistor variável é conectada ao PINO 3 e as outras duas pernas são conectadas à fonte de tensão e ao aterramento.
Explicação do código
Tentei explicar o código por meio de comentários (no próprio código).
Como expliquei anteriormente sobre o modo de comando e modo de dados, você pode ver que ao enviar o comando (função lcd_cmd) definimos RS = 0, RW = 0 e um pulso de ALTO a BAIXO é dado a E tornando-o 1, então 0. Além disso, ao enviar dados (função lcd_data) para LCD, definimos RS = 1, RW = 0 e um pulso de HIGH a LOW é dado a E tornando-o 1 a 0. A função msdelay () foi criada para criar atraso em milissegundos e chamado frequentemente no programa, é chamado para que o módulo LCD tenha tempo suficiente para executar a operação interna e os comandos.
Um loop while foi criado para imprimir a string, que está chamando a função lcd_data a cada vez para imprimir um caractere até o último caractere (terminador nulo- '\ 0').
Usamos a função lcd_init () para preparar o LCD usando as instruções de comando predefinidas (explicadas acima).