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.

TUTORIAL: Escrevendo um carácter customizado no LCD

Share:

TUTORIAL:  Escrevendo um carácter customizado no LCD



Neste post irei ensinar como criar e escrever um carácter customizado num display de LCD.

No display LCD pode-se criar até 8 caracteres.

O mikroC possui uma ferramenta que auxilia na geração de um carácter de formatos 5x7 e 5x10. Clique no menu Tools e em seguida clique em LCD Custom Character.

Após você ter desenhado seu carácter, clique no botão GENERATE CODE. Veja que será gerado um código.


Selecione e copie somente o array de bytes, de acordo com o retângulo vermelho da imagem acima. Cada um dos 7 bytes corresponde a uma linha, e cada um dos bits de um byte corresponde a uma coluna, juntos formam o carácter.

Criei duas funções para que você pode criar e escrever esse caracter.

void CreateCustomChar(char address, const char *caracter)
{
  char i=0;
  address &= 0x07;
  Lcd_Cmd(64 + (address << 3));
  for (i = 0; i<8; i++) Lcd_Chr_CP(caracter[i]);
}

void WriteCustomChar(char row, char col, char address)
{
  address &= 0x07;
  //Lcd_Cmd(_LCD_RETURN_HOME);
  Lcd_Chr(row, col, address);
}  

A função "CreateCustomChar()" salva o carácter num determinado endereço (0 à 7) na memória CGRAM do LCD.

A função "WriteCustomChar()" escreve o carácter salvo no determinado endereço.

EXEMPLO:

//Conexões do LCD
sbit LCD_RS at RD0_bit;
sbit LCD_EN at RD1_bit;
sbit LCD_D4 at RD2_bit;
sbit LCD_D5 at RD3_bit;
sbit LCD_D6 at RD4_bit;
sbit LCD_D7 at RD5_bit;

sbit LCD_RS_Direction at TRISD0_bit;
sbit LCD_EN_Direction at TRISD1_bit;
sbit LCD_D4_Direction at TRISD2_bit;
sbit LCD_D5_Direction at TRISD3_bit;
sbit LCD_D6_Direction at TRISD4_bit;
sbit LCD_D7_Direction at TRISD5_bit;


//O array de bytes gerado pela ferramenta do MikroC.
const char coracao[] = {0,10,31,31,31,14,4,0};


void CreateCustomChar(char address, const char *caracter)
{
  char i=0;
  address &= 0x07;
  Lcd_Cmd(64 + (address << 3));
  for (i = 0; i<8; i++) Lcd_Chr_CP(caracter[i]);
}

void WriteCustomChar(char row, char col, char address)
{
  address &= 0x07;
  //Lcd_Cmd(_LCD_RETURN_HOME);
  Lcd_Chr(row, col, address);
}

void main()
{
 Lcd_Init(); //Inicia o LCD
 
 CreateCustomChar(0, coracao); //salva o caracter "coracao" no endereço 0.
 
 WriteCustomChar(2, 2, 0); //Escreve o caracter do endereço 0 na segunda linha
                           //na segunda coluna
 
}

7 comentários:

  1. Tiago, você saberia escrever caracteres na CGRAM do LCD utiliando o Compilador CCS ? Valeu mesmo e parabéns.

    ResponderExcluir
    Respostas
    1. Nao lembro mais como se programa no CCS, mas acho que é assim:

      rom char coracao[8] = {0,10,31,31,31,14,4,0};

      void CreateCustomChar( char addr, rom char *map )
      {
      char i;
      lcd_send_byte( 0, 64 + ( addr << 3 ) );
      for( i = 0; i < 8; i++)
      {
      lcd_send_byte( 1, map[i] );
      }
      }

      void main()
      {
      CreateCustomChar( 0, coracao ); //salva o caracter na posicao 0

      lcd_gotoxy(1,2);
      lcd_send_byte(1,0); //escreve o caracter da posicao 0
      }

      Excluir
    2. Mito da Programação... tenho mais nada a dizer... Valeu MESMO!!!!!

      Excluir
  2. Ola Tiago, eu consigo criar mais que 8 caracteres no lcd, sem perde os dado da tela.

    ResponderExcluir
  3. Boa noite amigo andei lendo seu projetos com microcontroladores e gostei.
    gostaria da sua ajuda em um condigo para controla um motor via RF entre TX e RX controla a velocidade

    ResponderExcluir