Você está na página 1de 8

Biblioteca de funções de acesso ao display de LCD

libLCD_hk_v1.0.1.a
Interfaces de Conexões I2C, I2CRGB, P4BITS e P8BITS
Autorizado o uso público, sem modificações
Desenvolvida por : Prof. Hegler Rocha
PUC Minas - 05/2019
Departamento de Engenharia Versão : v1.0.1
Eletrônica e de Telecomunicação Problemas : hk4@pucminas.br
APENAS PARA O MCU ATMEGA328P

1) Como usar
Siga os passos a seguir para o uso da biblioteca de acesso ao display de LCD. Esta biblioteca foi
desenvolvida para trabalhar com um display de LCD padrão 1x16, 2x16, 4x16, 2x20, 4x20, 2x40 ou
4x40, controlados pelo circuito integrado HD44780 da Hitachi, usando interfaces de conexões serial
I2C ou paralela de 4 ou 8 bits.

a. Defina no início do arquivo principal, normalmente main.c, o tipo de interface a ser utilizada
entre o AVR ATmega328P e o LCD, ou seja, Serial I2C, Serial I2C com RGB, Paralela de 4
Bits ou Paralela de 8 Bits, conforme abaixo:

#define _USE_LCD_I2C ➔ Display I2C com endereço default 0x3F


OU
#define _USE_LCD_I2C_RGB ➔ Display I2C com RGB da Grove
OU
#define _USE_LCD_P4BITS ➔ Display Paralelo com interface de 4 bits
OU
#define _USE_LCD_P8BITS ➔ Display Paralelo com interface de 8 bits

b. Faça a inclusão do arquivo de cabeçalho LCD_app_hk.h, existente na pasta ...\include,


normalmente.

#include <LCD_app_hk.h>

c. Acrescente o arquivo biblioteca compilado libLCD_hk_v1.0.1.a, existente na pasta


...\include\lib, normalmente.
OU
acrescente os arquivos fontes da biblioteca de LCD LCD_app_hk.c, LCD_drv_hk.c e
i2c_hk.c, todos existentes na pasta ...\include, normalmente.

2) Funções
As funções a seguir foram implementadas de forma a serem transparentes quanto à interface de
conexão entre o LCD e o MCU, exceto a função Config_dsp(), usada para redefinir essa interface,
caso seja necessário. Todas as funções são do tipo void, ou seja, não devolvem qualquer valor.

a. void init_dsp (linhas, colunas)

Descrição : Configura o layout do LCD. Chamada Obrigatória no início do programa. (1x16,


2x16, 4x16, 2x20, 4x20, 2x40, 4x40)
Parâmetros de entrada
• linhas → número de linhas do LCD
• colunas → número de colunas do LCD

Exemplos de uso:
LCD de 2 linhas e 16 colunas
init_dsp (2,16);
LCD de 1 linha e 16 colunas
init_dsp (1,16);
LCD de 4 linhas e 40 colunas
init_dsp (4,40);

b. void config_dsp (int8_t i, int8_t j, int8_t k, int8_t l, int8_t m)

Descrição : Configura a interface de conexão com o display, exceto para o display com RGB,
cuja interface não pode ser alterada. No caso do I2C, esta conexão se faz entre o expansor
I2C, existente na placa montada junto ao display e o próprio LCD. O valor -1 para qualquer um
dos parâmetros, mantém o valor padrão (default). Se os valores padrões não puderem ser
usados, esta função deverá ser chamada antes da função init_dsp(), contendo os parâmetros
abaixo:

Parâmetros de entrada:
• i → Para a interface I2C, este parâmetro corresponde ao Endereco e para as demais
interfaces não é necessário, podendo conter qualquer valor. O endereço padrão
(default) para a interface I2C é 0x3F.

• j → Define o modo de conexão do barramento de dados, conforme a interface de


conexão. Veja abaixo:

P4BITS (D7 - D4) - Interface de Conexão Paralela de 4 bits


1 → PB3-D7, PB2-D6, PB1-D5, PB0-D4 - default (-1)
2 → PC3-D7, PC2-D6, PC1-D5, PC0-D4
3 → PD7-D7, PD6-D6, PD5-D5, PD4-D4

I2C (D7 – D4) - Interface de Conexão Serial I2C


1 → P7-D7, P6-D6, P5-D5, P4-D4 - default (-1)
2 → P3-D7, P2-D6, P1-D5, P0-D4

P8BITS (D7 – D0) – Interface de Conexão Paralela de 8 bits


1 → PD7-D7, PD6-D6, PD5-D5, PD4-D4, PB3-D3, PB2-D2, PB1-D1, PB0-D0 – default (-1)
2 → PB7-D7, PB6-D6, PB5-D5, PB4-D4, PC3-D3, PC2-D2, PC1-D1, PC0-D0
3 → PD7-D7, PD6-D6, PD5-D5, PD4-D4, PC3-D3, PC2-D2, PC1-D1, PC0-D0

