Biblioteca lcd livro c18

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Biblioteca lcd livro c18

Mensagempor renanwalenczuk » 27 Nov 2009 14:33

Adquiri ontem um livro "microcontroladores pic18 aprenda e programe em C ". autor: Alberto Noboru Miyadaira
Já revirei ela de cabeça pra baixo, mas não cosigo utilizar o lib do lcd.


segue a lib:
Código: Selecionar todos
/*********************************************************************************************************
******************************************BIBLIOTECA DISPLAY LCD******************************************
**                                                                                                       *
**                    Esta biblioteca contém as funções de controle do display LCD.                      *
**                                                                                                       *   
**  Livro: Microcontroladores PIC18 - Aprenda e Programe em Linguagem C.                                 *           
**  Autor: Alberto Noboru Miyadaira                                                                      *
*********************************************************************************************************/

#include <delays.h> //Adiciona a biblioteca de delay.

#ifndef Fosc
  #define Fosc 20 //Define a frequência do oscilador. Este valor deve corresponder a frequência do oscilador utilizado pelo PIC18.
#endif
// Os nome definidos são os próprios nomes dos pinos do display LCD.
#define B7 PORTDbits.RD2 //Define o nome B7 para a estrutra.
#define E_B7 TRISDbits.TRISD2=1;
#define S_B7 TRISDbits.TRISD2=0;
#define B6 PORTDbits.RD4 //Define o nome B6 para a estrutra.
#define E_B6 TRISDbits.TRISD4=1;
#define S_B6 TRISDbits.TRISD4=0;
#define B5 PORTDbits.RD5 //Define o nome B5 para a estrutra.
#define E_B5 TRISDbits.TRISD5=1;
#define S_B5 TRISDbits.TRISD5=0;
#define B4 PORTDbits.RD6 //Define o nome B4 para a estrutra.
#define E_B4 TRISDbits.TRISD6=1;
#define S_B4 TRISDbits.TRISD6=0;
#define E  PORTDbits.RD7  //Define o nome E para a estrutra.
#define E_E TRISDbits.TRISD7=1;
#define S_E TRISDbits.TRISD7=0;
#define RW PORTDbits.RD1//Define o nome RW para a estrutra.
#define E_RW TRISDbits.TRISD1=1;
#define S_RW TRISDbits.TRISD1=0;
#define RS PORTDbits.RD0 //Define o nome RS para a estrutra.
#define E_RS TRISDbits.TRISD0=1;
#define S_RS TRISDbits.TRISD0=0;

void gera_atraso_us(unsigned int atraso)//adaptado para Fosc de 20MHz
{
  do
  {
    Delay1TCY (); //Gera um delay de 1 ciclo de máquina.
    Delay1TCY (); //Gera um delay de 1 ciclo de máquina.
    Delay1TCY (); //Gera um delay de 1 ciclo de máquina.
    Delay1TCY (); //Gera um delay de 1 ciclo de máquina.
    Delay1TCY (); //Gera um delay de 1 ciclo de máquina.

    atraso--;
  }while (atraso>0);
}

