Avaliação do Usuário

Estrela inativaEstrela inativaEstrela inativaEstrela inativaEstrela inativa
 

Usar esse tipo de display em projetos com o Arduino agregam enormemente funcionalidade e valor, visto se tratar de um display LCD gráfico, mais precisamente o mesmo utilizado nos celulares Nokia 5110! Dá quase para dizer com certeza: “Quem nunca teve um desses?!”.

 

 

 

 

 

 

Inclusive o display LCD está no mercado desde 1998, ou seja, consolidado e muito testado em muitas aplicações além do celular.

 

Bom, vamos ao que interessa. Esse display pode ser facilmente encontrado em sites no exterior voltados para produtos eletrônicos e DIY (Do it yourself – Faça você mesmo), aqui no Brasil encontrei na Tato Equipamentos Equipamentos Eletrônicos a preço convidativo para quem não tem ou não quer usar o cartão internacional/esperar até um mês pela entrega.

 

 

 

 

 

 

Com o display conectado ao protoboard vamos iniciar as conexões.

 

Sendo os pinos:

 

RST      -           Reset

CE        -           Chip Enable

DC       -           Data/Command

Din      -           Data Input

Clk       -           Clock

Vcc      -           Power Supply

BL        -           Back Light

GND    -           Terra

 

Ligue o pino GND do display ao GND do Arduino:

 

 

 

 

 

 

Ligue o pino BL do display ao pino digital 2 do Arduino. Isso fará com que seja possível controlar o back light, caso queira deixa-lo ligado direto conecte-o ao Vcc:

 

 

 

 

 

 

Ligue o pino Vcc do display ao pino 5V (ATENÇÃO: verifique a voltagem do seu display, caso tenha dúvidas, ligue no pino 3,3V) do Arduino:

 

 

 

 

 

 

Ligue o pino CLK do display ao pino digital 8 do Arduino:

 

 

 

 

 

 

Ligue o pino Din do display ao pino digital 9 do Arduino:

 

 

 

 

 

 

Ligue o pino DC do display ao pino digital 10 do Arduino:

 

 

 

 

 

 

Ligue o pino CE do display ao pino digital 11 do Arduino:

 

 

 

 

 

 

Ligue o pino RST do display ao pino digital 12 do Arduino:

 

 

 

 

 

 

Antes de continuar, confira todas as ligações, pois a quantidade de jumpers é grande!

 

Agora vamos ao código desenvolvido por Jim Park, disponível no próprio site do Arduino, aqui. Porém fiz algumas modificações para lidar com o back light e melhorar o posicionamento dos caracteres.

 

{code}

#define PIN_RESET 12    // Reset

#define PIN_SCE   11    // Chip Enable

#define PIN_DC    10    // Data/Command

#define PIN_SDIN  9     // Data Input

#define PIN_SCLK  8     // Clock

#define PIN_BL    2     // Back Light

 

#define LCD_C     LOW

#define LCD_D     HIGH

 

#define LCD_X     84

#define LCD_Y     48

#define LCD_CMD   0

 

int a = 0;

 

static const byte ASCII[][5] =

