Eletrônica Silveira
Olá, Seja Bem-Vindo ao Fórum Eletrônica Silveira!!!!
Para você poder ver os mais variados Projetos do nosso Fórum, você precisa fazer o cadastro!

Depois de se Cadastrar, não se esqueça de ler as regras do fórum!

http://eletronicasilveira.forumeiros.com/t3-regras-do-forum#3


Administrador do Fórum,
Rafael Silveira
HOMENAGEM

Na vida tudo passa tudo acontece mas alguém igual a você a gente jamais esquece




★ 22 de novembro de 1991

† 12 de março de 2016

Nosso eterno amigo, administrador e fundador deste fórum
Quem está conectado
53 usuários online :: 14 usuários cadastrados, Nenhum Invisível e 39 Visitantes :: 2 Motores de busca

Ademir, alanjunior, batistaignacio, cicero789, desio mauricio de lima, dionatanquadros, Francisco Antonio da Silv, Higo Petry, jesolu, Jonasbalance, Paulo Roberto Correa, sorincostache, treetitanic, varkrisz

[ Ver toda a lista ]


O recorde de usuários online foi de 264 em Seg 18 Mar 2013 - 11:54
Eletrônica Perez
CM Eletrônica
Top dos mais postadores
Rafael Silveira (7816)
 
Caca Silva (5945)
 
renatoscp (3825)
 
CMeletronica (3138)
 
michel chagas (2791)
 
Railson (2118)
 
alexsandro rodrigues de a (1776)
 
naldo santos (1599)
 
ablacon64 (1220)
 
gilvantexas (1061)
 

Medidor de Velocidade

Publicidade

Conectando um Módulo lcd 16 X 2 ao PIC16F876A

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Conectando um Módulo lcd 16 X 2 ao PIC16F876A

Mensagem por Anderson M em Dom 1 Fev 2015 - 23:05

Interface módulo lcd 16 X 2 utilizando o PIC16F876A:

Um tempo atrás um amigo do fórum fez uma sugestão por MP, como fazer uma interface utilizando um módulo 16 X 2 conectado ao PIC16F876A que seria o irmão do meio do PIC16F877A. Através do circuito montado fazer um exibição de mensagens personalizadas ao módulo lcd.

Então resolvi postar para todos uma esquemático seguido de quatro exemplos de códigos, cujo os códigos começam desde do mais simples até chegarmos ao mais complexo, tudo isso para uma melhor elucidação do assunto.

Configuração do circuito é 4 bits...

Esquemático em PDF:

Copie e cole no navegador...

TROCAR ** POR tt e TROCAR *** POR www

h**p://***.4shared.com/office/nnCjqWv0ce/LCD_MODULE_16_X_2_PIC16F876A.html

___________________________________________________________________

Não vou entrar em detalhes como criar um projeto no MikroC PRO, pois já foi bem detalhado no link abaixo.  

http://eletronicasilveira.forumeiros.com/t5325-estudos-pwm-em-microcontroladores-parte-i


Abaixo seguem os quatro exemplos de código para serem compilados no MikroC PRO.


Exemplo - I:

Código:
/*
 * Lcd Example I Project:
 * MikroC v6.0.0
 * Copyright (c) Anderson M, 01/02/2015.
 * MCU: PIC 16F876A
 * Cristal Oscilador Externo: 4.0 Mhz - Modo HS
 * Power-up Timer (Habilitado), WDT OFF (Desabilitado)
 * Bibliotecas adicionadas: LCD & LCD_CONSTANTS
*/
//******************************************************************************

// Definições de conexões do display LCD
 sbit LCD_RS at RC6_bit;
 sbit LCD_EN at RC7_bit;
 sbit LCD_D4 at RB4_bit;
 sbit LCD_D5 at RB5_bit;
 sbit LCD_D6 at RB6_bit;
 sbit LCD_D7 at RB7_bit;
 sbit LCD_RS_Direction at TRISC6_bit;
 sbit LCD_EN_Direction at TRISC7_bit;
 sbit LCD_D4_Direction at TRISB4_bit;
 sbit LCD_D5_Direction at TRISB5_bit;
 sbit LCD_D6_Direction at TRISB6_bit;
 sbit LCD_D7_Direction at TRISB7_bit;