unsigned char lcd_envia_controle (unsigned char instrucao_dado, unsigned int escrita_leitura, unsigned char dado, unsigned int atraso_us)
{
/*
instrucao_dado = 0 //Instrução.
instrucao_dado = 1 //Dado.
escrita_leitura = 1 //Leitura.
escrita_leitura = 0 //Escrita.
*/
unsigned char dado_entrada=0;

//Configura os pinos de dados/controle, como saída.
S_B7;
S_B6;
S_B5;
S_B4;
S_E;
S_RW;
S_RS;

RS = instrucao_dado; //Informa se é um comando ou dado.
RW = escrita_leitura; //Informa se é escrita ou leitura.

   if(escrita_leitura == 0)
   {
      B7 = dado>>7;//B7 recebe o bit 7 da variável dado.
      B6 = dado>>6;//B6 recebe o bit 6 da variável dado.
      B5 = dado>>5;//B5 recebe o bit 5 da variável dado.
      B4 = dado>>4;//B4 recebe o bit 4 da variável dado.
     
      E = 1;//Habilita o Display LCD.
      gera_atraso_us(2); //Gera um delay de 2us.
      E = 0; //Desabilita o Display LCD.
     
      B7 = dado>>3;//B7 recebe o bit 3 da variável dado.
      B6 = dado>>2;//B6 recebe o bit 2 da variável dado.
      B5 = dado>>1;//B5 recebe o bit 1 da variável dado.
      B4 = dado;//B4 recebe o bit 0 da variável dado.
         
      E = 1;//Habilita o Display LCD.
      gera_atraso_us(2); //Gera um delay de 2us.
      E = 0; //Desabilita o Display LCD.
     
      gera_atraso_us(atraso_us); //Gera um delay de xus. MAX 255 ciclos de máquina
     
      return 0;
   }
   else
   {
      //Configura os pinos de dados, como entrada.
      E_B7;
      E_B6;
      E_B5;
      E_B4;
     
      E = 1;//Habilita o Display LCD.
     gera_atraso_us(2); //Gera um delay de 2us.
   
      dado_entrada = B7;
      dado_entrada = dado_entrada<<1 | B6;
      dado_entrada = dado_entrada<<1 | B5;
      dado_entrada = dado_entrada<<1 | B4;   
     
      E = 0; //Desabilita o Display LCD.
      E = 1;//Habilita o Display LCD.
      gera_atraso_us(2); //Gera um delay de 2us.
     
      dado_entrada = dado_entrada<<1 | B7;
      dado_entrada = dado_entrada<<1 | B6;
      dado_entrada = dado_entrada<<1 | B5;
      dado_entrada = dado_entrada<<1 | B4;
         
      E = 0; //Desabilita o Display LCD.
     
      gera_atraso_us(atraso_us); //Gera um delay de xus. MAX 255 ciclos de máquina
     
      return dado_entrada;
   }
}

//Limpa a tela e coloca o cursor na linha um e coluna um do display.
void lcd_limpa_tela ( )
{
   lcd_envia_controle (0,0,0x01,2000);
}

//Coloca o cursor na linha um e coluna um do display.
void lcd_cursor_home ( )
{
   lcd_envia_controle (0,0,0x02,2000);
}

//Desloca o cursor para a direita ou esquerda.
void lcd_desloca_cursor(unsigned char direita_esquerda)
{
/*
0 - Desloca o cursor para a direita.
1 - Desloca o cursor para a esquerda.
*/
unsigned char cursor[2] = {0x14, 0x10};   
   lcd_envia_controle (0,0,cursor[direita_esquerda],40);
}

//Desloca a mensagem para a direita ou esquerda.
void lcd_desloca_mensagem(unsigned char direita_esquerda)
{
/*
0 - Desloca a mensagem para a direita.
1 - Desloca a mensagem para a esquerda.
*/
unsigned char cursor[2] = {0x1c, 0x18};
   lcd_envia_controle (0,0,cursor[direita_esquerda],40);
}

//Liga/Desliga o cursor/display.
void lcd_LD_cursor (unsigned char config)
{
/*
0 - Desliga o cursor.
1 - Desliga o display.
2 - Liga o cursor com alternância.
3 - Liga o display e o cursor.
4 - Liga o display e o cursor piscante.
*/
unsigned char cursor [5] = {0x0c, 0x08, 0x0f, 0x0e, 0x0d};
   lcd_envia_controle (0,0,cursor[config],40);
}

//Coloca o cursor em uma determinada posição do LCD.
void lcd_posicao(unsigned char linha, unsigned char coluna)
{
   switch (linha)
   {
      case 1:
         lcd_envia_controle (0,0,0x80+coluna-1,40);
         break;
      case 2:
         lcd_envia_controle (0,0,0xc0+coluna-1,40);
         break;
      case 3:
         lcd_envia_controle (0,0,0x94+coluna-1,40);
         break;
      case 4:
         lcd_envia_controle (0,0,0xd4+coluna-1,40);
         break;
   }   
}

