Você está na página 1de 3

/* --- Constantes --- */

#define RS 0x01 /* endereço do pino register select


*/
#define EN 0x02 /* endereço do pino de enable */

/* -------------------------------- Protótipos das Funções


------------------------------------------------- */

void lcd_write(char chr); /* função para enviear caracteres para


o LCD */
void lcd_cmd(unsigned char cmd); /* função para enviar comandos para o
LCD */
void lcd_init(); /* função para inicializar LCD no modo
de 4 bits */
void lcd_clear(); /* função para limpeza do LCD */

/* ========================================================================= */

void main()
{

CMCON = 0x07;
TRISA = 0xFC;
PORTA = 0x00;
TRISB = 0x0F;
PORTB = 0x00;

while(1)
{

lcd_write('H'); /* envia 'H' */


delay_ms(250); /* aguarda */
lcd_write('e'); /* envia 'e' */
delay_ms(250); /* aguarda */
lcd_write('l'); /* envia 'l' */
delay_ms(250); /* aguarda */
lcd_write('l'); /* envia 'l' */
delay_ms(250); /* aguarda */
lcd_write('o'); /* envia 'o' */
delay_ms(250); /* aguarda */
lcd_write('!'); /* envia '!' */
delay_ms(250); /* aguarda */
lcd_clear(); /* limpa LCD */
delay_ms(250);

}//End while

}// End Main


/* ========================================================================= */
/* --- Inicializa LCD no modo 4 bits --- */
void lcd_init()
{
lcd_cmd(0x20); /* lcd no modo de 4 bits */
lcd_cmd(0x20); /* e também */
lcd_cmd(0x20); /* 5x8 pontos por caractere */
lcd_cmd(0x00); /* liga display e cursor 0h */
lcd_cmd(0xE0); /* liga display e cursor Eh */
lcd_cmd(0x00); /* modo de incremento de endereço para
direita 0h */
lcd_cmd(0x60); /* modo de incremento de endereço para
direita 6h */
lcd_clear(); /* limpa LCD */

} /* end lcdSER_init */

/* --- Escreve um caractere LCD --- */


void lcd_write(char chr)
{

PORTB = chr&0xF0|RS; /* limpa nibble menos significativo do


chr e seta RS */
PORTB = chr&0xF0|RS|EN; /* seta enable para enviar nibble mais
significativo */
delay_us(1200); /* aguarda 1,2ms */
PORTB = chr&0xF0|RS&~EN; /* clear enable */
delay_us(1200); /* aguarda 1,2ms */

chr <<= 4; /* atualiza chr para enviar nibble


menos significativo */

PORTB = chr|RS; /* seta RS */


PORTB = chr|RS|EN; /* seta enable para enviar nibble menos
significativo */
delay_us(1200); /* aguarda 1,2ms */
PORTB = chr|RS&~EN; /* clear enable */
delay_us(1200); /* aguarda 1,2ms */

} /* end lcdSER_write */

/* --- Envia comandos para LCD --- */


void lcd_cmd(unsigned char cmd)
{
PORTB = cmd&~RS; /* clear RS */
PORTB = cmd|EN; /* seta enable para envio do comando */
delay_us(1200); /* aguarda 1,2ms */
PORTB = cmd&~EN; /* limpa enable */
delay_us(1200); /* aguarda 1,2ms */

} /* end lcdSER_cmd */
/* --- Limpa LCD --- */
void lcd_clear()
{
PORTB = 0x00; /* envia 0h e*/
PORTB = 0x20; /* envia 2h para return home */
PORTB = 0x00; /* envia 0h e */
PORTB = 0x10; /* envia 1h para clear lcd */

} /* end lcdSER_clear */

Você também pode gostar