// Final definições de conexões do display LCD
//******************************************************************************

//******************************************************************************
// Início das definições de mensagens no módulo LCD...
char text1[] = "Hello World...";
char text2[] = "Lcd Example I";
// Final das definições de mensagens no módulo LCD...

void main() { // Função Principal....

//******************************************************************************
//*********** Início das configurações dos registradores TRIS do MCU ***********
//******************************************************************************

  TRISB = 0x00;    // Configura o PORTB como saída.
  TRISC = 0x00;   // Configura o PORTC como saída.
  PORTB = 0x00;  // Inicializa o PORTB em nível lógico ( Zero ).
  PORTC = 0x00; // Inicializa o PORTC em nível lógico ( Zero ).
  
//******************************************************************************
//************ Final das configurações dos registradores TRIS do MCU ***********
//******************************************************************************

//******************************************************************************
//************* Configurações de impressão de mensagens no LCD *****************
//******************************************************************************

 Lcd_Init();                  // Inicializa o Display LCD.
 Lcd_Cmd(_LCD_CLEAR);        // Limpar o LCD.
 Lcd_Cmd(_LCD_CURSOR_OFF);  // Cursor desligado.

 Lcd_Out(1,3,text1);    // Escreve Texto (1) na 1ª fila e 3ª coluna.
 Lcd_Out(2,3,text2);   // Escreve Texto (2) na 2ª fila e 3ª coluna.
 Delay_ms(500);       // Aguarda 500 milisegundos.

//******************************************************************************
//********* Final de configurações de impressão de mensagens no LCD ************
//******************************************************************************

} // Final da função principal...

//******************************************************************************
//******************************************************************************


Exemplo - II:

Código:
/*
 * Lcd Example II Project:
 * MikroC v6.0.0
 * Copyright (c) Anderson M, 01/02/2015.
 * MCU: PIC 16F876A
 * Cristal Oscilador Externo: 4.0 Mhz - Modo HS
 * Power-up Timer (Habilitado), WDT OFF (Desabilitado)
 * Bibliotecas adicionadas: LCD & LCD_CONSTANTS
*/
//******************************************************************************

// Definições de conexões do display LCD
 sbit LCD_RS at RC6_bit;
 sbit LCD_EN at RC7_bit;
 sbit LCD_D4 at RB4_bit;
 sbit LCD_D5 at RB5_bit;
 sbit LCD_D6 at RB6_bit;
 sbit LCD_D7 at RB7_bit;
 sbit LCD_RS_Direction at TRISC6_bit;
 sbit LCD_EN_Direction at TRISC7_bit;
 sbit LCD_D4_Direction at TRISB4_bit;
 sbit LCD_D5_Direction at TRISB5_bit;
 sbit LCD_D6_Direction at TRISB6_bit;
 sbit LCD_D7_Direction at TRISB7_bit;
// Final definições de conexões do display LCD
//******************************************************************************