//Escreve um caractere ou símbolo no display.
void lcd_escreve_dado(unsigned char dado)
{
   lcd_envia_controle (1,0,dado,45);
}

//Retorna o caractere presente na posição do cursor.
unsigned char lcd_le_dado( )
{
   return lcd_envia_controle (1,1,0,45);
}

//Retorna o valor do status + contador de endereço.
unsigned char lcd_status ( )
{
   return lcd_envia_controle (0,1,0,40);
}

//Envia String para o Display LCD.
void imprime_string_lcd(const rom char *s_caracteres)
{
   while (*s_caracteres!=0)
   {
      lcd_escreve_dado(*s_caracteres);
      s_caracteres++;
   }
}

//Envia uma matriz de dados para o Display LCD.
void imprime_buffer_lcd( char *s_caracteres, unsigned char tamanho_buffer)
{
   while (tamanho_buffer--)
   {
      lcd_escreve_dado(*s_caracteres);
      s_caracteres++;
   }
}

//Inicializa o display LCD alfanumérico.
void lcd_inicia( unsigned char conf1, unsigned char conf2, unsigned char conf3)
{
/*
Configuração do display LCD:

(0x28)
- Comunicação 4 vias
- Display com 2 linhas
- Matriz 8x5

(0x0f)
- Liga display
- Cursor piscante

(0x06)
- Desloca o cursor para a direita quando um caractere for inserido.
*/
unsigned char config_LCD[6] = {0x03, 0x02, 0x00, 0x00, 0x00};
unsigned char repeticao;

config_LCD[2] = conf1;
config_LCD[3] = conf2;
config_LCD[4] = conf3;

//Configura os pinos de dados/controle, como saída.
S_B7;
S_B6;
S_B5;
S_B4;
S_E;
S_RW;
S_RS;
   
RS = 0; //Instrução.
RW = 0; //Escrita.
E = 0; //Desabilita LCD.

   gera_atraso_us(20000); //Gera um atraso de 20ms.

   for( repeticao = 0 ; repeticao < 3 ; repeticao++ )
   {
      B7 = config_LCD[0]>>3; //B7 recebe o bit 3 do elemento presente na posição 0 da matriz config_LCD.
      B6 = config_LCD[0]>>2; //B6 recebe o bit 3 do elemento presente na posição 1 da matriz config_LCD.
      B5 = config_LCD[0]>>1; //B5 recebe o bit 3 do elemento presente na posição 2 da matriz config_LCD.
      B4 = config_LCD[0]; //B4 recebe o bit 3 do elemento presente na posição 3 da matriz config_LCD.
     
      E = 1;//Habilita o Display LCD.
      gera_atraso_us(2); //Gera um delay de 2us.
      E = 0; //Desabilita o Display LCD.
     
      gera_atraso_us(5000); //Gera um delay de 5ms.
   }

B7 = config_LCD[0]>>3; //B7 recebe o bit 3 do elemento presente na posição 0 da matriz config_LCD.
B6 = config_LCD[0]>>2; //B6 recebe o bit 3 do elemento presente na posição 1 da matriz config_LCD.
B5 = config_LCD[0]>>1; //B5 recebe o bit 3 do elemento presente na posição 2 da matriz config_LCD.
B4 = config_LCD[0]; //B4 recebe o bit 3 do elemento presente na posição 3 da matriz config_LCD.
   
E = 1;//Habilita o Display LCD.
gera_atraso_us(2); //Gera um delay de 2us.
E = 0; //Desabilita o Display LCD.

gera_atraso_us(40); //Gera um delay de 40us.

lcd_envia_controle (0,0,config_LCD[2],40);
lcd_envia_controle (0,0,config_LCD[3],40);
lcd_envia_controle (0,0,config_LCD[4],40);

lcd_limpa_tela();

}


Meu código

