Sei sulla pagina 1di 6

Display LCD com PIC

Roteiro No 03
Fundao Universidade Federal de Rondnia, Ncleo de Cincia e Tecnologia, Departamento de Engenharia - DEE
Curso de Bacharelado em Engenharia Eltrica - Disciplina de Sistemas Microprocessados
Elaborao: Ivan S. de Oliveira - Reviso: Prof. M.Sc. Ciro Egoavil
Laboratrio de Sistemas Microprocessados

I. I NTRODUO PROTEUS Professional


Display de cristal lquido, acrnimo de LCD (em ingls
O liquid crystal display), um painel fino usado para exibir
informaes por via eletrnica, como texto, imagens e vdeos.
IV. A MBIENTE MPLAB
O controle do didplay LCD 16x2 pode ser realizado uti-
lizando a linguagem Assembly para microcontrolador PIC con-
Um LCD consiste de um lquido polarizador da luz, elet-
forme o cdigo abaixo, onde se props a escrita de duas frases;
ricamente controlado, que se encontra comprimido dentro de
"ENGENHARIA ELETRICA"na primeira linha e "Sistemas
celas entre duas lminas transparentes polarizadoras. Os eixos
Microprocessados"na segunda. As frases movimentam-se uma
polarizadores das duas lminas esto alinhados perpendicular-
coluna a cada interrupo gerada pelo estouro do Timer0.
mente entre si. Cada cela provida de contatos eltricos que
permitem que um campo eltrico possa ser aplicado ao lquido #include <P16F877A.INC>
no interior.
__CONFIG _CP_OFF&_PWRTE_ON& _WDT_OFF & _XT_OSC
Entre as suas principais caractersticas est a sua leveza,
sua portabilidade, e sua capacidade de ser produzido em #DEFINE BANCO0 BCF STATUS,RP0
quantidades muito maiores do que os tubos de raios catdicos #DEFINE BANCO1 BSF STATUS,RP0
(CRT). Seu baixo consumo de energia eltrica lhe permite ser
utilizado em equipamentos portteis, alimentados por bateria
CBLOCK 0X020
eletrnica. TEMPO1
um dispositivo eletrnico-ptico modulado, composto por TEMPO0
um determinado nmero de pixels, preenchidos com cristais ENDC
lquidos e dispostos em frente a uma fonte de luz para produzir
imagens em cores ou preto e branco. #DEFINE DISPLAY PORTD
#DEFINE ENABLE PORTE,1
Os mdulos LCD so interfaces de sada muito til em #DEFINE RS PORTE,0
sistemas microprocessados. Estes mdulos podem ser grficos
e a caractere e so projetados para conectar-se com a maioria
das CPUs disponveis no mercado, bastando para isso que esta ORG 0x0000
CPU atenda as temporizaes de leitura e escrita de instrues GOTO CONFIGU
e dados, fornecido pelo fabricante do mdulo. ORG 0X0004
No entanto, ocorre que o mdulo LCD quando alimen- BCF INTCON,T0IF
tado necessita de algumas instrues de inicializao que MOVLW 0X1C
identificar qual a forma de transmisso de dados que ser CALL ESCREVE
estabelecida entre a CPU e o mdulo. RETFIE
No apndice deste trabalho so apresentados informaes
sobre a pinagem, instrues de inicializao e endereos de DELAY_MS
memria para um display LCD 16x2. MOVWF TEMPO1
DELAY_MSB
II. O BJETIVOS MOVLW .250
Neste roteiro realizado uma introduo ao controle de MOVWF TEMPO0
DELAY_MSA
display LCD com microcontroladores PIC, utilizando as lin- NOP
guagens Assembly, no ambiente de programao MPLAB e, DECFSZ TEMPO0,F
tambm, a linguagem C, no ambiente CCS C Compiler. GOTO DELAY_MSA
apresentado tambm, a utilizao de recursos disponveis no
microcontroladores como: Interrupes e Timers. DECFSZ TEMPO1,F
GOTO DELAY_MSB
III. S OFTWARES U TILIZADOS RETURN
MPLAB
CCS C Compiler
ESCREVE MOVLW 0X92
MOVWF DISPLAY CALL ESCREVE
NOP BSF RS
BSF ENABLE MOVLW E
MOVLW .1 CALL ESCREVE
CALL DELAY_MS MOVLW N
BCF ENABLE CALL ESCREVE
NOP MOVLW G
RETURN CALL ESCREVE
MOVLW E
CALL ESCREVE
CONFIGU MOVLW N
BANCO1 CALL ESCREVE
MOVLW B00000000 MOVLW H
MOVWF TRISD CALL ESCREVE
MOVLW A
MOVLW B00000000 CALL ESCREVE
MOVWF TRISE MOVLW R
CALL ESCREVE
MOVLW I
MOVLW B10001110 CALL ESCREVE
MOVWF ADCON1 MOVLW A
CALL ESCREVE
MOVLW B10000111 MOVLW
MOVWF OPTION_REG CALL ESCREVE
MOVLW E
BANCO0 CALL ESCREVE
MOVLW B10000000 MOVLW L
MOVWF INTCON CALL ESCREVE
MOVLW E
MOVLW B01000000 CALL ESCREVE
MOVWF ADCON0 MOVLW T
CALL ESCREVE
CLRF TEMPO0 MOVLW R
CLRF TEMPO1 CALL ESCREVE
CLRF PORTD MOVLW I
CLRF PORTE CALL ESCREVE
MOVLW C
MOVLW .1 CALL ESCREVE
CALL DELAY_MS MOVLW A
CALL ESCREVE

