Fork me on GitHub

18/06/13

PIC: Serial LCD

PIC: Serial LCD



Com uma simples conexão,  você pode escrever numa tela de LCD serial.

A principal vantagem desse LCD é que eles são mais fáceis de conectar.

Este tutorial mostra como conectar um LCD serial. O código abaixo permite você escrever um texto para a tela, mover o cursor, e desenhar um caracter customizado.

Necessita apenas energizar o LCD, e ligar o pino RX do LCD ao pino TX do microcontrolador.

BIBLIOTECA
//comandos
#define LCD_FIRST_ROW 0x80//Move cursor para 1ª linha
#define LCD_FIRST_ROW 0x80//Move cursor para 1ª linha
#define LCD_SECOND_ROW 0x94//Move cursor para 2ª linha
#define LCD_THIRD_ROW 0xA8//Move cursor para 3ª linha
#define LCD_FOURTH_ROW 0xD4//Move cursor para 4ª linha
#define LCD_CLEAR 0x01 //Limpa display
#define LCD_HOME 0x02 //Move cursor para o inicio
#define LCD_SHIFT_LEFT 0x18 //desloca para a esquerda
#define LCD_SHIFT_RIGHT 0x1C //desloca para a direita
#define LCD_MOVE_CURSOR_LEFT 0x10 //move o cursor para esquerda
#define LCD_MOVE_CURSOR_RIGHT 0x14 //move cursor para a direita
#define LCD_DISPLAY_ON 0x0C //display ligado
#define LCD_DISPLAY_OFF 0x08 //display desligado
#define LCD_UNDERLINE_ON 0x0E //cursor visivel
#define LCD_UNDERLINE_OFF 0x0C //cursor visivel
#define LCD_BLINK_ON 0x0D     //blink ligado
#define LCD_BLINK_OFF 0x0C  //blink desligado

char rowAddress[] = {128, 192, 148, 212};

//Inicia a comunicação Serial 
void SerialLCD_Init()
{
Uart1_Init(9600);
delay_ms(1000);
}

//Envia um comando para o LCD 
void SerialLCD_Cmd(char cmd)
{
   Uart1_write(254);
   Uart1_Write(cmd);
   delay_ms(5);
}

//Escreve um caracter 
void SerialLCD_putChar(char row, char col, char caracter)
{
    Uart1_Write(254);
    Uart1_Write(rowAddress[row] + col);
    delay_ms(5);
    Uart1_Write(caracter);
}

//Escreve um caracter na posição atual do cursor 
void SerialLCD_putChar_CP(char caracter)
{
    Uart1_Write(caracter);
}

//Escreve um texto 
void SerialLCD_putString(char row, char col, char *string)
{
    Uart1_Write(254);
    Uart1_Write(rowAddress[row] + col);
    delay_ms(5);
    while(*string)
    {
     Uart1_write(*(string++));
    }
    delay_ms(5);
}

//Cria um caracter na memoria RAM, "location" é um numero de 0 a 7
void SerialLCD_createChar(char location, char map[])
{
char i;
   location &= 0x07;
   Uart1_write(254);
   Uart1_write(64 + (location << 3));
   for(i=0; i<8; i++)
   {
     Uart1_write(map[i]);
   }
}

//Escreve o caracter criado na memoria RAM 
void SerialLCD_putCustomChar(char location, char row, char col)
{
    location &= 0x07;
    Uart1_Write(254);
    Uart1_write(rowAddress[row] + col);
    Uart1_Write(location);
}
EXEMPLO
char coracao[] = {10,31,31,31,31,14,4,0};
char i;
void main()
{
    SerialLCD_Init();
    SerialLCD_Cmd(LCD_CLEAR);
    
    SerialLCD_createChar(1, coracao);
    for(i=0;i<4;i++)
    {
    SerialLCD_putCustomChar(1, i, 0);
    SerialLCD_putString(i, 1, "Microcontrolandos");
    SerialLCD_putCustomChar(1, i, 19);
    }
}

10 comentários:

  1. Ótimo projeto!!!!
    Poderia fazer um projeto de um Lcd serial com PIC
    Obrigado!!

    ResponderExcluir
  2. A minha versão do MIKROC é a V6.0.0.

    Tentei colocar estas funções que esta no seu exemplo, e não deu certo só da erro.
    Você teria algum outro exemplo para LCD SERIAL?.

    ResponderExcluir
    Respostas
    1. Voce adicionou o codigo da biblioteca acima e habilitou a biblioteca UART? O código tá tao simples, que é impossível de ocorrer erros.

      Excluir
    2. É que eu estou aprendendo a programar em C‚ por isso a minha dificuldade.
      E copiei a biblioteca ‚ so não sei se eu habilitei ela.

      Excluir
  3. Bom dia Tiago!

    Cara não consegui escrever nada no LCD, copiei a biblioteca, e o arquivo esta sendo compilado normalmente, mais não escreve nada no LCD.
    O fabricante pede para seguir o exemplo que esta abaixo, só que esta em CCS, você pode me ajudar a passar para o MIKROC?

    Para envio de comando de posicionar cursor no display.
    Sintaxe:
    “@” + PosiçãoColuna + PosiçãoLinha
    Exemplo:
    @ 0x0C 0x02 coloca o cursor na 12a coluna e 2a linha
    (não usar os caracteres"[" ou "]")
    Para envio de comandos ao Display
    Sintaxe:
    “ [ “ + Comando + “ ] “
    Listagem de Comandos:
    Comando Função Valor em Hexadecimal Comando Código '\'
    LIMPA DISPLAY 0x07 \a
    LIGA CURSOR 0x0B \v
    DESLIGA CURSOR 0x0D \r
    PISCA CURSOR 0x08 \b
    Incrementa Cursor (Avançar1 caractere ) 0x0C \f'
    Decrementa Cursor (Recuar 1 caractere) 0x09 \t
    Nível BackLight (luz de fundo, default 127) 0x04 + valor de 0 à 255 –
    Liga LCD (default Ligado) 0x05 –
    Desliga LCD 0x06 –
    Exemplos em C:
    // posicionar cursor
    fprintf (LCD,"@");
    fprintf (LCD,"%c",x);
    fprintf (LCD,"%c",y);
    delay_ms (8); // sempre aguardar o 8 ms após posicionamento
    Sequência para limpar display enviar:
    5B 5C 07 5D // note que: 5B = '[' 5C = '\' '07' = comando e 5D = ']'
    Posicionar Cursor na Coluna 1 e Linha 2
    40 01 02 // note que: 40 = '@' 01 → coluna e 02 → linha
    Imprimir Texto "1234567890123456"
    5B313233343536373839313233343536375D // note que: 5B = '[' e 5D = ']'

    ResponderExcluir
    Respostas
    1. Tenho só um manual que eles disponibilizam no site da flexpic.

      Excluir
    2. Boa noite Tiago!
      Você teria um e-mail para que eu possa enviar o manual que eu tenho pra vê se você consegue me ajudar.
      Agradeço a atenção.

      Excluir
  4. como faço para usar LCD serial com o mikroc

    ResponderExcluir
  5. Hola
    I have SerLCD V2.5 and I am trying to connected and send data to a PIC16f877a.
    I wrote the code in asm, but I am not showing anything. Do you have an example in asm (assembler)?

    ResponderExcluir

Postagens Relacionadas!!