Código: Selecionar todos
#include <p18f4520.h>
#include <delays.h>
#include "C:\pic18\biblioteca_lcd_2x16.h"

#define Fosc 20

void main(void)
{
   TRISA=0b00011111;
   TRISB=0b11100111;
   TRISC=0b10111111;
   TRISD=0x00;
   TRISE=0x00;
   
   PORTD=0x00;
   PORTE=0x00;
   
   lcd_inicia(0x28, 0x0f, 0x01);//display 4 vias
   lcd_posicao(1,1);
   imprime_string_lcd("LCD");
   while(1);
}


Obrigado

Renan
"O segredo da criatividade é saber como esconder as fontes."
Albert Einstein
renanwalenczuk
Nibble
 
Mensagens: 69
Registrado em: 17 Nov 2008 14:22
Localização: Canoas - RS

Mensagempor Djalma Toledo Rodrigues » 27 Nov 2009 16:08

#include <pic18f4550.h>
...
#include "C:\pic18\config_PIC18F4550.h // Adiciona a configuração do µC PIC18F4550.(Capitulo 6)

a seguir void /do/ Delays ...

Ver Pág. 192

DJ
Editado pela última vez por Djalma Toledo Rodrigues em 28 Nov 2009 09:55, em um total de 2 vezes.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor renanwalenczuk » 27 Nov 2009 16:38

Estou usando o PIC 18f4520, então estas configurações eu fiz no próprio mplab.

A função "gera_atraso_segundos" eu não estou usando.

O programa é compilado normalmente, mas no hardware não funciona.

:cry:

Renan
"O segredo da criatividade é saber como esconder as fontes."
Albert Einstein
renanwalenczuk
Nibble
 
Mensagens: 69
Registrado em: 17 Nov 2008 14:22
Localização: Canoas - RS

Mensagempor Djalma Toledo Rodrigues » 27 Nov 2009 16:45

De acordo mas, veja bem você esta usando a Biblioteca do Autor do Livro

verifique se seu µC é compatível com PIC18F4550

se não for tem a opção Editar, Modificar, Renomear essa biblioteca
- Em C é tudo em Texto (*)
(bem ao jeito que a memória e o hd "adoram" cada Caracter + 1 Byte )

como você pode ver , já que colou ( ilegalmente fala baixo ) a Biblioteca ai acima

Ver Obs.: Para o caso, Final da Página 190

-----------------------------------------------------

(*) Pô devia se chamar T e não C rsrs

DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor renanwalenczuk » 30 Nov 2009 09:42

Dj
Tu já usou está lib?
Eu testei no proteus com o pic pic 4550, fiz igualzinho tá no livro mas o lcd não funfa.

Eu fiz uma lib na unha e funcionou, porém não é muito prática. Preciso aprender muito ainda sobre esse compilador :oops:

Renan
"O segredo da criatividade é saber como esconder as fontes."
Albert Einstein
renanwalenczuk
Nibble
 
Mensagens: 69
Registrado em: 17 Nov 2008 14:22
Localização: Canoas - RS

Mensagempor ÁgioFelipe » 09 Nov 2010 09:24

Também tentei usar essa biblioteca, não consegui e achei esse post aqui.
Depois de muito suor descobri que esse bibioteca tem um erro, ai vai ela corrigida:
Código: Selecionar todos
/*********************************************************************************************************
******************************************BIBLIOTECA DISPLAY LCD******************************************
**                                                                               *
**                    Esta biblioteca contém as funções de controle do display LCD.                      *
**                                                                                                     *   
**  Livro: Microcontroladores PIC18 - Aprenda e Programe em Linguagem C.                                 *           
**  Autor: Alberto Noboru Miyadaira                                                                      *
*********************************************************************************************************/

#include<delays.h> //Adiciona a biblioteca de delay.

#ifndef Fosc
  #define Fosc 4 //Define a frequência do oscilador. Este valor deve corresponder a frequência do oscilador utilizado pelo PIC18.