• k → Para a interface de conexão I2C, este parâmetro define o pino EN, entre o expansor
e o LCD e para as interfaces de conexões P4BITS ou P8BITS, define as linhas de
controles RS e EN entre o MCU e o LCD. Veja abaixo:

1 → PB1-EN, PB0-RS
2 → PB2-EN, PB1-RS
3 → PB3-EN, PB2-RS
4 → PB4-EN, PB3-RS
5 → PB5-EN, PB4-RS
6 → PC1-EN, PC0-RS - default (-1)
7 → PC2-EN, PC1-RS
8 → PC3-EN, PC2-RS
9 → PD3-EN, PD2-RS
10 → PD4-EN, PD3-RS
11 → PD5-EN, PD4-RS
12 → PD6-EN, PD5-RS
13 → PD7-EN, PD6-RS

• l → Para a interface de conexão I2C, este parâmetro define o pino RS, entre o expansor
e o LCD e para as interfaces de conexões P4BITS ou P8BITS, não tem função, podendo
ser qualquer valor.

• m → Para a interface de conexão I2C, este parâmetro define o pino BK, entre o
expansor e o LCD e para as interfaces de conexões P4BITS ou P8BITS, não tem
função, podendo ser qualquer valor.

Exemplos de uso:
Interface de Conexão I2C, com alteração de endereço apenas:
config_dsp (0x27,-1,-1,-1,-1); → Endereço 0x27
Interface de Conexão I2C, com alteração de barramento de dados apenas :
config_dsp (-1,2,-1,-1,-1); → P3-D7, P2-D6, P1-D5, P0-D4
Interface de Conexão I2C, com alteração do endereço e da linha de controle RS:
config_dsp (0x27,-1,-1,3,-1); → Endereço 0x27 e RS → Pino 3
Interface de Conexão P4BITS, com alteração de barramento de dados apenas:
config_dsp (0,3,-1,0,0); → PD7-D7, PD6-D6, PD5-D5, PD4-D4
Interface de Conexão P8BITS, com alteração de barramento de controle apenas:
config_dsp (0,-1,5,0,0); → PB5-EN, PB4-RS

c. void put_c(int8_t l, int8_t c, char ch)

Descrição: Imprime um caracter codificado em ASCII no LCD, a partir da posição do cursor,


dada por l (linha) e c (coluna). Alguns caracteres especiais podem ser impressos, consulte o
manual do CI HD44780.

Parâmetros de entrada:
• l → número da linha, entre 0 e linhas-1, onde se deseja posicionar o cursor, para
imprimir o caracter. Se este parâmetro for igual a -1, a impressão se dará na posição
atual do cursor.
• c → número da coluna, entre 0 e colunas-1, onde se deseja posicionar o cursor, para
imprimir a mensagem. Se o parâmetro anterior for igual a -1, este não terá função,
podendo ser qualquer valor.
• ch → caracter em código ASCII a ser impresso, ou algum especial

Obs.: O número da linha e coluna para a impressão sempre começam em ‘0. Assim
imprimir na segunda linha, significa imprimir na linha 1.
Exemplos de uso:
Imprime o caracter ‘H’ na sexta coluna da quarta linha, de um LCD de 40 colunas.
put_c(3,5,’H’); → Será impresso a letra H
Imprime o conteúdo da variável char v = ‘2’ no início da segunda linha do LCD de 20 colunas:
put_c(1,0,v); → Será impresso a letra ‘2’
Imprime o conteúdo do caracter ‘%’ na posição atual do cursor, considerando a impressão
anterior:
put_c(-1,0,’%’); → Será impresso o caracter % na posição atual do cursor, ficando 2%

d. void putmessage(int8_t l, int8_t c, char *s)

Descrição: Imprime uma mensagem codificada em ASCII no LCD, a partir da posição do


cursor, dada por l (linha) e c (coluna). Também podem ser usados alguns caracteres especiais
nas mensagens. Para isto consulte o manual do CI HD44780.

Parâmetros de entrada:
• l → número da linha, entre 0 e linhas-1, onde se deseja posicionar o cursor, para
imprimir a mensagem. Se este parâmetro for igual a -1, a impressão se dará a partir da
posição atual do cursor.
• c → número da coluna, entre 0 e colunas-1, onde se deseja posicionar o cursor, para
imprimir a mensagem ou -1 para centralizar a mensagem na linha, ficando deslocada
uma posição para a esquerda se o número de caracteres da mensagem for ímpar. Se
o valor do parâmetro ‘l’ for igual a -1 o valor desse parâmetro não terá função.
• s → apontador que contém o endereço da mensagem, podendo ser de uma string ou
de um vetor.

