Você está na página 1de 5

Centro Tecnolgico de Mecatrnica / Centro Tecnolgico Automotivo Disciplina PROGRAMAO Instrutor DANIEL CORTELETTI

SADA DE DADOS FORMATADA NO LCD Sada de dados quando enviamos uma informao qualquer para um perifrico de sada : Vdeo, impressora, disco. Para usar o LCD (padro HD44780, 16 colunas, 2 linhas, modo texto) como perifrico de sada, neste material adotaremos a biblioteca LCD.C includa no cabealho dos nossos programas, e utilizaremos como padro a seguinte ligao entre o LCD e o MICROCONTROLADOR PIC : PINOS PIC B0 B1 B2 B4 B5 B6 B7 -------PINOS LCD enable rs rw D4 D5 D6 D7

Esta ligao utiliza um display de caracteres em modo 4 fios. Observe que so utilizadas 7 ligaes para enviar dados ao LCD, sendo que 3 so para controle (EM, RS e RW), e 4 so para os dados (um nibble por vez). No entanto, para que o DISPLAY aceite este modo de ligao, ele deve sofrer um processo de inicializao. Este processo implica no envio de alguns sinais em seqncia e tempos pr-determinados. Para realizar esta inicializao, podemos usar a funo lcd_init(), que est presente na biblioteca lcd.c. Ao se enviar um dado ao LCD, utilizaremos a funo lcd_putc(CHAR). Observe que entre os parnteses desta funo, ser colocado o texto ou o caractere a ser enviado ao LCD. Portanto, se executarmos a funo lcd_putc(x); ser enviado ao LCD o caractere x. Se executarmos a funo lcd_putc(Ola ...), ser enviada a mensagem entre as aspas duplas ao LCD.

Caracteres especiais do lcd_putc : Alguns caracteres podem ser enviados ao LCD pra promover controle de posio, apagar ou retroceder o cursor. O cursor um ponto que pode ou no estar habilitado, e que identifica onde ser escrito o prximo caractere.
So caracteres especiais do LCD : \f limpeza do display. Esta opo reinicia o display, limpando-o e posicionando o cursor na linha 1 coluna 1. \b retorno de um caractere. Esta opo faz com que o cursor retroceda uma posio. \n Nova linha. Posiciona o cursor na primeira coluna da segunda linha do LCD. Veja alguns exemplos de uso :

Impresso em 09/11/2006 11:52:00 AM Pgina 1

Centro Tecnolgico de Mecatrnica / Centro Tecnolgico Automotivo Disciplina PROGRAMAO Instrutor DANIEL CORTELETTI

Posicionando o cursor

Para posicionar o cursor no LCD, podemos usar a funo lcd_gotoxy(x,y), onde x e y so, respectivamente, a coluna e a linha onde o cursor deve ser reposicionado.
Desta forma, caso deseje escrever algo na primeira linha do display, sem apagar a segunda linha, basta inserir o comando lcd_gotoxy(1,1). Isso ir posicionar o cursor na primeira linha, e primeira coluna. No entanto, tome cuidado, pois uma vez que o display no foi apagado, as informaes antigas permanecero na primeira linha, a menos que voc as sobrescreva. Outras funes para o LCD Para rolar o contedo do LCD um caractere para a direita, utilize o comando lcd_send_byte(0,0x1C), ou caso estejas usando a biblioteca LCD.C modificada, utilize o comando lcd_shift_right(). Para rolar o contedo do LCD um caractere para a esquerda, utilize o comando lcd_send_byte(0,0x18), ou caso estejas usando a biblioteca LCD.C modificada, utilize o comando lcd_shift_left(). Exemplo de uso do recurso de rolagem do display: A seguinte seqncia de comandos, gera o efeito de uma mensagem rolando no display. Para isso, ser necessrio declarar uma varivel do tipo INT chamada X.
int x; // essa varivel usada na rolagem ... lcd_putc(\fAUTOMACAO INDUSTRIAL MECATRONICA); for (x = 0; x < 35; x ++) // repete o bloco abaixo por 35 vezes { delay_ms(300); // tempo lcd_send_byte(0,0x18); // rola display um caractere para esquerda }

Para ativar o cursor, utilize o comando lcd_send_byte(0,0x0E). Para ativar o cursor piscante, utilize o comando lcd_send_byte(0,0x0F), e para desativar o cursor, use lcd_send_byte(0,0x0C);

Impresso em 09/11/2006 11:52:00 AM Pgina 2

Centro Tecnolgico de Mecatrnica / Centro Tecnolgico Automotivo Disciplina PROGRAMAO Instrutor DANIEL CORTELETTI