#endif
// Os nome definidos são os próprios nomes dos pinos do display LCD.
#define B7 PORTDbits.RD2 //Define o nome B7 para a estrutra.
#define E_B7 TRISDbits.TRISD2=1;
#define S_B7 TRISDbits.TRISD2=0;
#define B6 PORTDbits.RD4 //Define o nome B6 para a estrutra.
#define E_B6 TRISDbits.TRISD4=1;
#define S_B6 TRISDbits.TRISD4=0;
#define B5 PORTDbits.RD5 //Define o nome B5 para a estrutra.
#define E_B5 TRISDbits.TRISD5=1;
#define S_B5 TRISDbits.TRISD5=0;
#define B4 PORTDbits.RD6 //Define o nome B4 para a estrutra.
#define E_B4 TRISDbits.TRISD6=1;
#define S_B4 TRISDbits.TRISD6=0;
#define E  PORTDbits.RD7  //Define o nome E para a estrutra.
#define E_E TRISDbits.TRISD7=1;
#define S_E TRISDbits.TRISD7=0;
#define RW PORTDbits.RD1//Define o nome RW para a estrutra.
#define E_RW TRISDbits.TRISD1=1;
#define S_RW TRISDbits.TRISD1=0;
#define RS PORTDbits.RD0 //Define o nome RS para a estrutra.
#define E_RS TRISDbits.TRISD0=1;
#define S_RS TRISDbits.TRISD0=0;

void gera_atraso_us(unsigned int atraso)//adaptado para Fosc de 20MHz
{
  do
  {
    Delay1TCY (); //Gera um delay de 1 ciclo de máquina.
    Delay1TCY (); //Gera um delay de 1 ciclo de máquina.
    Delay1TCY (); //Gera um delay de 1 ciclo de máquina.
    Delay1TCY (); //Gera um delay de 1 ciclo de máquina.
    Delay1TCY (); //Gera um delay de 1 ciclo de máquina.

    atraso--;
  }while (atraso>0);
}

unsigned char lcd_envia_controle (unsigned char instrucao_dado, unsigned int escrita_leitura, unsigned char dado, unsigned int atraso_us)
{
/*
instrucao_dado = 0 //Instrução.
instrucao_dado = 1 //Dado.
escrita_leitura = 1 //Leitura.
escrita_leitura = 0 //Escrita.
*/
unsigned char dado_entrada=0;

//Configura os pinos de dados/controle, como saída.
S_B7;
S_B6;
S_B5;
S_B4;
S_E;
S_RW;
S_RS;

RS = instrucao_dado; //Informa se é um comando ou dado.
RW = escrita_leitura; //Informa se é escrita ou leitura.

   if(escrita_leitura == 0)
   {
      B7 = dado>>7;//B7 recebe o bit 7 da variável dado.
      B6 = dado>>6;//B6 recebe o bit 6 da variável dado.
      B5 = dado>>5;//B5 recebe o bit 5 da variável dado.
      B4 = dado>>4;//B4 recebe o bit 4 da variável dado.
      
      E = 1;//Habilita o Display LCD.
      gera_atraso_us(2); //Gera um delay de 2us.
      E = 0; //Desabilita o Display LCD.
      
      B7 = dado>>3;//B7 recebe o bit 3 da variável dado.
      B6 = dado>>2;//B6 recebe o bit 2 da variável dado.
      B5 = dado>>1;//B5 recebe o bit 1 da variável dado.
      B4 = dado;//B4 recebe o bit 0 da variável dado.
         
      E = 1;//Habilita o Display LCD.
      gera_atraso_us(2); //Gera um delay de 2us.
      E = 0; //Desabilita o Display LCD.
      
      gera_atraso_us(atraso_us); //Gera um delay de xus. MAX 255 ciclos de máquina
      
      return 0;
   }
   else
   {
      //Configura os pinos de dados, como entrada.
      E_B7;
      E_B6;
      E_B5;
      E_B4;
      
      E = 1;//Habilita o Display LCD.
     gera_atraso_us(2); //Gera um delay de 2us.
   
      dado_entrada = B7;
      dado_entrada = dado_entrada<<1 | B6;
      dado_entrada = dado_entrada<<1 | B5;
      dado_entrada = dado_entrada<<1 | B4;   
      
      E = 0; //Desabilita o Display LCD.
      E = 1;//Habilita o Display LCD.
      gera_atraso_us(2); //Gera um delay de 2us.
      
      dado_entrada = dado_entrada<<1 | B7;
      dado_entrada = dado_entrada<<1 | B6;
      dado_entrada = dado_entrada<<1 | B5;
      dado_entrada = dado_entrada<<1 | B4;
         
      E = 0; //Desabilita o Display LCD.
      
      gera_atraso_us(atraso_us); //Gera um delay de xus. MAX 255 ciclos de máquina
      
      return dado_entrada;
   }
}