Exemplos de uso:
Imprime a mensagem “Hora Certa”, centralizada na primeira linha do LCD de 16 colunas:
putmessage(0,-1,”Hora Certa”);
Imprime o conteúdo do vetor v[ ] = “Laboratorio” no início da terceira linha do LCD de 40
colunas:
putmessage(2,0,v);

e. void putnumber_i(int8_t l, int8_t c,long n,int8_t d)

Descrição : Imprime um valor numérico inteiro no LCD, a partir da posição do cursor, dada
por l (linha) e c (coluna).

Parâmetros de entrada
• l → número da linha, entre 0 e linhas-1, onde se deseja posicionar o cursor, para
imprimir o valor numérico. Se este parâmetro for igual a -1, a impressão se dará a partir
da posição atual do cursor.
• c → número da coluna, entre 0 e colunas-1, onde se deseja posicionar o cursor, para
imprimir o valor numérico ou -1 para centralizar este número na linha, ficando deslocado
uma posição para a esquerda se o número de dígitos do valor for ímpar. Se o valor do
parâmetro ‘l’ for igual a -1 o valor desse parâmetro não terá função.
• n → valor numérico inteiro que se deseja imprimir.
• d → número de dígitos que se deseja imprimir deste valor numérico, se não desejar
imprimir 0’s a esquerda, deve-se passar o parâmetro -1. Assim o número será impresso
sempre com todos os seus dígitos e sem 0’s a esquerda.

Exemplos de uso:
Imprime o valor da variável inteira aux com 5 dígitos, tendo esta variável o valor 2734, no início
da segunda linha de um LCD de 2 linhas.
putnumber_i (1,0,aux,5); → será impresso no display o valor o valor 02734
Imprime o valor da variável inteira aux sem 0’s a esquerda, tendo esta variável o valor 2734,
no início da segunda linha de um LCD de 2 linhas.
putnumber_i (1,0,aux,-1); → será impresso no display o valor o valor 2734
Imprime o valor da variável inteira aux sem 0’s a esquerda, tendo esta variável o valor 2734,
centralizado na linha de um LCD de 2 linhas.
putnumber_i (1,-1,aux,-1); → será impresso o valor o valor 2734 no centro da linha

f. putnumber_f(int8_t l , int8_t c ,double n ,uint8_t d)

Descrição : Imprime um valor numérico em ponto flutuante no LCD, a partir da posição do


cursor, dada por l (linha) e c (coluna).

Parâmetros de entrada
• l → número da linha, entre 0 e linhas-1, onde se deseja posicionar o cursor, para
imprimir o valor numérico. Se este parâmetro for igual a -1, a impressão se dará a partir
da posição atual do cursor.
• c → número da coluna, entre 0 e colunas-1, onde se deseja posicionar o cursor, para
imprimir o valor numérico ou -1 para centralizar este número na linha, ficando deslocado
uma posição para a esquerda se o número de dígitos do valor mais o ponto for ímpar.
Se o valor do parâmetro ‘l’ for igual a -1 o valor desse parâmetro não terá função.
• n → valor numérico em ponto flutuante que se deseja imprimir.
• d → número de casas decimais que se deseja imprimir deste valor numérico

Exemplos de uso:
Imprime o valor da variável do tipo ponto flutuante adc com 3 casas decimais, tendo esta
variável o valor -3.875742, no início da primeira linha de um LCD de 2 linhas.
putnumber_f (0,0,adc,3); → será impresso no display o valor o valor -3.875
Imprime o valor da constante M_PI com 4 casas, na terceira coluna da quarta linha de um
LCD de 4 linhas.
putnumber_i (3,2,M_PI,4); → será impresso no display o valor o valor 3.1416

g. void setCursor(uint8_t l, uint8_t c)

Descrição : Define uma posição para o cursor.

Parâmetros de entrada
• l → número da linha, entre 0 e linhas-1, onde se deseja posicionar o cursor
• c → número da coluna, entre 0 e colunas-1, onde se deseja posicionar o cursor
Exemplo de uso:
Posiciona o cursor na linha 0, coluna 5 de um LCD de 2 linhas.
setCursor (0,5);

h. void dspHome(void)

Descrição : Retorna o cursor para a posição de linha 0 e coluna 0 (0,0).

Parâmetros de entrada
• não requer parâmetros de entrada

Exemplo de uso:
Posiciona o cursor na linha 0, coluna 0 de qualquer LCD.
dspHome ();

i. void dspClear(void)

Descrição : Limpa o LCD e retorna o cursor para a posição de linha 0 e coluna 0 (0,0).

