

O maior inimigo do conhecimento não é a ignorância, mas sim a ilusão de que conhecemos. (Stephen Hawking)

DISPLAY LCD 16x02
Frequentemente, os trabalhos com PIC exigem de alguma forma a amostra de dados, afinal não estamos criando um programa para ser processado no computador quando há o auxílio de um terminal. Portanto os LCDs são periféricos de altíssima utilidade nesses momentos para vermos o que está acontecendo dentro do nosso microcontrolador. Vamos utilizar um tipo de LCD que possua 16 colunas por 2 linhas, é o chamado LCD 16x2. Nosso microcontrolador será o PIC16F877A. Vamos pôr a mão na massa que esse é um assunto muito simples e rápido!
Antes de qualquer coisa é de suma importância conhecermos o nosso LCD, seus pinos e suas funcionalidades. Observe a figura:
Vss: Ground. Pino que deve ser aterrado.
Vcc: Pino de alimentação do nosso LCD.
Vo: Pino de ajuste do contraste da tela. Ligado em um potenciômetro para fazer esse trabalho.
RS: Pino de habilitação de alguns funcionalidades do LCD. Ligado ao microcontrolador.
R/W: Read/Write. Leitura e escrita de alguns dados. Ligado ao microcontrolador.
E: Enable. Pino para habilitação de alguns funcionalidades do LCD. Ligado ao microcontrolador.
DB0 ao DB7: Pinos por onde passam os dados enviados na programação.
LED+ e LED-: Pinos correspondentes à luz de fundo. Varia com o tipo de LCD, alguns não possuem esses pinos e portanto não possuem luz de fundo.
Agora que já vimos os pinos que compões um LCD 16x2 podemos fazer mais alguns comentários. O pinos de dados, DB0 – DB7, não precisam necessariamente serem todos ligados, é o que vamos ver aqui pois vamos utilizar apenas 4 pinos destes para fazermos a transmissão dos dados e mostra-los na tela.
Enfim, vamos ver como ficará nossa ligação dentro do ISIS 7 Professional.
Agora, que já fizemos nossas ligações, vamos nos atentar a algumas observações para começarmos a programar. O CCS já possui uma biblioteca para facilitar os trabalhos com o LCD, é a LCD.c e quando a abrimos vemos escrito logo no início LCDD.c. Portanto, essa biblioteca sofreu algumas mudanças de uma versão para outra que para mim dificultaram muito as coisas. Então, se você usa a versão 4.78 ou, se quando abre sua biblioteca LCD.c vê escrito no início LCDD.c, terá que fazer uma substituição para acompanhar o restante dessa aula. A nova biblioteca pode ser baixada diretamente NESTE LINK.
Agora que você baixou sua biblioteca vá no local em que você instalou o seu CCS (Geralmente em C:\Arquivos de Programa\PICC) e abra a pasta Drivers, renomeie a atual biblioteca para LCD_backup.c e copie e cole nesta pasta a biblioteca que você acabou de baixar com o nome LCD.c. Pronto, estamos preparados para começarmos a configurar o LCD mas deixe a pasta aberta, daqui a pouco vamos usá-la!
Abra o PIC C Compiler, clique em PIC Wizard e selecione o PIC16F877A e clique em OK, o resto das configurações iremos fazer dentro das nossas linhas de código.
Agora vamos abrir a biblioteca LCD.c e vamos copiar algumas linhas para colocarmos em nosso código.
Antes mesmo do void main() você deverá inserir essa linha:
#define LCD_DATA_PORT getenv("SFR:PORTD")
Essa linha de código permite dizermos qual será o conjunto de portas que vamos utilizar que no nosso caso é o conjunto de portas B. Portanto vamos modificar a parte PORTD para PORTB. Sempre assim dependendo do conjunto de portas utilizadas. No nosso caso ficará assim:
#define LCD_DATA_PORT getenv("SFR:PORTB")
Logo embaixo dessa mesma linha vamos copiar as seguintes linhas de código:
#define LCD_ENABLE_PIN PIN_E0
#define LCD_RS_PIN PIN_E1
#define LCD_RW_PIN PIN_E2
#define LCD_DATA0 PIN_D4
#define LCD_DATA1 PIN_D5
#define LCD_DATA2 PIN_D6
#define LCD_DATA3 PIN_D7
Essas linhas são outra parte das configurações que devemos fazer e que permitem informar ao microcontrolador quais pinos dele devem ser usados para funcionamento do nosso LCD. Por exemplo, a primeira linha quer saber em qual pino do PIC está ligado o pino Enable do LCD. Para isso devemos ver as nossas ligações no ISIS. Logo vamos ver que o pino Enable do LCD está ligado ao pino B2 do PIC e portanto a mudança ficara assim:
#define LCD_ENABLE_PIN PIN_B2
Da mesma forma deve acontecer com as outras linhas que ficará dessa forma:
#define LCD_ENABLE_PIN PIN_B2
#define LCD_RS_PIN PIN_B0
#define LCD_RW_PIN PIN_B1
#define LCD_DATA0 PIN_B4
#define LCD_DATA1 PIN_B5
#define LCD_DATA2 PIN_B6
#define LCD_DATA3 PIN_B7
Após incluir essas linhas devemos agora chamar dentro do código a biblioteca correspondente ao LCD que é a LCD.c. Vamos digitar logo embaixo o seguinte:
#include <lcd.c>
Dentro do main(), logo antes de tudo, devemos chamar também a função que inicializa o nosso LCD. Digite:
lcd_init();
Tudo pronto, agora só vamos declarar uma variável do tipo long int de nome ano atribuindo o valor 2013 para mostramos na tela. Assim:
long int ano = 2013;
Toda a configuração de código ficará desta forma:
Agora sim, vamos programar!
O função para amostra de dados na tela do nosso LCD é o lcd_putc(dados), onde o campo dados será onde vamos inserir, entre aspas, o nosso texto. Exemplo:
lcd_putc(“TEXTO”);
No entanto se quisermos fazer o uso de variáveis, a função lcd_putc() não será mais usada, mas sim a função printf(). Desta forma:
Printf(lcd_putc, “TEXTO: %d”, valor);
Sabendo isso, vamos a nossa programação.
While(TRUE)
{
lcd_putc("TronicSide"); //Mostra TronicSide.
Printf(lcd_putc," %ld", ano);//Mostra 2013 por meio da variável.
Delay(1000); //Espera 1 segundo.
}
Compile o Código, carregue-o no ISIS 7 Professional e realize a simulação. A simulação funcionando:



