Escolar Documentos
Profissional Documentos
Cultura Documentos
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)
// // // // // //
{ //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 */
//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
// // // // // //
o o o o o o
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 } }