//Limpa a tela e coloca o cursor na linha um e coluna um do display.
void lcd_limpa_tela ( )
{
   lcd_envia_controle (0,0,0x01,2000);
}

//Coloca o cursor na linha um e coluna um do display.
void lcd_cursor_home ( )
{
   lcd_envia_controle (0,0,0x02,2000);
}

//Desloca o cursor para a direita ou esquerda.
void lcd_desloca_cursor(unsigned char direita_esquerda)
{
/*
0 - Desloca o cursor para a direita.
1 - Desloca o cursor para a esquerda.
*/
unsigned char cursor[2] = {0x14, 0x10};   
   lcd_envia_controle (0,0,cursor[direita_esquerda],40);
}

//Desloca a mensagem para a direita ou esquerda.
void lcd_desloca_mensagem(unsigned char direita_esquerda)
{
/*
0 - Desloca a mensagem para a direita.
1 - Desloca a mensagem para a esquerda.
*/
unsigned char cursor[2] = {0x1c, 0x18};
   lcd_envia_controle (0,0,cursor[direita_esquerda],40);
}

//Liga/Desliga o cursor/display.
void lcd_LD_cursor (unsigned char config)
{
/*
0 - Desliga o cursor.
1 - Desliga o display.
2 - Liga o cursor com alternância.
3 - Liga o display e o cursor.
4 - Liga o display e o cursor piscante.
*/
unsigned char cursor [5] = {0x0c, 0x08, 0x0f, 0x0e, 0x0d};
   lcd_envia_controle (0,0,cursor[config],40);
}

//Coloca o cursor em uma determinada posição do LCD.
void lcd_posicao(unsigned char linha, unsigned char coluna)
{
   switch (linha)
   {
      case 1:
         lcd_envia_controle (0,0,0x80+coluna-1,40);
         break;
      case 2:
         lcd_envia_controle (0,0,0xc0+coluna-1,40);
         break;
      case 3:
         lcd_envia_controle (0,0,0x94+coluna-1,40);
         break;
      case 4:
         lcd_envia_controle (0,0,0xd4+coluna-1,40);
         break;
   }   
}

//Escreve um caractere ou símbolo no display.
void lcd_escreve_dado(unsigned char dado)
{
   lcd_envia_controle (1,0,dado,45);
}

//Retorna o caractere presente na posição do cursor.
unsigned char lcd_le_dado( )
{
   return lcd_envia_controle (1,1,0,45);
}

//Retorna o valor do status + contador de endereço.
unsigned char lcd_status ( )
{
   return lcd_envia_controle (0,1,0,40);
}

//Envia String para o Display LCD.
void imprime_string_lcd(const rom char *s_caracteres)
{
   while (*s_caracteres!=0)
   {
      lcd_escreve_dado(*s_caracteres);
      s_caracteres++;
   }
}

//Envia uma matriz de dados para o Display LCD.
void imprime_buffer_lcd( char *s_caracteres, unsigned char tamanho_buffer)
{
   while (tamanho_buffer--)
   {
      lcd_escreve_dado(*s_caracteres);
      s_caracteres++;
   }
}