Parâmetros de entrada
• não requer parâmetros de entrada

Exemplo de uso:
Limpa o LCD e posiciona o cursor na linha 0, coluna 0 de qualquer LCD.
dspClear ();

j. void moveCursor(uint8_t dir)

Descrição : Movimenta o cursor uma posição à direita ou à esquerda, em relação a posição


atual no LCD.

Parâmetros de entrada
• dir → movimento à direita (RIGHT) ou movimento a esquerda (LEFT)

Exemplos de uso:
Movimenta o cursor à direita. Considerando a posição atual em linha 1, coluna 2 de qualquer
LCD.
moveCursor (RIGHT); → nova posição do cursor será linha 1, coluna 3
Movimenta o cursor à esquerda. Considerando a posição atual em linha 1, coluna 2 de
qualquer LCD.
moveCursor (LEFT); → nova posição do cursor será linha 1, coluna 1

k. void scrollDisplay(uint8_t dir)

Descrição : Desloca todo o conteúdo do display, uma posição, à direita ou à esquerda

Parâmetros de entrada
• dir → deslocamento à direita (RIGHT) ou deslocamento à esquerda (LEFT)
Exemplos de uso:
Desloca o conteúdo do LCD à direita. Considerando a posição atual em linha 1, coluna 2 de
qualquer LCD.
scrollDisplay (RIGHT); → mensagem deslocada e nova posição do cursor será linha
1, coluna 3
Desloca o conteúdo do LCD à esquerda. Considerando a posição atual em linha 1, coluna 2
de qualquer LCD.
scrollDisplay (LEFT); → mensagem deslocada e nova posição do cursor será linha 1,
coluna 1

l. void entrymode(uint8_t dir)

Descrição : Define o modo de impressão da esquerda para a direita ou direita para


esquerda.

Parâmetros de entrada
• dir → imprime no LCD da esquerda para a direita (LEFT) ou da direita para esquerda
(RIGHT)

Exemplo de uso:
Coloca o LCD no modo de inserção da direita para esquerda.
entrymode (RIGHT); → as impressões ocorrerão da direita para a esquerda

m. void turncursor(uint8_t mode)

Descrição : Liga ou desliga o cursor.

Parâmetros de entrada
• dir → cursor ligado (ON) ou cursor desligado (OFF)

Exemplo de uso:
turncursor (ON); → cursor ligado
turncursor (OFF); → cursor desligado

n. void turnbacklight (uint8_t mode)

Descrição : Liga ou desliga a iluminação de backlight do LCD. Apenas para as interfaces de


conexões I2C e I2CRGB.

Parâmetros de entrada
• mode → liga (ON) ou desliga (OFF) o backlight.

Exemplos de uso:
turnbacklight (ON); → backlight ligado
turnbacklight (OFF); → backlight desligado
o. void turndisplay (uint8_t dsp, uint8_t bck)

Descrição : Liga ou desliga o LCD e a iluminação de backlight do LCD simultaneamente.

Parâmetros de entrada
• dsp → liga LCD (ON) ou desliga LCD (OFF).
• bck → liga (ON) ou desliga (OFF) o backlight. Apenas para as interfaces de conexões
I2C e I2CRGB. Para as interfaces de conexões P4BITS e P8BITS este parâmetro não
tem função, podendo ser qualquer valor.

Exemplos de uso:
turndisplay (ON,OFF); → display ligado e backlight desligado
turndisplay (ON,ON); → display e backlight ligados
turndisplay (OFF,ON); → display desligado e backlight ligado

p. void turncursorBlink (uint8_t mode)

Descrição : Liga ou desliga o cursor no modo piscante.

Parâmetros de entrada
• mode → liga cursor piscante (ON) ou desliga cursor piscante (OFF).
Exemplos de uso:
turncursorBlink (ON); → cursor piscante ligado
turncursorBlink (OFF); → cursor piscante desligado

q. void setRGB(uint8_t r, uint8_t g, uint8_t b)

Descrição : Define as intensidade das cores dos LED’s RED, GREEN e BLUE do backlight
do LCD de interface de conexão I2CRGB, combinando-os para definir a cor final da iluminação
de backlight.

Parâmetros de entrada
• r → define a intensidade de cor do led RED, entre 0 (desligado) e 255 (totalmente
vermelho).
• g → define a intensidade de cor do led GREEN, entre 0 (desligado) e 255 (totalmente
verde).
• b → define a intensidade de cor do led BLUE, entre 0 (desligado) e 255 (totalmente
azul).

Exemplos de uso:
setRGB (0,0,0); → backlight apagado
setRGB (255, 255,0); → combinação de cores vermelha e verde, formando o amarelo.

“ENJOY AND HAVE FUN”


Prof. Hegler Rocha

Você também pode gostar