Eletrônica digital – Display LCD com PIC

Já escrevi 2 posts relacionados a display LCD com Arduino; o com 5 botões e backlight e o display sem botões e sem backlight. Nesse post será exemplificada a configuração do display LCD sem backlight com PIC16F1827. Algumas variáveis de ambiente mudam conforme o modelo e família do PIC, mas nada de tão drástico.


O modelo 16F1827 foi escolhido pelo número de pinos e recursos disponíveis (que vão além do inicialmente necessário), além de ser um modelo de baixo consumo. Apesar da apresentação desse post tratar apenas da configuração desse display em PIC utilizando a IDE MikroC, o propósito vai um pouco além; utilizarei essa composição para fazer sniffing e debugging de outras controladoras que estiver programando, fazendo a comunicação entre as MCUs utilizando UART ou I2C e exibindo os resultados no display; acredito que seja um tanto mais informativo que ‘debugar’ no LED.

As conexões de exemplo da IDE são um pouco diferente, pois o display possui apenas 14 pinos no exemplo, enquanto o display em uso possui 16. Mas isso não é nada de mais. Na verdade, os pinos sobressalentes são pertinentes ao backlight, os demais pinos seguem o mesmo padrão dos demais displays.

Também utilizo um potenciômetro de 10k para controlar o contraste do display.

Então, para esse modelo as conexões ficam assim:
PIC/Display
RB5/6
RB4/4
RB3/14
RB2/13
RB1/12
RB0/11

Verifique também os pinos de GND e +5:
Display
1 – Gnd
2 – Vdd
5 – Gnd
3 – PotOut

O potenciômetro é ligado assim:
1 – Gnd
2 – PotOut
3 – +5v

O esquema em Fritzing:

O código é esse:


// sinais
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;

//mensagens de texto a exibir
char txt1[] = " suhanko.com ";
char txt2[] = "PIC16F1827";
char txt3[] = "Display LCD";
char txt4[] = "com PIC";

char i; // Loop variable

void Move_Delay() { // delay do deslocamento horizontal
    Delay_ms(2);
}

void main(){
    ANSELA = 0; // configurar pinos analógicos como digital (ANSEL em alguns PICs)
    ANSELB = 0;
    WPUA = 0;
    WPUB = 0;

    C1ON_bit = 0; // Desabilitando comparadores
    C2ON_bit = 0;

    Lcd_Init(); // inicializa LCD

    Lcd_Cmd(_LCD_CLEAR); // limpa display
    Lcd_Cmd(_LCD_CURSOR_OFF); // desliga o cursor
    Lcd_Out(1,2,txt3); // texto na primeira linha

    Lcd_Out(2,3,txt4); // texto na segunda linha
    Delay_ms(20); // esse delay normalmente deverá ser 2000ms para 2 segundos

    //trocar a mensagem do display agora...
    Lcd_Cmd(_LCD_CLEAR);
    Lcd_Out(1,1,txt1); 
    Lcd_Out(2,3,txt2); 

    Delay_ms(2);

    // Deslocamento de texto
    for(i=0; i<4; i++) { 
        Lcd_Cmd(_LCD_SHIFT_RIGHT);
        Move_Delay();
    }

    while(1) {
        for(i=0; i<8; i++) { 
            Lcd_Cmd(_LCD_SHIFT_LEFT);
            Move_Delay();
        }

        for(i=0; i<8; i++) { 
            Lcd_Cmd(_LCD_SHIFT_RIGHT);
            Move_Delay();
        }
    }
}

E um video para finalizar:

Um pouquinho mais trabalhoso que com Arduino, mas graças à IDE Mikroc, nada que 5 minutos a mais não resolvam!

Se gostou, não deixe de compartilhar; dê seu like no video e inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Prefere seguir-nos pelo facebook? Basta curtir aqui.

Prefere twitter? @DobitAoByte.

Próximo post a caminho!


Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.

Um comentário em “Eletrônica digital – Display LCD com PIC

Deixe uma resposta