HOME      PROJETOS      PROGRAMAÇÃO     

Conexão de LCDs compatíveis com o HITACHI HD44780


Vamos aprender como conectar ao PIC um LCD alfanumérico padrão HD44780 da HITACHI.

Os LCDs alfanuméricos podem variar quanto ao número de linhas e o número de colunas mas isso realmente não importa porque eles seguem um padrão, no caso o HD44780 da HITACHI, que veremos aqui.

Ao adiquirir um LCD alfanumérico, tente obter, também, o data sheet do dispositivo pois, apesar de seguirem o padrão e todos eles possuirem 16 pinos, a ordem dos mesmos pode variar de dispositivo para dispositivo.

A tabela a baixo mostra a pinagem mais comum de um LCD HITACHI HD44780

  Pino     Função     Nível     Descrição  
  1     Vss     -     0v     Alimentação  
  2     Vdd     -     5v  
  3     Vl     -     -  
  4     RS     H/L     H: Entrada de dado  
  L: Entrada de comando  
  5     R/W     H/L     H: Leitura de dado  
  L: Gravação de dado  
  6     E     H, H->L     Sinal de habilitação  
  7     D0     H/L     BUS de dados  
  8     D1     H/L  
  9     D2     H/L  
  10     D3     H/L  
  11     D4     H/L  
  12     D5     H/L  
  13     D6     H/L  
  14     D7     H/L  
  15     A     -     Anodo do LED do backlight  
  16     K     -     Catodo do LED do backlight  


Abaixo temos o esquema elétrico das conexões do LCD ao microcontrolador. Você pode baixar o projeto Eagle deste esquema elétrico na sessão Downloads.







FUNÇÕES DE CONTROLE DO LCD

Para controlar o envio de dados e comandos ao LCD foi desenvolvida uma subrotina, chamada "lcdhd44780.asm" com diversas funções como configuração do LCD, apagamento, posicionamento do cursor e envio de caracteres ao LCD, entre outras. Essa subrotina foi escrita de maneira a tornar independente a escolha do microcontrolador PIC, tendo sido testada com os chips das famílias 16F e 18F sem apresentar problemas.




R E Q U I S I T O S    D E    S O F T W A R E

A subrotina "lcdhd44780.asm"" com as funções de controle, os módulos auxiliares e todas as macro instruções necessárias para a operação do LCD se encontram na pasta "lcd44780 do arquivo lcdhd44780_mplab_project.zip que deve ser baixado e descompactado no seu HD. Após o download desse arquivo, abra o projeto no MPLAB.



AS SEGUINTES SUBROTINAS DEVEM SER INCLUIDAS NO PROGRAMA:

#include "lcdhd44780.asm" ; subrotina de controle do LCD #include "delay_ms.inc" ; subrotina de retardo em milisegundos #include "delay_us.inc" ; subrotina de retardo em microsegundos


OS SEGUINTES SÍMBOLOS E REGISTRADORES DEVEM SER DEFINIDOS NO PROGRAMA:

#define _PARALLEL_LCD ; LCD com conexoes normais LCD_R0 RES 1 ; registrador de trabalho 0 LCD_R1 RES 1 ; registrador de trabalho 1 LCD_R2 RES 1 ; registrador de trabalho 2 LCD_COMMAND RES 1 ; buffer de comando LCD_TRIS_port equ TRISB ; registrador de controle de LCD_port LCD_port equ PORTB ; nome da porta de dados do LDC (PORTA, PORTB,GPIO, etc) LCD_TRIS_cntl equ TRISA ; registrador de controle de LCD_cntl LCD_cntl equ PORTA ; nome da porta de controle (PORTA, PORTB,GPIO, etc) LCD_EN equ 1 ; bit ENABLE/DISABLE na porta de controle LCD_RS equ 0 ; bit RS na porta de controle




EXEMPLO 1

Este exemplo mostra como enviar o caracter "X" para a coluna "8" da linha "1" do LCD usando funções da subrotina "lcdhd44780.asm"".

call SR_4BITS ; inicializa o LCD call SR_LCDRESET ; garante que o LCD esta limpo movlw 1 ; linha 1 call SR_SETLINE ; estabelece a linha movlw 8 ; coluna 8 call SR_SETCOL ; estabelece a coluna call SR_setcursor ; posiciona o cursor em (1,8) movlw "X" ; W = "X" call SR_SENDW ; envia "X" para a posicao (1,8)