//Inicializa o display LCD alfanumérico.
void lcd_inicia( unsigned char conf1, unsigned char conf2, unsigned char conf3)
{
/*
Configuração do display LCD:

(0x28)
- Comunicação 4 vias
- Display com 2 linhas
- Matriz 8x5

(0x0f)
- Liga display
- Cursor piscante

(0x06)
- Desloca o cursor para a direita quando um caractere for inserido.
*/
unsigned char config_LCD[6] = {0x03, 0x02, 0x00, 0x00, 0x00};
unsigned char repeticao;

config_LCD[2] = conf1;
config_LCD[3] = conf2;
config_LCD[4] = conf3;

//Configura os pinos de dados/controle, como saída.
S_B7;
S_B6;
S_B5;
S_B4;
S_E;
S_RW;
S_RS;
   
RS = 0; //Instrução.
RW = 0; //Escrita.
E = 0; //Desabilita LCD.

   gera_atraso_us(20000); //Gera um atraso de 20ms.

   for( repeticao = 0 ; repeticao < 3 ; repeticao++ )
   {
      B7 = config_LCD[0]>>3; //B7 recebe o bit 3 do elemento presente na posição 0 da matriz config_LCD.
      B6 = config_LCD[0]>>2; //B6 recebe o bit 3 do elemento presente na posição 1 da matriz config_LCD.
      B5 = config_LCD[0]>>1; //B5 recebe o bit 3 do elemento presente na posição 2 da matriz config_LCD.
      B4 = config_LCD[0]; //B4 recebe o bit 3 do elemento presente na posição 3 da matriz config_LCD.
      
      E = 1;//Habilita o Display LCD.
      gera_atraso_us(2); //Gera um delay de 2us.
      E = 0; //Desabilita o Display LCD.
      
      gera_atraso_us(5000); //Gera um delay de 5ms.
   }


B7 = config_LCD[0]>>3; //B7 recebe o bit 3 do elemento presente na posição 0 da matriz config_LCD.
B6 = config_LCD[0]>>2; //B6 recebe o bit 3 do elemento presente na posição 1 da matriz config_LCD.
B5 = config_LCD[0]>>1; //B5 recebe o bit 3 do elemento presente na posição 2 da matriz config_LCD.
//B4 = config_LCD[0]; //B4 recebe o bit 3 do elemento presente na posição 3 da matriz config_LCD.
B4 = config_LCD[0]>>3; //Esta linha é a correta!
   
E = 1;//Habilita o Display LCD.
gera_atraso_us(2); //Gera um delay de 2us.
E = 0; //Desabilita o Display LCD.

gera_atraso_us(40); //Gera um delay de 40us.



lcd_envia_controle (0,0,config_LCD[2],40);
lcd_envia_controle (0,0,config_LCD[3],40);
lcd_envia_controle (0,0,config_LCD[4],40);

lcd_limpa_tela();

}




A correçã foi apenas em 1 linha, ela tá identificada com o comentário: //Esta linha é a correta!

Fica ai para ajudar os próximos.
ÁgioFelipe
Word
 
Mensagens: 626
Registrado em: 27 Out 2006 20:04

Mensagempor netguto » 04 Mar 2011 19:36

Aff, valeu Felipe, já tava ficando doido com essa biblioteca! Valeu mesmo. Agora ta funfando blz. :lol:
Guto Melo
Avatar do usuário
netguto
Bit
 
Mensagens: 6
Registrado em: 28 Mar 2009 02:11

Erratas do Livro

Mensagempor Alberto N. Miyadaira » 13 Jun 2011 13:31

Boa tarde pessoal,

Erratas do livro podem ser encontradas no site www.microcontroladores.t35.com desenvolvido por um amigo. A atualização da biblioteca foi solicitada ano passado, mas até o momento não foi atualizada pela editora.

O meu blog é www.explorandomicrocontroladores.wordpress.com. Embora esteja sem tempo para escrever, pretendo postar sobre microcontroladores da NXP com processadores Cortex-M3.

Peço desculpas pelo transtorno.

