Como disse no artigo anterior, a solução acabaria por fazer a mina própria biblioteca, assim este artigo é sobre o estado em que se encontra a mesma.
Consegui fazer com que os primeiros caracteres aparecessem no ecrã.
Daí dei um jeito no código "em bruto", para ficar mais flexível e fácil de usar no futuro.
Basicamente o que estou a fazer é a inicialização do LCD, a colocação do cursor num endereço e a escrita de caracteres com incremento automático do endereço do cursor.
Código para utilização do LCD com comunicação a 4 bits.Rotina de configuração do LCD:
void config_lcd(){// E RS RW D7 D6 D5 D4// RB7 RB6 RB5 RB4 RB3 RB2 RB1char i;char config[7]={0b10000100, //1ª config - 4bits0b10000100, //4bits; 2linhas; 5x8pontos + E0b10010000, //4bits; 2linhas; 5x8pontos + E0b10000000, //E + display ON; mostra cursor; cursor pisca0b10011110, //E + display ON; mostra cursor; cursor pisca0b10000000, //E + cursor incrementa; sem display shift0b10001100, //E + cursor incrementa; sem display shift};for(i=0;i<7;i++){PORTB = config[i];__delay_us(50);PORTBbits.RB7=0;__delay_us(50);}}
Rotina de posição do cursor:
void cursor_lcd_pos(char posicao){/** 00h -> linha 1* 40h -> linha 2*/PORTB = ((posicao>>3) & 0b1110) + 0b10010000;__delay_us(50);PORTBbits.RB7=0;__delay_us(50);PORTB = ((posicao<<1) & 0b11110) + 0b10000000;__delay_us(50);PORTBbits.RB7=0;}
Rotina de escrita no display:
void escrever_lcd(char texto[]){char length, i;length=strlen(texto);for(i=0;i<length;i++){PORTB = ((texto[i]>>3) & 0b11110) + 0b11000000;__delay_us(50);PORTBbits.RB7=0;__delay_us(50);PORTB = ((texto[i]<<1) & 0b11110) + 0b11000000;__delay_us(50);PORTBbits.RB7=0;__delay_us(50);}}
Exemplo de código main();
void main(){PIC_init();config_lcd();cursor_lcd_pos(3);escrever_lcd("Ola mundo ");}











