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); } }
Ótimo projeto!!!!
ResponderExcluirPoderia fazer um projeto de um Lcd serial com PIC
Obrigado!!
A minha versão do MIKROC é a V6.0.0.
ResponderExcluirTentei 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?.
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É que eu estou aprendendo a programar em C‚ por isso a minha dificuldade.
ExcluirE copiei a biblioteca ‚ so não sei se eu habilitei ela.
Bom dia Tiago!
ResponderExcluirCara 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 = ']'
Voce tem o datasheet desse display?
ExcluirTenho só um manual que eles disponibilizam no site da flexpic.
ExcluirBoa noite Tiago!
ExcluirVocê 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.
como faço para usar LCD serial com o mikroc
ResponderExcluirHola
ResponderExcluirI 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)?