EXEMPLO 2

Este exemplo mostra como enviar o caracter "X" para a coluna "8" da linha "1" do LCD fazendo o posicionamento com a macro "SET_CURSOR"".

call SR_4BITS ; inicializa o LCD call SR_LCDRESET ; garante que o LCD esta limpo SET_CURSOR .1, .8, "i" ; posiciona na coluna 8 da linha 1 movlw "X" ; W = "X" call SR_SENDW ; envia "X" para a posicao (1,8)



F U N Ç Õ E S

Todas as funções são compatíveis com microcontroladores das famílias 16F e 18F.

As seguintes funções são fornecidas pela subrotina lcdsr44780:

SR_4BITS Inicializa o LCD
SR_LCDRESET Limpa e reposiciona o LCD
SR_LCDCLEAR Limpa o LCD
SR_SENDW Envia o valor de W ao LCD
SR_SENDCHR Envia ao LCD o caracter do registrador LCD_COMMAND
SR_SENDCMD Envia ao LCD o comando do registrador LCD_COMMAND
SR_CURSORHOME Posiciona o cursor do LCD na linha 1 coluna 1
SR_SETCURSOR Posiciona o cursor na linha e coluna especificada
SR_LINESET Posiciona o cursor no início de uma linha



SR_4BITS

Voltar

A função SR_4BITS inicializa o LCD no modo 4 bits. Essa função deve ser chamada no início do programa antes que se possa enviar dados ao LCD.

EXEMPLO

inicio movlw 7 movwf CMCON . . call SR_4BITS ; inicializa LCD . .



SR_LCDRESET

Voltar

A função SR_LCDRESET limpa o LCD e posiciona o cursor na linha 1 e coluna 1.

EXEMPLO

inicio movlw 7 movwf CMCON . . call SR_4BITS ; inicializa LCD call SR_LCDRESET ; reposiciona o LCD .



SR_LCDCLEAR

Voltar

A função SR_LCDCLEAR apaga todas as linhas do LCD.

EXEMPLO

inicio movlw 7 movwf CMCON . . call SR_4BITS ; inicializa LCD call SR_LCDCLEAR ; garante que o LCD esta limpo . .



SR_SENDW

Voltar

A função SR_SENDW envia o caracter contido no registrador W para ser exibido na posição atual da tela do LCD.

EXEMPLO

inicio movlw 7 movwf CMCON . . call SR_4BITS ; inicializa LCD call SR_LCDCLEAR ; garante que o LCD esta limpo movlw "A" ; W = "A" call SR_SENDW ; envia "A" ao LCD .



SR_SENDCHR

Voltar

A função SR_SENDCHR coloca o LCD em modo de recepção de dados e envia o caracter contido no registrador LCD_COMMAND para ser exibido na posição atual da tela.

EXEMPLO

inicio movlw 7 movwf CMCON . . call SR_4BITS ; inicializa LCD call SR_LCDCLEAR ; garante que o LCD esta limpo movlw "A" ; caracter "A" movwf LCD_COMMAND ; move "A" para o buffer call SR_SENDCHR ; envia "A" ao LCD .



SR_SENDCMD

Voltar

A função SR_SENDCMD coloca o LCD em "modo de comando" e envia o comando contido no registrador LCD_COMMAND para o LCD executar. Os comandos aceitos fazem parte do firmware do LCD e devem ser consultados nos data sheets dos respectivos dispositivos.

EXEMPLO

inicio movlw 7 movwf CMCON . . call SR_4BITS ; inicializa LCD call SR_LCDCLEAR ; garante que o LCD esta limpo movlw b'00101111' ; configura interface de 4 bits andwf LCD_COMMAND,f ; move o commmando para o buffer call SR_SENDCMD ; envia o comando .



SR_CURSORHOME

Voltar

A função SR_CURSORHOME posiciona o cursor na primeira linha e primeira coluna do LCD mas não apaga o seu conteúdo.

EXEMPLO

. inicio movlw 7 movwf CMCON . . call SR_4BITS ; inicializa LCD call SR_CURSORHOME ; posiciona na linha 1, coluna 1 .



SR_SETCURSOR

Voltar