Atenciosamente,
Alberto.
Alberto N. Miyadaira
Bit
 
Mensagens: 34
Registrado em: 12 Dez 2009 10:57

Mensagempor marcelo campos » 14 Jun 2011 07:17

Grande Alberto N. Miyadaira, nem sabia que frequentava aqui o forum, parabéns seu livro é muito bom
marcelo campos
Word
 
Mensagens: 648
Registrado em: 08 Ago 2009 08:37

Mensagempor ze » 14 Jun 2011 08:31

tal desconhecimento é normal pois aquele foi seu primeito post.
vamos inverter...
"... seu livro só poderia ser muito bom pois afinal voce frequentava aqui o forum...."
sucessos!
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor Alberto N. Miyadaira » 14 Jun 2011 10:44

Oi Marcelo Campos e lellis, obrigado pelas postagens!

Apenas para informação, podem entrar em contato comigo através da editora Érica. www.editoraerica.com.br/
Dúvidas, sugestões e críticas são bem vindas para que novas obras possam ser adaptadas às necessidades dos leitores.

Abraços,
Alberto
Editado pela última vez por Alberto N. Miyadaira em 14 Jun 2011 19:57, em um total de 1 vez.
Alberto N. Miyadaira
Bit
 
Mensagens: 34
Registrado em: 12 Dez 2009 10:57

Mensagempor ÁgioFelipe » 14 Jun 2011 14:09

Olá Alberto, é um prazer está falando com você!
Adotei o seu livro na disciplina que leciono no IFCE. É um ótimo livro, parabéns pelo trabalho, tenho muito interesse em ver essa versão completa. Qual o procedimento?
ÁgioFelipe
Word
 
Mensagens: 626
Registrado em: 27 Out 2006 20:04

Mensagempor Alberto N. Miyadaira » 14 Jun 2011 20:05

Que �tima not�cia!

Fico feliz que tenha adotado o livro.

Eu tamb�m tenho interesse em public�-la integralmente, mas dependo dos interesses comerciais da editora, visto que � necess�rio existir demanda para justificar o investimento por parte deles, uma vez que ir� influenciar no valor do livro.

Pessoal, como eu não acompanho muito fóruns, caso queiram entrar em contato, podem fazer através da editora ou mandem uma mensagem particular, pois terei prazer em responder dúvidas sobre o livro.

Obrigado.
Alberto N. Miyadaira
Bit
 
Mensagens: 34
Registrado em: 12 Dez 2009 10:57

Mensagempor AloneWolf » 28 Mar 2012 20:45

Renan
Embora este post ja seja antigo, continuo tendo problemas em rodar o LCD do Miyadaira.
O que mais estava errado?
Abraços :

:?
AloneWolf
 
Mensagens: 4
Registrado em: 28 Mai 2008 17:00

Mensagempor ze » 29 Mar 2012 09:35

oi. é o que dá ficar solitário por quase 4 anos.
acionar um display lcd deste tipo é uma tarefa relativamente simples. Sem tirar o mérito do autor do fonte acima, temo informar que existe maneiras (muito) mais compactas e simples as quais já postei inumeras vezes neste (e em +) forum. P.ex. seria possível escrever algumas frases com um pic10f (e um shiftregister - apesar de eu nunca ter feito este teste). Adotando uma nova estratégia, agora vou esperar você suplicar de joelhos e chorando (menos...pedir basta) para re-publicar as estratégias alternativas compactas de acesso ao display lcd 16x2 100% c. Informo que são baseadas nos exemplos que vêm com um antigo hitech-c e também que posso não repostar mas eventualmente editar este post. Caso tenha vergonha de implorar(menos, pedir basta) e eu preguiça de ver o tópico de novo, sugiro que baixe a versão demo do hitech-c que deve ter os exemplos supramencionados. Se insistir naquela 'montanha' tente contatar o autor - que se dispôs a auxiliar na caminhada. Você pode levar mais tempo pra subir mas seus horizontes se ampliam.
abç & boa sorte!
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x