Ir ao conteúdo
  • Cadastre-se

LCD JHD162A não inicializa


André GRA

Posts recomendados

Estou com um programa bem simples que mostra uma frase em cada linha num LCD 16x2 em 8 bits.o programa funciona perfeitamente no proteus, mas nao consegue nem inicializar o LCD no hardware. eu uso o MPLAB X e o C18. alguem tem ideia de como posso resolver isso ?

esse é meu código:

#include <p18f4620.h> //Aqui é informado o processador que será utilizado pelo projeto

#include <string.h>

#include "lcd.h"

#include <delays.h>

#pragma config OSC = XT //Clock interno

#pragma config WDT = OFF //Desliga Watchdog

#pragma config LVP = OFF //Desliga programação em baixa tensão

void lcd_texto(char *texto);

void main(void)

{

char dado[20];

lcd_inic();

lcd_locate(1,1);

strcpypgm2ram(dado,"Bom dia");

lcd_texto(dado);

lcd_locate(2,1);

strcpypgm2ram(dado,"Tecnologia");

lcd_texto(dado);

while(1);

}

void lcd_texto(char *texto)

{

do

{

lcd_dado(*texto);

*texto++;

}while(*texto);

}

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

* Rotina de Inicialização do LCD *

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

void lcd_inic(void)

{

ADCON1=0b00001111;

TRISD= 0b00000000;

TRISE= 0b00000000;

lcd_cmd(0x30);

Delay1KTCYx(3);

lcd_cmd(0x30);

lcd_cmd(0x30);

lcd_cmd(0x38);

lcd_cmd(0x01);

Delay1KTCYx(1);

lcd_cmd(0x0C);

lcd_cmd(0x06);

}

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

* Rotina de Envio de Comando para o LCD *

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

void lcd_cmd(unsigned char dado)

{

PORTEbits.RE2=0; // Põe pino de RS em baixo, modo comando

PORTD=dado; // Põe o dado no portd

Delay1TCY(); // Aguarda 2 us, acomodação

PORTEbits.RE1=1; // Gera pulso de clock

Delay1TCY();

PORTEbits.RE1=0;

Delay1KTCYx(1);

}

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

* Rotina de Envio de Dados para o LCD *

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

void lcd_dado(unsigned char dado)

{

PORTEbits.RE2=1; // Seta o pino RS, modo dado

PORTD=dado; // Põe o dado no portd

Delay1TCY(); // Aguarda 2us, acomodação

Delay1TCY();

PORTEbits.RE1=1; // Gera pulso de clock

Delay1TCY();

Delay1TCY();

PORTEbits.RE1=0;

Delay1KTCYx(1);

}

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

* Rotina de Envio de posição de curso para o LCD *

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

void lcd_locate(char linha,char coluna)

{

coluna--;

if(linha==1)

linha=0x80 + coluna;

else

linha=0xC0 + coluna;

lcd_cmd(linha);

}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

APRENDA TUDO SOBRE HARDWARE!

HARDWARE 2022

 

CLIQUE AQUI E BAIXE AGORA MESMO!