INICIALIZACAO_DISPLAY BCF RS
BCF RS MOVLW 0XCF
MOVLW 0x38 CALL ESCREVE
CALL ESCREVE BSF RS
MOVLW S
MOVLW .2 CALL ESCREVE
CALL DELAY_MS MOVLW i
CALL ESCREVE
MOVLW 0X38 MOVLW s
CALL ESCREVE CALL ESCREVE
MOVLW t
MOVLW 0X06 CALL ESCREVE
CALL ESCREVE MOVLW e
CALL ESCREVE
MOVLW 0x0C MOVLW m
CALL ESCREVE CALL ESCREVE
MOVLW a
MOVLW 0X01 CALL ESCREVE
CALL ESCREVE MOVLW s
CALL ESCREVE
MOVLW .1 MOVLW
CALL DELAY_MS CALL ESCREVE
MOVLW M
CALL ESCREVE
BCF RS MOVLW i
CALL ESCREVE desviada para o vetor de interrupes ORG 0x0004, onde
MOVLW c enviado o comando para o display deslocar a mensagem para
CALL ESCREVE a esquerda.
MOVLW r
CALL ESCREVE A Figura 1 apresenta a simulao deste programa no soft-
MOVLW o ware PROTEUS.
CALL ESCREVE
MOVLW p
CALL ESCREVE
MOVLW r
CALL ESCREVE
MOVLW o
CALL ESCREVE
MOVLW c
CALL ESCREVE
MOVLW e
CALL ESCREVE
MOVLW s
CALL ESCREVE
MOVLW s
CALL ESCREVE
MOVLW a
CALL ESCREVE
MOVLW d
CALL ESCREVE
MOVLW o
CALL ESCREVE
MOVLW s
CALL ESCREVE
BCF RS
BCF INTCON,T0IF
BSF INTCON,5

LOOP
GOTO LOOP
END

No incio do cdigo definido o PORTD o responsvel pela


comunicao com a entrada de dados do LCD e os bits 0 e 1 do Figura 1. Simulao no PROTEUS.
PORTE responsvel pelo envio dos sinais de controle Enable
e RS. Logo aps, realizada a configurao dos registradores
de funes especiais. V. CCS C C OMPILER
O registrador ADCON1 configurado de forma a permitir A principal vantagem de se usar linguagens de alto nvel,
que os bits da PORTE sejam utilizados como I/O digital e o no caso a linguagem C, esta na menor interao do pro-
ADCON0 est configurado para desligar a converso AD. gramador com o hardware, no que diz respeito ao controle
O registrador OPTION REG responsvel pela configu- do mesmo (ajuste de bancos de registradores, sequncias de
rao de algumas funes internas do PIC. No cdigo em inicializao, etc.). Desta forma o programador dedica seu
questo, este registrador determina que o clock do Timer0 ser tempo basicamente lgica do problema e no aos detalhes
proveniente do clock interno do sistema (Fosc/4) e determina, do microcontrolador.
tambm, o prescaler conectado a o Timer0 para 1:256. A linguagem C estruturada, cuja caracterstica e a com-
O INTCON responsvel pelo controle de interrupes partimentalizao do cdigo e dos dados. Trata-se da habil-
no PIC. Este foi configurado para habilitar a interrupo idade de uma linguagem seccionar e esconder do resto do
proveniente do estouro do Timer0. programa todas as informaes necessrias para se realizar
Na sequncia do cdigo e realizada a inicializao do uma tarefa especfica. Umas das maneiras de conseguir essa
display, a funo de cada comandos em hexadecimal enviado compartimentalizao pelo uso de sub-rotinas que empregam
apresentada na Tabela 1 do Apndice. Aps a inicializao variveis locais (temporrias). Com uso de variveis locais
os caracteres a serem apresentados no display so enviados possvel escrever sub-rotinas de forma que os eventos que
um a um, e a cada novo caractere o cursor deslocado para ocorram dentro delas no causem nenhum efeito inesperado
a direita. nas outras partes do programa. Essa capacidade permite que os
O programa permanece em loop at que o estouro do programas em C compartilhem facilmente sees de cdigo.
Timer0 ocorra e provoque uma interrupo, ento, a execuo Portanto, nesta parte do roteiro ser realizada uma introduo
{
Lcd_Inst(0x1C);
}

