Você está na página 1de 3

Lcd_lcd #include <16f877A.

h> // microcontrolador utilizado #device adc=10 #fuses xt,nowdt,noprotect,put,brownout,nolvp,nocpd,nowrt // configurao dos fusveis #use delay(clock=4000000) // define o clock do cristal #byte porta = 0x05 // define porta 0x05 como porta #byte portb = 0x06 // define porta 0x06 como portb #byte portc = 0x07 // define porta 0x07 como portc #byte portd = 0x08 // define porta 0x08 como portd #byte porte = 0x09 // define porta 0x09 como porte #define SERVO1 PIN_A0 #define SERVO2 PIN_A1 #define SERVO3 PIN_A2 #define BOTAO1 PIN_B0 #define BOTAO2 PIN_B1 #define BOTAO3 PIN_B2 #define BOTAO4 PIN_B3 #define BOTAO5 PIN_B4 #define BOTAO6 PIN_B5 #define BOTAO7 PIN_B6 #define lcd_enable pin_d0 #define lcd_rs pin_d1 #define lcd_db4 pin_d4 #define lcd_db5 pin_d5 #define lcd_db6 pin_d6 #define lcd_db7 pin_d7 /* Envio de "Nibble" para o LCD */ //Esta rotina l o "Nibble" inferior de void envia_nibble_lcd(int dado)

// // // // // //

pino pino pino pino pino pino

enable do LCD rs do LCD de dados d4 do de dados d5 do de dados d6 do de dados d7 do

LCD LCD LCD LCD

uma varivel e envia para o LCD.

{ //Carrega as vias de dados (pinos) do LCD de acordo com o nibble output_bit(lcd_db4, bit_test(dado,0)); //Carrega DB4 do LCD com output_bit(lcd_db5, bit_test(dado,1)); //Carrega DB5 do LCD com output_bit(lcd_db6, bit_test(dado,2)); //Carrega DB6 do LCD com output_bit(lcd_db7, bit_test(dado,3)); //Carrega DB7 do LCD com //Gera um pulso de enable output_high(lcd_enable); delay_us(250); o LCD output_low(lcd_enable); return; } /* Envio de Byte para o LCD */

lido o bit o bit o bit o bit

DADO<0> DADO<1> DADO<2> DADO<3>

// ENABLE = 1 // Recomendado para estabilizar // ENABLE = 0 // Retorna ao ponto de chamada

//Esta rotina ir enviar um dado ou um comando para o LCD conforme abaixo: // ENDEREO = 0 -> a varivel DADO ser uma instruo // ENDEREO = 1 -> a varivel DADO ser um caractere void envia_byte_lcd(boolean endereco, int dado) { output_bit(lcd_rs,endereco); // Seta o bit RS para instruo ou c aractere delay_us(250); // Aguarda 100 us para e stabilizar o pino do LCD output_low(lcd_enable); // Desativa a linha ENAB

LE envia_nibble_lcd(dado>>4); mando envia_nibble_lcd(dado & 0x0f); parte BAIXA do delay_us(250); abilizar o LCD return; nto de chamada da funo } void escreve_lcd(int c) { envia_byte_lcd(1,c); } /* Funo para limpar o LCD */ void limpa_lcd() { envia_byte_lcd(0,0x01); par o LCD delay_ms(250); abilizar o LCD return; onto de chamada da funo } /*Inicializa o LCD */ void inicializa_lcd() { output_low(lcd_db4); output_low(lcd_db5); output_low(lcd_db6); output_low(lcd_db7); output_low(lcd_rs); output_low(lcd_enable); ow) delay_ms(15); envia_nibble_lcd(0x03); lay delay_ms(5); envia_nibble_lcd(0x03); lay delay_ms(5); envia_nibble_lcd(0x03); lay delay_ms(5); envia_nibble_lcd(0x02); delay_ms(1); envia_byte_lcd(0,0x28); bits, envia_byte_lcd(0,0x0c); cursor limpa_lcd(); envia_byte_lcd(0,0x06); a a direita return; a funo

// Envia a parte ALTA do dado/co // Limpa a parte ALTA e envia a // dado/comando // Aguarda 40us para est // Retorna ao po

// Envia instruo para lim // Aguarda 2ms para est // Retorna ao p

// // // // // //

Garante Garante Garante Garante Garante Garante

que que que que que que

o o o o o o

pino pino pino pino pino pino

DB4 esto em 0 (low) DB5 esto em 0 (low) DB6 esto em 0 (low) DB7 esto em 0 (low) RS esto em 0 (low) ENABLE esto em 0 (l

// Aguarda 15ms para estabilizar o LCD // Envia comando para inicializar o disp // Aguarda 5ms para estabilizar o LCD // Envia comando para inicializar o disp // Aguarda 5ms para estabilizar o LCD // Envia comando para inicializar o disp // Aguarda 5ms para estabilizar o LCD // CURSOR HOME Envia comando para 0 o contador // Aguarda 1ms para estabilizar o LCD // FUNCTION SET - Configura o LCD para 4 // DISPLAY CONTROL - Display ligado, sem // Limpa o LCD // ENTRY MODE SET - Desloca o cursor par // Retorna ao ponto de chamada d

} void esc_lcd(char c) { switch (c) { case '\F' : envia_byte_lcd(0,1); // SE CASO O DADO ENVIADO FOR INT delay_ms(2); break; case '\n' : envia_byte_lcd(0,0xc0);break;// ENVIA DADO PARA LINHA 2 default : envia_byte_lcd(1,c); break;// SE CASO O DADO ENVIADO FOR CARA CTERE } }