Ir ao conteúdo
  • Cadastre-se

Utilizando LCD 16x2


o.aprendiz

Posts recomendados

Olá pessoal!

Quero aprender a utilizar um LCD 16X2, mas não sei nem como começo a fazer um programa para isso. Resolvi pedir socorro aqui no club. Se alguém puder me ajudar agradeço. Estou utilizando um microcontrolador 89S52 e estou programando em C (só conheço linguágem C). O modelo do LCD é 1602H. Pode ser algo bem simples, como enviar um "OLA" ou contar até 5, para que eu possa enteder como funciona. Sei que é pedir demais que me explique tudo, o problema é que eu não sei nem como começo o programa. Pesquisei na net, mas a maioria do pessoal utiliza pic (não conheço muito bem) ou então a linguágem é assembly.

Agradesço desde já pela força.

Link para o comentário
Compartilhar em outros sites

Opa, vou aproveitar o tópico do camarada para abrir uma questão que me surgiu esses dias. Estive um pouco curioso sobre os controladores desses LCDs alfanuméricos pois o protocolo é sempre o mesmo para qualquer um desses LCDs e gostaria de saber se o controlador é único também. Quando trabalhei com um LCD gráfico tive muita dificuldade de fazer rodar pois o controlador era diferente dos que normalmente tem por ai.

Enfim, procurando no tio google encontrei o datahseet do controlador HD44780U, dei uma lida por cima mas pelo que entendi o limite dele (com um driver extensor) é de 16x2. Mas os LCDs 20x2 seguem o mesmo protocolo e tudo mais. Queria saber se há um controlador universal que seja usado nesses lcds alfanuméricos ou se há somente um padrão de comunicação e set de instruções que torna todos eles "equivalentes".

Voltando um pouco a ideia original do criador do tópico, o controle desses LCDs, como eu disse acima, é meio que padrão. Aqui ta o PDF que eu disse que estou estudando se você quiser dar uma olhada:

http://www.sparkfun.com/datasheets/LCD/HD44780.pdf

Eu trabalho com PICs, mas a lógica é extremamente simples e se resume ao controle de saídas sem utilização de periféricos. A conversão do código deve ser bem fácil por isso sugiro que procure um código em C pra PIC e faça a migração.

Link para o comentário
Compartilhar em outros sites

Veja EDU,o protocolo é o mesmo,o que muda é o endereçamento.

Veja um exemplo de endereçamento;

LCD_LINE1_ADD		EQU		0X80		; ENDEREÇO DDRAM DA 1º COLUNA DA 1º LINHA DO DISPLAY
LCD_LINE2_ADD EQU 0XC0 ; ENDEREÇO DDRAM DA 1º COLUNA DA 2º LINHA DO DISPLAY
LCD_LINE3_ADD EQU 0X90 ; ENDEREÇO DDRAM DA 1º COLUNA DA 3º LINHA DO DISPLAY
LCD_LINE4_ADD EQU 0XD0 ; ENDEREÇO DDRAM DA 1º COLUNA DA 4º LINHA DO DISPLAY

Esse é o endereçamento padrão de um LCD 16X4.

Se eu for usar um 16X2,eu apenas uso os dois primeiros endereços,o resto na minha rotina é igual.

No caso dos Graficos,voce trabalha diretamente com pixel na Ram,e existe vários meios de se fazer isso.

Na verdade,eu acho, que é uma 'preguiça' de 'programadores' que não dão uma boa lida nos datasheets e não programam rotinas de verdade,apenas 'copiam',isso faz um simples aumento de endereço se tornar algo 'complexo'.

Não estou me referindo a ninguem aqui e muito menos querendo ofender.

Eu mesmo ja fiquei um bom tempo procurando um meio simples para trabalhar melhor com estes displays quando na verdade era só prestar atenção nos endereços no datasheet.

Link para o comentário
Compartilhar em outros sites

Veja bem, pelo que eu entendi do datasheet o endereço dos caracteres na DDRAM é de 7 bits, sendo que a primeira linha vai de 0x00 até 0x3F, e a segunda linha de 0x40 até 0x7F, só que o comando para selecionar o cursor da tela tem o bit MSB em nível 1, logo a primeira linha vai de 0x80 até 0xBF e a segunda de 0xC0 até 0xFF. Ao que me parece o que foi feito foi o deslocamento da parte não utilizada da primeira linha para a terceira e o que não foi utilizado na segunda para a quarta. Nunca trabalhei com displays de mais de duas linhas mas foi o que me pareceu. Me arrisco a dizer que se fosse um LCD 20x4 serial algo como 0x80, 0xC0, 0xA0, 0xD0 o endereço inicial das linhas. Mas pelo visto então o negócio é um protocolo padrão com comandos e timings mas o controlador pode variar, certo?

Link para o comentário
Compartilhar em outros sites

A frase abaixo não é minha,mas acho que explica isso;

;O comando para atualizar o endereço da DDRAM é 0x80 + o endereço que você quer,

;por exemplo, se quiser apontar para o primeiro endereço da segunda linha de LCD 16x2 basta enviar para o LCD o codigo 0xC0,

;o AC é incrementado auotmaticamente após cada entrada de caractere

Eu simulei no Proteus(ja faz tempo) para testar com o mesmo código,mas mudando o 'range' dos endereços,eu troquei o display de 16x2 por um 16x4.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!