Fork me on GitHub

Microcontrolandos

O Blog está passando por uma fase de mudanças. Todos os posts estão sendo atualizados, códigos, links e imagens estão sendo arrumados. Conteúdos novos ainda estão por vir.

PIC: Nokia 3310

Share:

PIC: Display Nokia 3310



Estes displays são pequenos, apenas cerca de 1,5" de diâmetro. Possui uma resolução de 84x48 pixels, assim você pode usá-lo para gráficos, textos ou bitmaps. Necessitam de poucos pinos de I/O digitais e são de baixo consumo de energia também.

O display utiliza o chip controlador PCD8544 da Philips que foram utilizados no telefones celulares Nokia 3310 e Nokia 5110. Este chip é projetado para rodar apenas em 3.3V. Mas nos teste que faço utilizo 5V sem problema algum.


O código original era para arduino, onde vocês encontram aqui, mas adaptei para rodar nos microcontroladores PIC.


FUNÇÕES:

void Nokia_Init() - Inicializa o lcd;
 

void Nokia_Write(char dc, char dat) - Envia um dado ou comando para o lcd;
dc - define se o valor enviado é um comando ou um dado.
LCD_CMD - comando, LCD_DATA - dado;
dat - valor a ser enviado;

void Nokia_Fill(char val) - preenche o display com um valor;
val - valor, quando for 0x00, limpa a tela;

void Nokia_Set_Cursor(char x, char y) - define a posição do cursor no lcd;

x - posição horizontal (0 - 83);
y - página situada, posição vertical ( 0 - 5);

void Nokia_Chr(char character, char color) - Escreve um caracter no lcd;


void Nokia_Out(char *s, char color) - Escreve um texto no lcd;

void Nokia_Image(const char *bmp) - Desenha uma imagem.

void Nokia_putMedNumber(char x, char y, char number, char color) - Escreve um número de tamanho médio.
Obs.: x deve ser incrementado de 11 em 11.
y deve ser incrementado de 2 em 2.


void Nokia_putBigNumber(char x, char y, char number, char color) - Escreve um número de tamanho grande.
Obs.: x deve ser incrementado de 14 em 14.
y deve ser incrementado de 3 em 3.

BIBLIOTECA:
#define LCD_CMD      0
#define LCD_DATA     1

#define LCD_X     84
#define LCD_Y     48

#define BLACK 1
#define WHITE 0

#define Nokia_Inverse() Nokia_Write( LCD_CMD, 0x0D )
#define Nokia_Clear() Nokia_Fill( 0x00 )

extern sfr sbit Nokia_Clk;
extern sfr sbit Nokia_Data;
extern sfr sbit Nokia_DC;
extern sfr sbit Nokia_RST;
extern sfr sbit Nokia_SCE;
extern sfr sbit Nokia_Clk_Direction;
extern sfr sbit Nokia_Data_Direction;
extern sfr sbit Nokia_DC_Direction;
extern sfr sbit Nokia_RST_Direction;
extern sfr sbit Nokia_SCE_Direction;

const code char ASCII_TABLE[][5] =
{
 {0x00, 0x00, 0x00, 0x00, 0x00} // 20
,{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 }
,{0x00, 0x07, 0x05, 0x07, 0x00} // 7e °
};

static void Nokia_SPI_Wr( char dat )
{
char i;
  for( i = 0; i < 8; i++ )
  {
     Nokia_Clk = 0;
     Nokia_Data = dat.B7;
     dat <<= 1;
     Nokia_Clk = 1;
     asm nop;
     asm nop;
  }
}

void Nokia_Write( char dc, char _data )
{
  Nokia_DC = dc.B0;
  Nokia_SCE = 0;
  Nokia_SPI_Wr( _data );
  Nokia_SCE = 1;
}