void Mensagem(void)
{
Lcd_Inst(0x92);
printf(lcd_dado, "ENGENHARIA ELETRICA");
Lcd_Inst(0xCF);
printf(lcd_dado, "Sistemas Microprocessados");
}

void Lcd_Inst(char dado)


{
Disable_Interrupts(GLOBAL);
output_low(RS);
Figura 2. Interface do CCS C Compiler.
output_d(dado);
delay_cycles(2);
output_high(EN);
a programao na linguagem C para microcontroladores PIC delay_ms(1);
no ambiente CCS C Compiler, cuja interface apresentada na output_low(EN);
Figura 2. Enable_Interrupts(INT_TIMER0);
}
Para exemplificar a utilizao desta linguagem na progra-
mao, abaixo apresentado um cdigo que realizao a void Lcd_Dado(char dado)
mesma funo do cdigo, anteriormente apresentado, escrito {
em Assembly. Disable_Interrupts(GLOBAL);
output_high(RS);
#include <16f877a.h> output_d(dado);
#fuses xt, nowdt, noprotect, put, brownout delay_cycles(2);
#use delay(clock=4000000) output_high(EN);
delay_ms(1);
output_low(EN);
#define RS PIN_E0 Enable_Interrupts(GLOBAL);
#define EN PIN_E1 }

void Inicializa(void);
void Lcd_Inst(char dado); O cdigo iniciado com as instrues reproduzidas abaixo:
void Lcd_Dado(char dado); #include <16f877a.h>
void Mensagem(void); #fuses xt, nowdt, noprotect, put
#use delay(clock=4000000)
void main (void)
{ #define RS PIN_E0
Inicializa(); #define EN PIN_E1
Mensagem();
while(true);
} void Inicializa(void);
void Lcd_Inst(char dado);
void Inicializa(void) void Lcd_Dado(char dado);
{ void Mensagem(void);
Setup_ADC(ADC_OFF);
Set_Timer0(0);
Setup_Timer_0(RTCC_INTERNAL | RTCC_DIV_256); Neste trecho, realizado a incluso do ficheiro com as
Enable_Interrupts(INT_TIMER0);
caractersticas do PIC16F877A, microcontrolador utilizado no
Enable_Interrupts(GLOBAL);
Lcd_Inst(0x38); projeto. Posteriormente, os fusveis ou opes de gravao so
Delay_ms(2); ajustados da seguinte forma:
Lcd_Inst(0x38); Oscilador externo tipo cristal (xt);
Lcd_Inst(0x0C);
Lcd_Inst(0x06); Power-up timer (put) ligado;
Lcd_Inst(0x01); Cdigo de Proteo (noprotect) desligado;
Delay_ms(1); WatchDog Timer (nowdt) desligado;
}
Logo aps, definido a frequncia do clock e so definidos
#int_timer0 os bits de comando Enable como o bit 0 do PORTE e o RS o
void Ist_Timer0(void) bit "1"do PORTE. Em seguida so declaradas as funes que
sero utilizadas no corpo do programa. controle.
Assim como na programao em Assembly, a diretiva do
vetor reset ORG 0X0000 corresponde ao endereo de inicio VI. R ELATRIO
para a execuo do programa, na linguagem C, a funo main, Altere os programas, em Assembly e em C, mostrados
determina, tambm, o ponto inicial para a execuo.
anteriormente, para que apresente na primeira linha do display
void main (void) a frase "Sistemas Microprocessados"e na segunda linha os
{ nomes de todos os integrante do grupo. As frases devem se
Inicializa(); deslocar para a direita a cada 200 ms, sendo que o tempo de
Mensagem();
while(true); deslocamento deve ser determinado pelo estouro do Timer0.
} Elabore um relatrio apresentado ambos os cdigos e as
simulaes no PROTEUS. Relate as diferena entre as lin-
Na funo main so chamadas duas outras funes; a guagens no que diz respeito a facilidade em programar e
funo Inicializa() responsvel por realizar a configurao quantidade de memria ocupada no microcontrolador.
inicial do PIC e, tambm, do display e funo M ensagem()
responsvel por definir a mensagem que ser enviada ao R EFERNCIAS
display. Na funo main, o comando while(true) cria um [1] Souza, Vitor Amadeu, Projetando com os microcontroladores da famlia
lao que ser executado at que uma interrupo ocorra. PIC 18: Uma nova percepo, 1a Ed., So Paulo: Ensino Profissional,
2007.
Na funo Inicializa(), e desligada a converso AD [2] Souza, David Jos de, Desbravando o PIC: ampliado e atualizado para
(Setup ADC(ADC OFF)), determinado valor inicial do PIC 16F628A, 6a Ed., So Paulo: rica, 2003.
Timer0 (Set Timer0(0)) e, tambm, so habilitadas a inter- [3] Pereira, Fbio, Micrcontroladores PIC: Tcnicas Avanadas, 6a Ed., So
Paulo: rica, 2007.
rupo do T imer0 (Enable Interrupts(INT TIMER0)) e a in- [4] Apostila de Linguagem C para PIC16F877A com base no CCS - Cerne
terrupo global (Enable Interrupts(GLOBAL)). Tecnologia e Treinamento LTDA.
[5] Schildt, Herbert, C, Completo e Total, 3a Ed., So Paulo: Pearson
void Inicializa(void) Markron Books, 1997.
{
Setup_ADC(ADC_OFF);
Set_Timer0(0);
Setup_Timer_0(RTCC_INTERNAL | RTCC_DIV_256);
Enable_Interrupts(INT_TIMER0);
Enable_Interrupts(GLOBAL);

Lcd_Inst(0x38);
Delay_ms(2);
Lcd_Inst(0x38);
Lcd_Inst(0x0C);
Lcd_Inst(0x06);
Lcd_Inst(0x01);
Delay_ms(1);
}

Em seguida, so enviados os comandos de inicializao do


display de LCD. A funo de cada comando apresentada na
Tabela 1 do Apndice.
Na funo M ensagem() so definidos os caracteres que
sero apresentados no display e, tambm a posio em que
deve ser iniciada a escrita.
void Mensagem(void)
{
Lcd_Inst(0x92);
printf(lcd_dado, "ENGENHARIA ELETRICA");
Lcd_Inst(0xCF);
printf(lcd_dado, "Sistemas Microprocessados");
}

Neste trecho, so utilizadas as funes Lcd Inst(), para


enviar os comandos para o display, neste caso informando
a posio inicial, e a funo Lcd Dado() responsvel por
enviar cada caractere da frase a ser apresentada no display.
A funo printf () faz parte da biblioteca de funes de I/O
da linguagem C e realiza a sada de dados formatada, isto ,
pode escrever dados em vrios formatos que esto sob seu
1

A PNDICE

Hexadecimal Binrio Descrio


0x38 00111000 Comunicao do mdulo com 8 bits
0x06 00000110 Sentido do deslocamento do cursor: para a direita.
0x0C 00001100 Liga display sem cursor.
0x01 00000001 Limpa display com Home cursor.
0x18 00011000 Deslocamento da mensagem sem entrada de caractere: para a esquerda.
0x1C 00011100 Deslocamento da mensagem sem entrada de caractere: para a direita.

Tabela I
C OMANDOS PARA I NICIALIZAO DO D ISPLAY

LCD 16X2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Linha 1 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
Linha 2 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF

Tabela II
E NDEREOS DE C ARACTERES NO D ISPLAY.

Pino Nome Funo Descrio


1 Vss Alimentao Terra ou GND
2 Vdd Alimentao VCC ou +5V
3 Vee V0 Tenso de ajuste de contraste.
4 RS Register select 1-Dado, 0-Instruo.
5 R/W Read/Write 1-Leitura, 0-Escrita.
6 E Chip select 1 ou (10) - Habilita, 0 - Desabilita.
7 D0 Dado Bit 0
8 D1 Dado Bit 1
9 D2 Dado Bit 2
10 D3 Dado Bit 3
11 D4 Dado Bit 4
12 D5 Dado Bit 5
13 D6 Dado Bit 6
14 D7 Dado Bit 7

Tabela III
P INAGEM DO M DULO LCD

Potrebbero piacerti anche