{

{0x00, 0x00, 0x00, 0x00, 0x00}  // 20 espaço

,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 !

,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 "

,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 #

,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $

,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 %

,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 &

,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 '

,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 (

,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 )

,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a *

,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b +

,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c ,

,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d -

,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e .

,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f /

,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0

,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1

,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2

,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3

,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4

,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5

,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6

,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7

,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8

,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9

,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a :

,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ;

,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c <

,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d =

,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e >

,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ?

,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @

,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A

,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B

,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C

,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D

,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E

,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F

,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G

,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H

,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I

,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J

,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K

,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L

,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M

,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N

,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O

,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P

,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q

,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R

,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S

,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T

,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U

,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V

,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W

,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X

,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y

,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z

,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [

,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c ¥

,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ]

,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^

,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _

,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 `

,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a

,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b

,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c

,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d

,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e

,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f

,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g

,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h

,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i

,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j

,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k

,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l

,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m

,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n

,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o

,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p

,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q

,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r

,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s

,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t

,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u

,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v

,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w

,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x

,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y

,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z

,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b {

,{0x00, 0x00, 0x7f, 0x00, 0x00} // 7c |

,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d }

,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e ?

,{0x00, 0x06, 0x09, 0x09, 0x06} // 7f ?

};

 

void LcdCharacter(char character)

{

LcdWrite(LCD_D, 0x00);

for (int index = 0; index < 5; index++)

{

LcdWrite(LCD_D, ASCII[character - 0x20][index]);

}

LcdWrite(LCD_D, 0x00);

}

 

void LcdClear(void)

{

for (int index = 0; index < LCD_X * LCD_Y / 8; index++)

{

LcdWrite(LCD_D, 0x00);

}

}

 

void LcdInitialise(void)

{

pinMode(PIN_SCE,   OUTPUT);

pinMode(PIN_RESET, OUTPUT);

pinMode(PIN_DC,    OUTPUT);

pinMode(PIN_SDIN,  OUTPUT);

pinMode(PIN_SCLK,  OUTPUT);

pinMode(PIN_BL,    OUTPUT);

 

digitalWrite(PIN_RESET, LOW);

// delay(1);

digitalWrite(PIN_RESET, HIGH);

 

LcdWrite( LCD_CMD, 0x21 );  // Display em comandos estendidos

LcdWrite( LCD_CMD, 0xBf );  // Contraste do display - valor B1

LcdWrite( LCD_CMD, 0x04 );  // Coefficiente de tempo - 0x04

LcdWrite( LCD_CMD, 0x14 );  // BIAS mode 1:48. - 0x13

LcdWrite( LCD_CMD, 0x0C );  // Display no modo normal - para modo inverso uso 0x0d

LcdWrite(LCD_C, 0x20);

LcdWrite(LCD_C, 0x0C);

}

 

void LcdString(char *characters)

{

while (*characters)

{

LcdCharacter(*characters++);

}

}

 

void LcdWrite(byte dc, byte data)

{

digitalWrite(PIN_DC, dc);

digitalWrite(PIN_SCE, LOW);

shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data);

digitalWrite(PIN_SCE, HIGH);

}

 

// x - de 0 até 84

// y - de 0 até 5

void gotoXY(int x, int y)

{

LcdWrite( 0, 0x80 | x);  // Colunas

LcdWrite( 0, 0x40 | y);  // Linhas

 

}

 

void drawLine(void)

{

unsigned char  j;

for(j=0; j<84; j++) // Topo

{

gotoXY (j,0);

LcdWrite (1,0x01);

}

for(j=0; j<84; j++) // Rodapé

{

gotoXY (j,5);

LcdWrite (1,0x80);

}

for(j=0; j<6; j++) // Direita

{

gotoXY (83,j);

LcdWrite (1,0xff);

}

for(j=0; j<6; j++) // Esquerda

{

gotoXY (0,j);

LcdWrite (1,0xff);

}

}

 

void setup(void)

{

digitalWrite(2,HIGH);    // Liga o back light

LcdInitialise();         // Inicializa o display

LcdClear();              // Apaga todos os caracteres

}

 

char caractere = '|';

 

void loop(void)

{

int a,b;

char Str[15];

drawLine(); // Desenha a borda

// x - colunas - de 0 até 84

// y - linhas  - de 0 até 5

gotoXY(10,1);

LcdString ("Seu Curso");

gotoXY(24,3);

LcdString("TESTE");

delay(500);

gotoXY(24,3);

LcdCharacter('t');

LcdCharacter('e');

LcdCharacter('s');

LcdCharacter('t');

LcdCharacter('e');

delay(500);

if(caractere == '|') caractere = '/'; else

if(caractere == '/') caractere = '-'; else

if(caractere == '-') caractere = '\\'; else

if(caractere == '\\') caractere = '|'; else

gotoXY(80,3);

LcdCharacter(caractere);

}

{/code}

 

 

Funcionando:

 

 

 

{youtube}uTgQ6E-b0jA{/youtube}

 

 

 

Com esse código em mãos podemos fazer inúmeras mudanças e adaptações para qualquer aplicação que se possa imaginar.