void Nokia_Init()
{
  Nokia_Clk_Direction = 0;
  Nokia_Data_Direction = 0;
  Nokia_SCE_Direction = 0;
  Nokia_RST_Direction = 0;
  Nokia_DC_Direction = 0;
  
  //Reset
  Nokia_RST = 0;
  Delay_us(1);
  Nokia_RST = 1;
  
  Nokia_Write( LCD_CMD, 0x21 );  // LCD Extended Commands.
  Nokia_Write( LCD_CMD, 0xBC );  // Set LCD Vop (Contrast).
  Nokia_Write( LCD_CMD, 0x04 );  // Set Temp coefficent. //0x04
  Nokia_Write( LCD_CMD, 0x14 );  // LCD bias mode 1:48. //0x13
  Nokia_Write( LCD_CMD, 0x0C );  // LCD in normal mode.
  Nokia_Write( LCD_CMD, 0x20 );
  Nokia_Write( LCD_CMD, 0x0C );
}

void Nokia_Set_Cursor( char x, char y )
{
   Nokia_Write( LCD_CMD, 0x40 | y );    //  linha  ( 0 - 5)
   Nokia_Write( LCD_CMD, 0x80 | x );    //  coluna (0 - 83)
}

void Nokia_Chr( char Caracter, char Color )
{
char i, chr;

  for (i = 0; i < 5; i++)
  {   
     chr = ASCII_TABLE[Caracter - 0x20][i];
     if(Color == 0)
     {
       chr = ~(chr);
     }
     Nokia_Write( LCD_DATA, chr );
  }
}

void Nokia_Custom_Char( char *map )
{
char i;

  for (i = 0; i < 5; i++)
  {   
      Nokia_Write( LCD_DATA, *map++ );
  }
}

void Nokia_Fill( char Buffer )
{
unsigned index;
  Nokia_Set_Cursor( 0, 0 );

  for(index = 0; index < 504; index++)
  {
     Nokia_Write( LCD_DATA, Buffer );
  }
}

void Nokia_Out( char row, char col, char *String, char Color )
{
  Nokia_Set_Cursor( col, row );
  
  while(*String)
  {
     Nokia_Chr( *String++, Color );
  }
}

void Nokia_Out_CP( char *String, char Color )
{
  while(*String)
  {
     Nokia_Chr( *String++, Color );
  }
}

void Nokia_Image( const char *Bmp )
{
unsigned i;
    Nokia_Set_Cursor( 0, 0 );

    for (i = 0; i < 504; i++)
    {
      Nokia_Write( LCD_DATA, Bmp[i] );
    }
}

void Nokia_Write_Big_Number( char x, char y, char n, char Color )
{
 char i, chr;
    for(i=0; i < 42; i++)
    {
     if(i % 14 == 0)
     {
       Nokia_Set_Cursor( x, y++ );
     }
  
     chr = BigNumbers[n][i];
  
     if(Color == 0)
     {
       chr = ~chr;
     }
  
     Nokia_Write( LCD_DATA, chr );
    }
}

void Nokia_Write_Med_Number( char x, char y, char n, char Color )
{
  char i, chr;
    for(i=0; i < 24; i++)
    {
      if(i % 12 == 0)
      {
        Nokia_Set_Cursor( x, y++ );
      }
  
      chr = MediumNumbers[n][i];
  
      if(Color == 0)
      {
        chr = ~chr;
      }
       
      Nokia_Write( LCD_DATA, chr );
    }
}


EXEMPLO

#include "bitmap.h"

//copie e cole o código da biblioteca aqui!!
//Ou arquivo externo:
#include "NOKIA3310.C"

sbit Nokia_Clk at RD7_Bit;
sbit Nokia_Data at RD6_Bit;
sbit Nokia_DC at RD5_Bit;
sbit Nokia_RST at RD4_Bit;
sbit Nokia_SCE at RD3_Bit;
sbit Nokia_Clk_Direction at TRISD7_Bit;
sbit Nokia_Data_Direction at TRISD6_Bit;
sbit Nokia_DC_Direction at TRISD5_Bit;
sbit Nokia_RST_Direction at TRISD4_Bit;
sbit Nokia_SCE_Direction at TRISD3_Bit;

void main()
{
   Nokia_Init();
   Nokia_Fill( 0x00 );
   Nokia_Set_Cursor( 0, 3 ); //linha 3, coluna 0
   Nokia_Out_CP( "Microcontrolandos", 0); //cor inversa
   Delay_ms( 3000 );
   Nokia_Image( Logo );
   Delay_ms( 3000 );
   Nokia_Inverse();
}



(30/10/13) - Adicionado fonte para números de tamanho Médio e Grande.


