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 RB1

    char i;
    char config[7]={
                    0b10000100, //1ª config - 4bits
                    0b10000100, //4bits; 2linhas; 5x8pontos + E
                    0b10010000, //4bits; 2linhas; 5x8pontos + E
                    0b10000000, //E + display ON; mostra cursor; cursor pisca
                    0b10011110, //E + display ON; mostra cursor; cursor pisca
                    0b10000000, //E + cursor incrementa; sem display shift
                    0b10001100, //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 ");

}

8 Responses so far.

  1. Bom dia teria como você postar o cabeçalho ? pois estou tendo dificuldade, para compilar a biblioteca, desde já agradeço e parabenizo-o pelo ótimo trabalho.

    se puder enviar o cabeçalho por e-mail ou postar no blog eu agradeço.

    reinoso360@gmail.com

  2. Olá.

    Em que parte está a ter problemas?
    Não sei o que entende por "cabeçalho", mas estas são funções que, após configurar o PIC, chamo a partir do main().

    No final eu tenho um exemplo de programa main(). Não há nenhum "include" especial... é somente isto que está em cima.
    Configure o processador, inicialize o micro e depois é somente copiar as funções e cola-las no programa.


    Possivelmente não estou a ajudar muito, pois não estou a ver muito bem o que pretende com "cabeçalho"... :(.



    Cumps, e obrigado

  3. Pro favor eu necessito de quais #include é necessário para este programa,
    e o mesmo necessita da biblioteca xlcd?

  4. Olá.

    Não necessitou de biblioteca alguma...

  5. Consegui so faltava colocar colocar as portas como TRIS = 1; deu certo
    Obrogado
    Agora como eu imprimo no LCD uma variavel?

  6. O ciclo é o mesmo...

    Só enviar o numero em ASCII para esse ciclo e ele imprime no LCD.

  7. OI David. Seu site é muito bom, parabéns. Gostaria de saber a sua opinião (comarativa) sobre o XC8 e o C18. Estou querendo migrar para um dos dois, cansei de CCS.
    Andei usando um pouco o XC8 e conversando com outros programadores, me disseram que este é bom, mas tem poucas exemplos ou rotinas prontas.
    Obrigado

  8. Olá.

    Sim, exemplos são muito poucos e bibliotecas nenhumas... mas é o futuro.
    Eles agora só desenvolvem XC e deixaram o C18, o hi-tech, etc.

    Demora um pouco até ganhar hábito a trabalhar com o MPLAB XC mas depois de algum tempo começamos a perceber as melhorias e uma proximidade maior com a "máquina".

    Aposte em XC8 ;)


    Abraço

Enviar um comentário