void lcd_ini() // rotina de inicialização do display { byte conta; output_low(lcd_d4); output_low(lcd_d5); output_low(lcd_d6); output_low(lcd_d7); output_low(lcd_rs); #ifdef lcd_rw output_high(lcd_rw); #endif output_low(lcd_enable); delay_ms(15); // envia uma seqüência de 3 vezes 0x03 // e depois 0x02 para configurar o módulo // para modo de 4 bits for(conta=1;conta<=3;++conta) { lcd_envia_nibble(3); delay_ms(5); } lcd_envia_nibble(2); // envia string de inicialização do display for(conta=0;conta<=3;++conta) lcd_envia_byte(0,INI_LCD[conta]); }
// rotina de inicialização do display void lcd_ini(void) { int cont; output_low(lcd_d4); output_low(lcd_d5); output_low(lcd_d6); output_low(lcd_d7); output_low(lcd_rs); output_low(lcd_en); #ifdef lcd_en2 output_low(lcd_en2); #endif delay_ms(15); lcd_modulo = 0; // envia uma seqüência de 3 vezes 0x03 // e depois 0x02 para configurar o módulo // para modo de 4 bits for(cont = 1; cont <= 3; ++cont) { lcd_envia_nibble(3); delay_ms(4); } lcd_envia_nibble(2); // envia string de inicialização do display for(cont = 0; cont <= 3; ++cont) { lcd_envia_byte(0, ini_lcd[cont]); } // aguarda tempo de processamento do módulo lcd delay_ms(5); // desbilita cursor do lcd lcd_envia_byte(0, 0x0c); // Inicializa ponteiros de posição lcd_modulo = 1; lcd_x = 1; lcd_y = 1; }
// envia um dado de um byte para o display void lcd_envia_byte(short modo, int dado) { // configura a linha rs dependendo do modo selecionado output_bit(lcd_rs, modo); // envia a primeira parte do byte lcd_envia_nibble(dado >> 4); // envia a segunda parte do byte lcd_envia_nibble(dado & 0x0f); // aguarda 50 us delay_us(50); }
void lcd_envia_byte( boolean endereco, byte dado ) { // coloca a linha rs em 0 output_low(lcd_rs); // aguarda o display ficar desocupado //while ( bit_test(lcd_le_byte(),7) ) ; // configura a linha rs dependendo do modo selecionado output_bit(lcd_rs,endereco); delay_us(100); // aguarda 100 us // caso a linha rw esteja definida, coloca em 0 #ifdef lcd_rw output_low(lcd_rw); #endif // desativa linha enable output_low(lcd_enable); // envia a primeira parte do byte lcd_envia_nibble(dado >> 4); // envia a segunda parte do byte lcd_envia_nibble(dado & 0x0f); }