void main() { // Função Principal...

//******************************************************************************
//*********** Início das configurações dos registradores TRIS do MCU ***********
//******************************************************************************
  
    TRISB = 0x00;    // Configura o PORTB como saída.
    TRISC = 0x00;   // Configura o PORTC como saída.
    PORTB = 0x00;  // Inicializa o PORTB em nível lógico ( Zero ).
    PORTC = 0x00; // Inicializa o PORTC em nível lógico ( Zero ).
    
//******************************************************************************
//************ Final das configurações dos registradores TRIS do MCU ***********
//******************************************************************************

//******************************************************************************
//************* Configurações de impressão de mensagens no LCD *****************
//******************************************************************************

   Lcd_Init();                           // Inicializa o módulo LCD.
   Lcd_Cmd(_LCD_CLEAR);                 // Limpa o display LCD.
   Lcd_Cmd(_Lcd_Cursor_Off);           // Desligar o cursor do display LCD.

   Lcd_Out(1,1,"Inicializando...");     // Escreve mensagem na 1ª linha e 1ª coluna no módulo LCD.
   Lcd_Out(2,1,"Microcontrolador..."); // Escreve mensagem na 2ª linha e 1ª coluna no módulo LCD.

   Delay_ms(1000);                    // Aguardar 1 segundo...
   Lcd_Cmd(_LCD_CLEAR);              // Limpa o display LCD.
   Delay_ms(500);                   // Aguarda 500 milisegundos...

//******************************************************************************
//********* Final de configurações de impressão de mensagens no LCD ************
//******************************************************************************

   while(1) // LOOP Infinito...

   {

   Lcd_Out(1,1,"** Eletronica **");  // Escreve mensagem na 1ª linha e 1ª coluna no módulo LCD.
   Lcd_Out(2,1,"*** Silveira ***"); // Escreve mensagem na 2ª linha e 1ª coluna no módulo LCD.
   Delay_ms(1000);                 // Aguarda 1 segundo...
  
   Lcd_Cmd(_LCD_CLEAR);           // Limpa o display LCD.
   Lcd_Out(1,3,"LCD MODULE II"); // Escreve mensagem na 1ª linha e 3ª coluna no módulo LCD.
   Lcd_Out(2,1,"** Example II **"); // Escreve mensagem na 2ª linha e 1ª coluna no módulo LCD.
   Delay_ms(1000);                 // Aguarda 1 segundo...
  
   } // Final LOOP Infinito...

} // Final da Função Principal...

//******************************************************************************
//******************************************************************************


Exemplo - III:

Código:
/*
 * Lcd Example III Project:
 * MikroC v6.0.0
 * Copyright (c) Anderson M, 01/02/2015.
 * MCU: PIC 16F876A
 * Cristal Oscilador Externo: 4.0 Mhz - Modo HS
 * Power-up Timer (Habilitado), WDT OFF (Desabilitado)
 * Bibliotecas adicionadas: LCD & LCD_CONSTANTS
*/
//******************************************************************************

// Definições de conexões do display LCD
 sbit LCD_RS at RC6_bit;
 sbit LCD_EN at RC7_bit;
 sbit LCD_D4 at RB4_bit;
 sbit LCD_D5 at RB5_bit;
 sbit LCD_D6 at RB6_bit;
 sbit LCD_D7 at RB7_bit;
 sbit LCD_RS_Direction at TRISC6_bit;
 sbit LCD_EN_Direction at TRISC7_bit;
 sbit LCD_D4_Direction at TRISB4_bit;
 sbit LCD_D5_Direction at TRISB5_bit;
 sbit LCD_D6_Direction at TRISB6_bit;
 sbit LCD_D7_Direction at TRISB7_bit;
// Final definições de conexões do display LCD
//******************************************************************************

// Declaração de variáveis globais...
// Definições de mensagens no módulo LCD...
char text1[] = "Inicializando...";
char text2[] = "Microcontrolador...";
char text3[] = "LCD MODULE III";
char text4[] = "** Example III **";
// Final das definições de mensagens no módulo LCD...