A função SR_SETCURSOR Posiciona o cursor numa determinada linha e coluna do LCD.

O registrador SR_1 deve conter o número da linha e o registrador SR_2 o número da coluna que devem ser compatíveis com o LCD, cujos endereços serão fornecidos pela macro LCD_LINES que deve ser emitida uma única vez para gerar a respectiva tabela de endereços de linhas e colunas.

A função SR_SETCURSOR pode ser chamada pela macro SET_CURSOR que facilita a programação permitindo que os valores de linha e coluna sejam escritos diretamente na macro.

EXEMPLO

. LCD_LINES 0216 ; macro p/ gerar enderecos linha/coluna p/ LCD 2x16 . . inicio movlw 7 movwf CMCON . . call SR_4BITS ; inicializa LCD call SR_LCDRESET ; reposiciona o LCD movlw .1 ; liha 1 movwf SR_1 ; carrega registrador de linha movlw .5 ; coluna 5 movwf SR_2 ; carrega registrador de coluna call SR_SETCURSOR ; posiciona o cursor . .



SR_LINESET

Voltar

A função SR_LINESET posiciona o cursor do LCD no início de uma linha, isto é, na primeira coluna da linha especificada no registrador W.

Esta rotina exige que a macro LCD_LINES seja emitida no início do programa para gerar a tabela de enderecos das linhas para o LCD.

EXEMPLO

. LCD_LINES 0216 ; macro p/ gerar enderecos linha/coluna p/ LCD 2x16 . . inicio movlw 7 movwf CMCON . . call SR_4BITS ; inicializa LCD call SR_LCDRESET ; reposiciona o LCD movlw .2 ; linha 2 call SR_LINESET ; posiciona no inicio da linha 2 .



M A C R O S    A U X I L I A R E S

Para facilitar a programação, algumas macros foram desenvolvidas para fazer interface com as funções da subrotina lcdsr44780:

FAMILIAS Identifica o microcontrolador
LCD_LINES Gera tabela de endereços de linhas e colunas para o LCD
SET_CURSOR Posiciona o cursor do LCD numa linha e coluna especificada
SR_4MVC Envia uma string ao LCD



R E S U M O

De tudo o que foi visto acima, podemos resumir nos seguintes passos o que o programador deve seguir para usar as funções da subrotina lcdhd44780:

1 - Montar o hardware conforme esquema fornecido.
2 - Incluir no programa os registradores e símbolos requeridos pela subrotina.
3 - Incluir no programa o código da subrotina e as subrotinas de delay exigidas.
4 - Fazer uma chamada à função SR_4BITS para inicializar o LCD.
5 - Limpar o LCD com a função SR_LCDRESET ou SR_LCDCLEAR.
6 - Posicionar o cursor do LCD com a função SR_SETCURSOR.
7 - Enviar dados ou comandos ao LCD com as funções SR_SENDW e SR_SENDCMD.



E X E M P L O      C O M P L E T O

Um exemplo completo de uso do LCD com a subrotina lcdhd44780 é fornecido aqui para o PIC16F628A.

Baixe o projeto na sessão Downloads e descompacte o arquivo .zip no seu HD.

Será gerada a pasta lcd44780. Entre na nessa pasta e, em seguida, clique duas vezes no arquivo lcd44780.mcp para visualizar o projeto no MPLAB.

Todas a subrotinas, macros e arquivos auxiliares, referenciados pelas diretivas #include dentro do programa fonte em assembler, estão dentro da pasta lcd44780.

Você também pode gravar o arquivo lcd44780.hex diretamente no seu microcontrolador.

O programa do exemplo foi testado e funciona corretamente, por isso, se o seu circuito foi montado corretamente, o LCD deverá apresentar, na primeira linha, a mensagem "Visite-nos em" e, na segunda linha, a mensagem "hpspin.com.br". Se isso não acontecer, revise o circuito e tente novamente.




D O W N L O A D S

Projeto MPLAB do programa exemplo lcdhd44780_mplab_project.zip

Projeto EAGLE do esquema elétrico lcdhd44780_eagle_project.zip

Lembre-se que a alteração do conteúdo das macros ou subrotinas podem causar resultados imprevisíveis quando não catastróficos.







Índice dos circuitos




H P S P I N

Desde 04 de Março de 2010

Atualização: 19 de Mar de 2024