Uso do PRINTF O printf um comando bastante conhecido por programadores de linguagem C. Sua funo gerar uma sada formatada, permitindo juntar texto e informaes contidos em variveis, gerando uma seqncia de caracteres que podes ser enviada a qualquer funo de entrada e sada de dados. Sua utilidade clara quando precisamos realizar operaes como a de escrita de um valor numrico no LCD, ou enviar este valor via sada serial. Exemplo de uso com o LCD : #include <16f877.h> #use delay (clock=4000000) #define use_portb_lcd true #include <lcd.c> void main() { int CONTA = 0; lcd_init(); while(1) { printf(lcd_putc,\fcontando -> %u, CONTA); CONTA = CONTA + 1; delay_ms(300); } } O programa acima realiza uma contagem progressiva, iniciando pelo valor zero, e mostrando um nmero a cada 300 milsimos de segundo. Para se utilizar o printf, devemos observar sua sintaxe : Dentro dos parnteses da funo printf, deve-se dispor os seguintes elementos, separados por vrgulas : 1 funo de sada. a funo que ir receber a seqncia de caracteres construda pelo printf. Nesta posio, e para o compilador em questo, voc pode utilizar qualquer funo que aceite caracteres como parmetros. Usando-se a funo lcd_putc, obtm-se a sada de dados no display LCD. Se este elemento for suprimido, a sada ser enviada ao dispositivo padro, que geralmente a porta serial do microcontrolador. 2 STRING : o trecho de caracteres delimitado por aspas duplas, que ir definir como ser a seqncia de caracteres a ser gerada. Dentro das aspas, podem ser inseridos caracteres de texto, caracteres especiais e especificadores de formato. No caso dos caracteres especiais, por no possurem uma representao impressa, so compostos por uma barra invertida seguida de um smbolo, geralmente uma letra. Exemplo de caracteres especiais : \f (limpar display), \n (nova linha), \b (voltar um caractere), \r (retorno de carro), \g (beep), etc... Obs: alguns caracteres especiais somente resultaro efeito em terminais seriais.

Impresso em 09/11/2006 11:52:00 AM Pgina 3

Centro Tecnolgico de Mecatrnica / Centro Tecnolgico Automotivo Disciplina PROGRAMAO Instrutor DANIEL CORTELETTI

J os especificadores de formato so os locais, em meio ao texto, onde sero inseridas as variveis que aparecero aps a STRING. Desta forma, estes especificadores devem obedecer algumas regras, de acordo com o tipo da varivel a ser impressa. Observe a seguinte tabela :
Tipo de varivel

short ou int signed int long int32 signed long signed int32 float char

Especificador de formato e exemplos de uso %u valor decimal (ex: 30) %x valor em hexadecimal (ex: 1D) %3u valor decimal alinhado com trs dgitos (ex: _30) %03u valor decimal alinhado 3 digitos c/ zero (ex: 030) %i valor decimal com sinal. (ex: -2) %02i decimal com sinal, 2 casas e zeros a esq. (ex: -02) %lu valor decimal (ex: 1000); %05lu valor decimal 5 casas c/ zeros a esquerda. (ex: 01000) %li valor decimal c/ sinal (ex: -500) %4li valor decimal c/ sinal alinhado a esquerda (ex: -_500) %f valor real. Ex: (23.313451) %2.3f valor real c/ 2 casas inteiras, 3 decimais. Ex: (23.313) %c caractere. Ex: (A)

3 VARIVEIS : Deve ser utilizada uma varivel para cada especificador de formato da STRING. As variveis indicaro qual o valor que ser impresso no lugar de cada especificador de formato encontrado. Veja ao lado alguns exemplos de printf, e seus efeitos : Exerccios : 1) O programa abaixo gera um relgio, que conta horas, minutos e segundos. No entanto, algumas lacunas devem se preenchidas para que este programa funcione. Complemente-as e execute o programa.
#include <16f877.h> #use delay (clock = _______________) #define use_portb_lcd true // define que o LCD usar o PORTB #include _____________ // inclui a biblioteca LCD.C void main() { _____ HORA=0, MINUTO=0, SEGUNDO=0; // declara variveis inteiras de 8 bits ___________; // inicializacao do display while(1) // lao infinito { delay_ms(____); // tempo de 1 segundo SEGUNDO ++; // aumenta varivel SEGUNDO em uma unidade if (SEGUNDO __ 59) // se a varivel SEGUNDO for maior que 59 { SEGUNDO = 0; // zera a varivel SEGUNDO ___________ // aumenta a varivel MINUTO em uma unidade } if (______________) // se a varivel MINUTO for maior que 59 { _______________ // zera a varivel MINUTO HORA ++; // aumenta HORA em uma unidade } printf(lcd_putc,______________________, HORA, ________, __________); } // mostra no display no formato HH:MM:SS }

Impresso em 09/11/2006 11:52:00 AM Pgina 4

Centro Tecnolgico de Mecatrnica / Centro Tecnolgico Automotivo Disciplina PROGRAMAO Instrutor DANIEL CORTELETTI

2) Altere o programa anterior de forma que seja emitido um alerta sonoro sempre que um minuto for incrementado. 3) Sugesto de implementao: A partir do programa anterior, crie um contador que, quando um determinado boto for pressionado, ir aumentar o valor exibido no display a cada um segundo, e que com outro boto pressionado, ir diminuir este valor.

Impresso em 09/11/2006 11:52:00 AM Pgina 5