Converter Imagem
Para converter uma imagem para ser mostrada neste display, o compilador MikroC dispõe de uma ferramenta para isso. Selecione o menu TOOLS >> GLCD BITMAP EDITOR >> Nokia 3310.




DOWNLOAD
Biblioteca Completa: NOKIA3310.C
Nokia LCDs para o Proteus: NokiaLCD.zip

41 comentários:

  1. Olá Tiago Copiei o programa acima colei no mickoC porém na hora de compilar está dando um erro, veja o erro:
    (0 357 main function is not defined main function is not defined)
    (0 102 Finished (with errors): 24 jul 2013, 16:13:31 lcd_nokiaII.mcppi)

    Como não manjo nada de linguagem C você podeira me ajudar, gostaria de simular este projeto no proteus porém não consigo o arquivo HEX mas eu não gostaria de só obter o arquivo hex e sim começar a aprender C.

    Valeu! agradeço desde já. Grande abraço!

    ResponderExcluir
    Respostas
    1. esse código é somente a biblioteca.
      Voce terá que copiar e colar e logo após você deve iniciar a funcão main()
      Deste jeito:



      void main()//Sempre tem que ter esta funcao no arquivo
      {
      Nokia3310_Init();//Obrigatorio p iniciar o display lcd
      Nokia3310_setCursor(0,0);//posiciona o cursor para escrever
      Nokia3310_Write_Text("Jairo Piran");//escreve o texto
      }

      Excluir
    2. Valeu!!! Obrigado!!! Gostei muito do Blog. vamos Fazer o fórum bombar!!! já me inscrevi nele. Grande abraço!

      Excluir
  2. Olá, sabe me dizer se o comando "Soft_SPI_Write( dat )" escreve no lcd como se fosse um registrador de deslocamentos? (como o CI 4094)

    Obrigado e parabens pelo blog

    ResponderExcluir
    Respostas
    1. Exatamente!!
      O comando envia o dado do bit MSB ao bit LSB, com clock de subida (LOW para HIGH), e pode ser usado perfeitamente para o 4094.

      Excluir
  3. Olá, Tiago, tudo bem?
    desde que vc me ajudou com a conversão de texto do glcd do mikroBasic ao mikroCPRO, eu consulto o blog sempre (rsrs).
    eu estava mesmo procurando este projeto, pois quase ninguém converteu isso que era do arduino. Vai me ajudar muito este código, apesar de eu ainda usar muito o mikrobasic.
    Parabéns e abraços

    ResponderExcluir
  4. Olá, Tiago, tudo bem?
    desde que vc me ajudou com a conversão de texto do glcd do mikroBasic ao mikroCPRO, eu consulto o blog sempre (rsrs).
    eu estava mesmo procurando este projeto, pois quase ninguém converteu isso que era do arduino. Vai me ajudar muito este código, apesar de eu ainda usar muito o mikrobasic.
    Parabéns e abraços

    ResponderExcluir
  5. Olá Tiago. Sou novo por aqui e um pouco também com microcontroladores.
    Tenho uma dúvida. Esta biblioteca irá funcionar no CCS? Grato.

    Gilson S. Teixeira

    ResponderExcluir
  6. Olá Tiago. Poderia me explicar para que serve o comando ''asm nop;''? Estou convertendo a biblioteca para utilizar no compilador MPLAB X.

    ResponderExcluir
    Respostas
    1. Esta instrução "nop" não faz nada, mas utiliza um ciclo de clock para ser executada... então um nop faz o micro parar por 1 ciclo de clock

      Excluir
  7. Boa noite tiago.
    destou usando o mikroc pro for pic
    estou adicionando a Biblioteca Completa: NOKIA3310.C
    no sources do copilador mikroc pro for pic
    e no progama coloco a estençao #include "NOKIA3310.C"
    do mesmo jeito que ta nesse progama

    #include "NOKIA3310.C"

    sbit Nokia_Clk at RD7_Bit;
    sbit Nokia_Data at RD6_Bit;
    sbit Nokia_DC at RD5_Bit;
    sbit Nokia_RST at RD4_Bit;
    sbit Nokia_SCE at RD3_Bit;
    sbit Nokia_Clk_Direction at TRISD7_Bit;
    sbit Nokia_Data_Direction at TRISD6_Bit;
    sbit Nokia_DC_Direction at TRISD5_Bit;
    sbit Nokia_RST_Direction at TRISD4_Bit;
    sbit Nokia_SCE_Direction at TRISD3_Bit;
    void main()
    {
    Nokia_Init();
    Nokia_Fill( 0x00 );
    Nokia_Set_Cursor( 0, 3 ); //linha 3, coluna 0
    Nokia_Out_CP( "Microcontrolandos", 0); //cor inversa
    Delay_ms( 3000 );

    }

    quando mando copilar da esse erro na extençao #include "NOKIA3310.C"

    28 355 Redefinition of 'ASCII_TABLE [NOKIA3310.c] '. 'ASCII_TABLE' already defined in 'nokia 5110.c' NOKIA3310.c

    127 355 Redefinition of 'MediumNumbers [NOKIA3310.c] '. 'MediumNumbers' already defined in 'nokia 5110.c' NOKIA3310.c

    144 355 Redefinition of 'BigNumbers [NOKIA3310.c] '. 'BigNumbers' already defined in 'nokia 5110.c' NOKIA3310.c

    177 355 Redefinition of 'Nokia_Write [NOKIA3310.c] '. 'Nokia_Write' already defined in 'nokia 5110.c' NOKIA3310.c

    185 355 Redefinition of 'Nokia_Init [NOKIA3310.c] '. 'Nokia_Init' already defined in 'nokia 5110.c' NOKIA3310.c

    e assim vai por diante .
    sera que é por que estou uzando a versao mikroc por for pic e nao a verçao mikroc .
    teria como fazer algo que deixe funcionando.ou estou erando em algo na hora de adicionar a Biblioteca, ou esta certinho o passo a passo
    ficaria muito grato se puder me ajudar pois estou com muita dificuldade para utilizar esse lcd
    obrigado
    Att: Rafael

    ResponderExcluir
    Respostas
    1. Olá Rafael!!
      Você não pode fazer isso. Ou adicione o código no sources do compilador ou você insere o include, nunca os dois viu.

      Abraços,
      Tiago

      Excluir
  8. Boa noite Tiago gostaria de ver com você se tem algo pronto para o modulo de 2.4GHZ NRF24L01 em mikroc mais bem simples, pois gostaria muito de aprender a trabalhar com ele , olhei no libstock , mais não entendi como funciona o código e vejo que é muito útil esse modulo para aplicações você teria para postar no blog, gostaria de pegar um coselho com vc pois você é muito bom no que faz , programar, sou de Campinas e programo a 3 anos mais ainda sou muito novato e gostaria muito de entra de careça nessa área, mais não vejo muito trabalho para programação em pic , o que vc me falaria sobre essa área , não devo desistir e me empenho mais , para ser um profissional registrado na área ou somente robby , e vc conhece algumas empresas para esse lado de campinas onde poderia esta mandando currículos, e quanto ganha um programador de microcontrolado inicialmente hoje ,por não ter muitas vagas para esse ramo especifico, ficaria muito grato pois admiro muito seu trabalho esse blog e como vem ajudando muitas pessoas.coso tenha o programa para o NRF24L01 teria como postar. Abraço.  Rafael

    ResponderExcluir
  9. Bom dia Tiago. Parabéns pelo seu artigo. Muito bom !
    Sou principiante no uso deste versátil display e gostaria de saber como implementar o uso de caracteres grandes usando código ASM para o pic16f628. Desde já obrigado ! Abs Glaucio

    ResponderExcluir
  10. Antes de qualquer coisa, excelente seu artigo. Não estou conseguindo fazer funcionar o teclado 4x4 "(kp = Keypad_Key_Click();" em conjunto com a biblioteca, quando envio o comando Nokia_Out_CP(kp,1); ao invés de mostrar a tecla que digitei, ele mostra partes do último texto enviado para o LCD. Segue anaixo o código que estou usando para o keypad 4x4:

    //Teclado 4x4
    do {
    kp = 0; // Reset key code variable
    do
    kp = Keypad_Key_Click(); // Store key code in kp variable
    while (!kp);
    // Prepare value for output, transform key to it's ASCII value
    switch (kp) {
    case 1: kp = 49; break; // 1
    case 2: kp = 50; break; // 2
    case 3: kp = 51; break; // 3
    case 4: kp = 65; break; // A
    case 5: kp = 52; break; // 4
    case 6: kp = 53; break; // 5
    case 7: kp = 54; break; // 6
    case 8: kp = 66; break; // B
    case 9: kp = 55; break; // 7
    case 10: kp = 56; break; // 8
    case 11: kp = 57; break; // 9
    case 12: kp = 67; break; // C
    case 13: kp = 42; break; // *
    case 14: kp = 48; break; // 0
    case 15: kp = 35; break; // #
    case 16: kp = 68; break; // D
    }
    Nokia_Out_CP(kp,1);
    } while (1);
    //Teclado 4x4

    Desde já agradeço pelo auxílio.

    ResponderExcluir
    Respostas
    1. Olá!
      "kp" é um caracter, por isso, voce deve utilizar a função "Nokia_Chr( kp, 1 )".
      Nokia_Out_CP é somente utilizado para strings.
      Abraços.

      Excluir
    2. Muito obrigado, realmente era esse o problema. (RESOLVIDO)

      Excluir
  11. Estou com certa dificuldade em unir na tela uma String e uma contagem, como mostrado no texto, abaixo, sei que grande parte da dificuldade diretamente ligado a falta do conhecimento correto em relação ao uso das String. Mas se puder de alguma forma me auxiliar desde já agradeço.

    Veja o Exemplo do pretendido:

    dentro da função...
    cnt++;
    Nokia_Fill(0x00);
    Nokia_Set_Cursor(0,1);
    Nokia_Out_CP("Texto "+cnt,1);

    Já tentei também sem exscito:
    Nokia_Chr("Texto "+cnt,1);

    ResponderExcluir
    Respostas
    1. Voce tem que fazer separadamente. Crie um vetor "contString" e utilize a funcao WordToStr() para converter um numero inteiro (16 bits ) pra string. Assim:

      char contString[6]; //para armazenar string de numeros inteiros

      Nokia_Out_CP( "Texto ", 1 ); // escreve texto
      WordToStr( cnt, contString ); // converte a variavel "cnt" para string e salva em "contString"
      Nokia_Out_CP( contString, 1 ); //escreve cnt

      Excluir
    2. Obrigado. Realmente eu já havia pensado nisso, fazer um e depois o outro, é que pensei que de alguma forma poderia fazer os dois em uma única linha, tipo:
      WordToStr( cnt, contString ); // converte a variavel "cnt" para string e salva em "contString"
      Nokia_Out_CP("Texto "+contString, 1 ); //escreve cnt

      Mas OK, vou fazer então UM e depois o OUTRO. Novamente muito obrigado pela atenção.

      Excluir
  12. Poderia citar quais são os pinos de interligação do pic ao lcd nokia, pois o desenho com o esquema não aparece aqui pra mim, obrigado.

    ResponderExcluir
    Respostas
    1. Usando o PIC16F877A:
      ----------------------------------------------------------
      #include "NOKIA3310.C"

      sbit Nokia_Clk at RD7_Bit;
      sbit Nokia_Data at RD6_Bit;
      sbit Nokia_DC at RD5_Bit;
      sbit Nokia_RST at RD3_Bit;
      sbit Nokia_SCE at RD4_Bit;
      sbit Nokia_Clk_Direction at TRISD7_Bit;
      sbit Nokia_Data_Direction at TRISD6_Bit;
      sbit Nokia_DC_Direction at TRISD5_Bit;
      sbit Nokia_RST_Direction at TRISD4_Bit;
      sbit Nokia_SCE_Direction at TRISD3_Bit;

      Excluir
    2. No sistema conseguir com êxito fazer os testes, com as configurações abaixo:
      #include "NOKIA3310.C"

      sbit Nokia_Clk at RD7_Bit;
      sbit Nokia_Data at RD6_Bit;
      sbit Nokia_DC at RD5_Bit;
      sbit Nokia_RST at RD3_Bit;
      sbit Nokia_SCE at RD4_Bit;
      sbit Nokia_Clk_Direction at TRISD7_Bit;
      sbit Nokia_Data_Direction at TRISD6_Bit;
      sbit Nokia_DC_Direction at TRISD5_Bit;
      sbit Nokia_RST_Direction at TRISD4_Bit;
      sbit Nokia_SCE_Direction at TRISD3_Bit;

      Mas não consigo conectar fisicamente o monitor à placa 100MHz (Easy Device - Easy Design) - PIC DIP40 MINI KIT

      Excluir
  13. Estou com outra, acredito que pequena, dificuldade. Tenho um cronômetro utilizando o NOKIA 3310 dessa biblioteca, mas quando coloco a função para exibir uma imagem, intervalor e em seguida o restante do código, o cronômetro não inicia, muda apenas alguns número iniciais e para, como se não houvesse memória e a mesma tivesse sido utilizada pela imagem. Quando comento a linha que exibe a imagem volta tudo ao normal. O que poderia ser?

    ResponderExcluir
  14. Letra GRANDE e CENTRALIZADA tem como com essa biblioteca?

    ResponderExcluir
  15. Como poderia escrever uma função pra alterar o valor do contraste durante a execução do programa?

    ResponderExcluir
  16. Bom dia, primeiramente, parabéns pelo blog, tem informações extremamente úteis. Nessa biblioteca em particular, está dando erro nas seguintes linhas, e os erros são esses:
    228 324 Undeclared identifier 'BigNumbers' in expression Biblioteca 5110.c
    228 322 Pointer required Biblioteca 5110.c
    228 317 Operator '' is not applicable to these operands '' Biblioteca 5110.c
    228 322 Pointer required Biblioteca 5110.c
    248 324 Undeclared identifier 'MediumNumbers' in expression Biblioteca 5110.c
    248 322 Pointer required Biblioteca 5110.c
    248 317 Operator '' is not applicable to these operands '' Biblioteca 5110.c
    248 322 Pointer required Biblioteca 5110.c

    Como posso resolve-los?

    ResponderExcluir
    Respostas
    1. Não sei qual código utilizou, mas no final do post, em Downloads, tem o arquivo completo com o restante dos códigos.

      Excluir
  17. Se alguém puder me ajudar, o Display fica preto inteiro, mas dá para perceber que escreveu, mas está um quadrado preto. Acredito que seja configuração de contraste. Tem nessa biblioteca? Como configuro?

    ResponderExcluir
  18. A configuração do contraste está na linha 159 no código acima...
    Substitua por isto: Nokia_Write( LCD_CMD, 0x80 | contrast );
    'contrast' é um valor entre 0 e 127.

    ResponderExcluir
    Respostas
    1. Tem algum email que posso te contatar? Vou mandar uma foto para mostrar melhor. Alterei o contraste, e não resolve, ele fica ainda com todos os "leds" acesos, mas com uma diferença entre os que estão escritos, e os que não estão. Me passe seu email, por favor, mando uma foto mostrando. Mais uma vez, muito obrigado

      Excluir
  19. Como faço para "importar" valores de sensores e imprimir no LCD? Usa o Nokia_Chr ou o Nokia_Out_CP??

    ResponderExcluir
  20. Como definir as portas de saída para o LCD usando o múdulo para o PIC P16F648A? É possível?

    ResponderExcluir
    Respostas
    1. Já consegui definir e compilar, mas não está startando:
      ---
      sbit Nokia_Clk at RA0_Bit;
      sbit Nokia_Data at RA1_Bit;
      sbit Nokia_DC at RA2_Bit;
      sbit Nokia_SCE at RA3_Bit;
      sbit Nokia_RST at RA4_Bit;
      sbit Nokia_Clk_Direction at TRISA0_Bit;
      sbit Nokia_Data_Direction at TRISA1_Bit;
      sbit Nokia_DC_Direction at TRISA2_Bit;
      sbit Nokia_SCE_Direction at TRISA3_Bit;
      sbit Nokia_RST_Direction at TRISA4_Bit;
      ---

      Excluir
  21. hi mens
    I'm using the last version of mikrobasic
    is there someone that have the library for that program please?

    ResponderExcluir
  22. Cara... gostei muito !!! tive que fazer pequenas melhorias como por exemplo a do espaçamento dos caracteres! mas no geral está ótimo !!! Parabéns !!!

    ResponderExcluir