void main() { // Função Principal...

//******************************************************************************
//*********** Início das configurações dos registradores TRIS do MCU ***********
//******************************************************************************

    TRISB = 0x00;    // Configura o PORTB como saída.
    TRISC = 0x00;   // Configura o PORTC como saída.
    PORTB = 0x00;  // Inicializa o PORTB em nível lógico ( Zero ).
    PORTC = 0x00; // Inicializa o PORTC em nível lógico ( Zero ).

//******************************************************************************
//************ Final das configurações dos registradores TRIS do MCU ***********
//******************************************************************************

//******************************************************************************
//************* Configurações de impressão de mensagens no LCD *****************
//******************************************************************************

   Lcd_Init();                           // Inicializa o módulo LCD.
   Lcd_Cmd(_LCD_CLEAR);                 // Limpa o display LCD.
   Lcd_Cmd(_Lcd_Cursor_Off);           // Desligar o cursor do display LCD.

   Lcd_Out(1,1,text1);   // Escreve Texto (1) na 1ª fila e 1ª coluna.
   Lcd_Out(2,1,text2);  // Escreve Texto (2) na 2ª fila e 1ª coluna .
   Delay_ms(1000);     // Aguarda 1 segundo.

   Lcd_Cmd(_LCD_CLEAR);    // Limpa o display LCD.
   Lcd_Out(1,3,text3);    // Escreve Texto (3) na 1ª fila e 3ª coluna.
   Lcd_Out(2,1,text4);   // Escreve Texto (4) na 2ª fila e 1ª coluna.
   Delay_ms(1000);      // Aguarda 1 segundo.


//******************************************************************************
//********* Final de configurações de impressão de mensagens no LCD ************
//******************************************************************************

   while(1) // LOOP Infinito...

   {
  
   Lcd_Out(1,1,"** Eletronica **");  // Escreve mensagem na 1ª linha e 1ª coluna no módulo LCD.
   Lcd_Out(2,1,"*** Silveira ***"); // Escreve mensagem na 2ª linha e 1ª coluna no módulo LCD.
   Delay_ms(1000);                 // Aguarda 1 segundo...
   Lcd_Cmd(_LCD_TURN_OFF);        // Apagamento das mensagens....
   Delay_ms(1000);               // Aguarda 1 segundo...
   Lcd_Cmd(_LCD_TURN_ON);       // Amostragem das mensagens....
   Delay_ms(300);              // Aguarda 300 milisegundos...

   } // Final LOOP Infinito...

} // Final da Função Principal...

//******************************************************************************
//******************************************************************************


Exemplo - IV:

Código:

/*
 * Lcd Example IV Project:
 * MikroC v6.0.0
 * Copyright (c) Anderson M, 01/02/2015.
 * MCU: PIC 16F876A
 * Cristal Oscilador Externo: 4.0 Mhz - Modo HS
 * Power-up Timer (Habilitado), WDT OFF (Desabilitado)
 * Bibliotecas adicionadas: LCD & LCD_CONSTANTS
*/
//******************************************************************************

// Definições de conexões do display LCD
 sbit LCD_RS at RC6_bit;
 sbit LCD_EN at RC7_bit;
 sbit LCD_D4 at RB4_bit;
 sbit LCD_D5 at RB5_bit;
 sbit LCD_D6 at RB6_bit;
 sbit LCD_D7 at RB7_bit;
 sbit LCD_RS_Direction at TRISC6_bit;
 sbit LCD_EN_Direction at TRISC7_bit;
 sbit LCD_D4_Direction at TRISB4_bit;
 sbit LCD_D5_Direction at TRISB5_bit;
 sbit LCD_D6_Direction at TRISB6_bit;
 sbit LCD_D7_Direction at TRISB7_bit;
// Final definições de conexões do display LCD
//******************************************************************************

// Declaração de variáveis globais...

unsigned char direction = 0; //
// Definições de mensagens no módulo LCD...
char text1[] = "Inicializando...";
char text2[] = "Microcontrolador...";
char text3[] = "LCD MODULE IV";
char text4[] = "** Example IV **";
char text5[] = "** Eletronica **";
char text6[] = "*** Silveira ***";
// Final das definições de mensagens no módulo LCD...

void main() { // Função Principal...

//******************************************************************************
//*********** Início das configurações dos registradores TRIS do MCU ***********
//******************************************************************************

    TRISB = 0x00;    // Configura o PORTB como saída.
    TRISC = 0x00;   // Configura o PORTC como saída.
    PORTB = 0x00;  // Inicializa o PORTB em nível lógico ( Zero ).
    PORTC = 0x00; // Inicializa o PORTC em nível lógico ( Zero ).

//******************************************************************************
//************ Final das configurações dos registradores TRIS do MCU ***********
//******************************************************************************

//******************************************************************************
//************* Configurações de impressão de mensagens no LCD *****************
//******************************************************************************

   Lcd_Init();                           // Inicializa o módulo LCD.
   Lcd_Cmd(_LCD_CLEAR);                 // Limpa o display LCD.
   Lcd_Cmd(_Lcd_Cursor_Off);           // Desligar o cursor do display LCD.

   Lcd_Out(1,1,text1);   // Escreve Texto (1) na 1ª fila e 1ª coluna.
   Lcd_Out(2,1,text2);  // Escreve Texto (2) na 2ª fila e 1ª coluna .
   Delay_ms(1000);     // Aguarda 1 segundo.

   Lcd_Cmd(_LCD_CLEAR);    // Limpa o display LCD.
   Lcd_Out(1,3,text3);    // Escreve Texto (3) na 1ª fila e 3ª coluna.
   Lcd_Out(2,1,text4);   // Escreve Texto (4) na 2ª fila e 1ª coluna.
   Delay_ms(1000);      // Aguarda 1 segundo.
  
   Lcd_Cmd(_LCD_CLEAR);    // Limpa o display LCD.
   Lcd_Out(1,1,text5);    // Escreve Texto (5) na 1ª fila e 1ª coluna.
   Lcd_Out(2,1,text6);   // Escreve Texto (6) na 2ª fila e 1ª coluna.
   Delay_ms(1000);      // Aguarda 1 segundo.

//******************************************************************************
//********* Final de configurações de impressão de mensagens no LCD ************
//******************************************************************************

   while(1) { // LOOP Infinito...
  

//******************************************************************************
// Instruções para deslocamento da mensagem à direita...

   for (direction = 0; direction < 16; direction++)

        {
          Lcd_Cmd(_LCD_SHIFT_RIGHT); // Deslocamento da mensagem à direita.
          Delay_ms(500);            // Aguarda 500 milisegundos.
        }
//******************************************************************************

//******************************************************************************
// Instruções para deslocamento da mensagem à esquerda...

   for (direction = 0; direction < 16; direction++)

        {
        
          Lcd_Cmd(_LCD_SHIFT_LEFT); // Deslocamento da mensagem à esquerda.
          Delay_ms(500);           // Aguarda 500 milisegundos.
        }
          Delay_ms(500);        // Aguarda 500 milisegundo repetição do ciclo.
          
//******************************************************************************

   } // Final LOOP Infinito...

} // Final da Função Principal...

//******************************************************************************
//******************************************************************************



Detalhes importante:

Não esqueçam de adicionar às nossas bibliotecas : LCD & LCD_CONSTANTS.

- Sem elas adicionadas o compilador não vai compilar o código.

- Para adicioná-las, clique em ( Library Manager ) que se localiza  à direita, logo em seguida marque estas duas bibliotecas.


Não esqueçam também de configurar os ( fuses bits ) corretamente, caso contrário os códigos compilados não vão funcionar na prática.

Abaixo temos uma imagem com os parâmetros corretos em seus seletores, certifica-se que estar correto como exibido na imagem abaixo.

.

Caso o participante desejar optar por utilizar um cristal de clock de 8Mhz na prática, será necessário mudar na configuração dos ( fuses bits ). Para mudança você deverá clicar em ( Project > Edit Project ) localizado na aba superior do compilador.

- Logo em seguida aparecerá uma tela semelhante da imagem acima.

- Modifique o valor na caixa ( Oscillator Frequecy Mhz ) -> ( 4.000000 ) por ( 8.000000 ).

- Clique em OK.

- Logo em seguida faça uma nova compilação do código.

Com isso finalizamos o assunto, com modificações no código é possível uma adaptação em outros microcontroladores.

Qualquer coisa estou à disposição...

Boa sorte a todos...

Sds Anderson M  

avatar
Anderson M
Avançado
Avançado

Mensagens : 401
Data de inscrição : 07/07/2011
Localização : São Paulo/SP

Voltar ao Topo Ir em baixo

Re: Conectando um Módulo lcd 16 X 2 ao PIC16F876A

Mensagem por maxm3s em Seg 30 Mar 2015 - 2:38

muito bom parabéns !!
avatar
maxm3s
Nível 2
Nível 2

Mensagens : 131
Data de inscrição : 05/05/2012
Idade : 43
Localização : serrra Espirito Santo

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum