problemas para escrever na 2º linha do LCD

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

problemas para escrever na 2º linha do LCD

Mensagempor renan-papaco » 21 Abr 2013 16:26

sei q eu to meio pidão ultimamente, mas... por favor me ajudem. eu to criando um terminal usando um LCD 16X4 como "monitor"

eu estudei os comandos dele e tinha feito um "mapa" com os valores logicos q devem ser postos nele para controla-lo.
mas não to conseguindo pular pras outras linhas do LCD. tentei acompanhar o datasheet mas n consegui fazer nada, só "travar" o "bicho"
poderiam dizer qual ou quais valores binarios devo colocar nesse display?

LCD comandos:

COMANDO: RS EM 0
CHARACTER RS EM 1
PINO "E" GRAVA DADO NO LCD.



inicialização:
DATA: 00001111 RS: 0 E:0

limpeza de tela:
DATA: 10000000 RS: 0 E:0 cls
desloca cursor para direita:
DATA: 00001000 RS: 0 E:0 ->
desloca cursor para esquerda: <-
DATA: 00101000 RS: 0 E:0
move caracteres digitados pra direita: move
DATA: 00011000 RS: 0 E:0
move caracteres digitados pra esquerda: movd
DATA: 00111000 RS: 0 E:0
bota cursor no inicio da tela: home
DATA 01000000 RS: 0 E:0




Obs: D0-D1-D2-D3-D4-D5-D6-D7
character:
espaço: 10001000
0: DATA: 00001100 RS: 1 E:0
1: DATA: 10001100 RS: 1 E:0
2: DATA: 01001100 RS: 1 E:0
3: DATA: 11001100 RS: 1 E:0
4: DATA: 00101100 RS: 1 E:0
5: DATA: 10101100 RS: 1 E:0
6: DATA: 01101100 RS: 1 E:0
7: DATA: 11101100 RS: 1 E:0
8: DATA: 00011100 RS: 1 E:0
9: DATA: 10011100 RS: 1 E:0
/:: DATA: 01011100 RS: 1 E:0
/;: DATA: 11011100 RS: 1 E:0
/?: DATA: 11111100 RS: 1 E:0
A: DATA: 10000010 RS: 1 E:0
B: DATA: 01000010 RS: 1 E:0
C: DATA: 11000010 RS: 1 E:0
D: DATA: 00100010 RS: 1 E:0
E: DATA: 10100010 RS: 1 E:0
F: DATA: 01100010 RS: 1 E:0
G: DATA: 11100010 RS: 1 E:0
H: DATA: 00010010 RS: 1 E:0
I: DATA: 10010010 RS: 1 E:0
J: DATA: 01010010 RS: 1 E:0
K: DATA: 11010010 RS: 1 E:0
L: DATA: 00110010 RS: 1 E:0
M: DATA: 10110010 RS: 1 E:0
N: DATA: 01110010 RS: 1 E:0
O: DATA: 11110010 RS: 1 E:0
P: DATA: 00001010 RS: 1 E:0
Q: DATA: 10001010 RS: 1 E:0
R: DATA: 01001010 RS: 1 E:0
S: DATA: 11001010 RS: 1 E:0
T: DATA: 00101010 RS: 1 E:0
U: DATA: 10101010 RS: 1 E:0
V: DATA: 01101010 RS: 1 E:0
W: DATA: 11101010 RS: 1 E:0
X: DATA: 00011010 RS: 1 E:0
Y: DATA: 10011010 RS: 1 E:0
Z: DATA: 01011010 RS: 1 E:0

/[: DATA: 11011010 RS: 1 E:0
/]: DATA: 10111010 RS: 1 E:0
/!: DATA: 10000100 RS: 1 E:0
#: DATA: 11000100 RS: 1 E:0
%: DATA: 10100100 RS: 1 E:0
*: DATA: 01010100 RS: 1 E:0
/.: DATA: 01110100 RS: 1 E:0
+: DATA: 11010100 RS: 1 E:0
/: DATA: 11110100 RS: 1 E:0
-: DATA: 11010100 RS: 1 E:0
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56

Re: problemas para escrever na 2º linha do LCD

Mensagempor andre_luis » 21 Abr 2013 22:12

Renan,


Primeiramente, você precisa informar qual é a controladora do módulo do display ( Hitachi HD44780 \ Samsung KS0066 \ etc... ).
Depois, a linguagem de programação, que se for em C, há muitas implementações prontas disponíveis na Web para LCD alfanumérico.

Desculpa, sei que isso não ajuda muito, mas ás vezes fica mais fácil utilizar algo pronto do que fazer na unha...


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: problemas para escrever na 2º linha do LCD

Mensagempor EvandrPic » 21 Abr 2013 22:27

Supondo que você esteja usando o mais comum, com a controladora HD44780...
Cada posição no display tem um endereço...
Se você quiser escrever em uma posição pode ir direto pra essa posição passando o endereço antes da escrita...
Dê uma estudada nesse site:
http://microcontrolado.com/conectando-u ... cd-no-pic/

Segue o mapa de endereço:

Imagem
EvandrPic
Dword
 
Mensagens: 2116
Registrado em: 31 Mar 2010 15:05

Re: problemas para escrever na 2º linha do LCD

Mensagempor EvandrPic » 21 Abr 2013 23:12

Se você quer escrever na primeira posição da segunda linha, o endereço é C0.

Embora você esteja usando o 8051, veja esse exemplo baseado no livro "Conectando o PIC":

Código: Selecionar todos
;***********************************
;*   ROTINA PARA ESCREVER NO LCD   *
;*   ASSEMBLY  - PIC               *
;***********************************

BCF        RS                  ; Seleciona o display para COMANDOS
MOVLW      0X01                ; Escreve comando para...
CALL       ESCREVE             ; ...limpar a tela
MOVLW      .1                  ; Espera 1 ms
CALL       DELAY_MS            ;

MOVLW      0X84                ; Comando para posicionar o cursor...
CALL       ESCREVE             ; ...na QUINTA posição (ENDEREÇO 0X84) da PRIMEIRA linha

BSF        RS                  ; Seleciona display para DADOS.

MOVLW      'A'                 ; Envia caracter "A" para o...
CALL       ESCREVE             ; ...endereço selecionado (0X84)

BCF        RS                  ; Seleciona o display para COMANDOS

MOVLW      0XD0                ; Comando para posicionar o cursor...
CALL       ESCREVE             ; ...na PRIMEIRA posição (0XD0) da QUARTA linha

BSF        RS                  ; Seleciona display para DADOS.

MOVLW      'B'                 ; Envia caracter "B" para o...
CALL       ESCREVE             ; ...endereço selecionado (0XD0)
EvandrPic
Dword
 
Mensagens: 2116
Registrado em: 31 Mar 2010 15:05

Re: problemas para escrever na 2º linha do LCD

Mensagempor brasilma » 22 Abr 2013 09:08

Veja se ajuda: Os displays de 4 linhas (normalmente) eletrônicamente são dois de duas linhas juntos - eles possuem dois chips de controle!!!
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Re: problemas para escrever na 2º linha do LCD

Mensagempor Djalma Toledo Rodrigues » 22 Abr 2013 10:58

renan-papaco escreveu:sei q eu to meio pidão ultimamente, mas... por favor me ajudem. eu to criando um terminal usando um LCD 16X4 como "monitor"

eu estudei os comandos dele e tinha feito um "mapa" com os valores logicos q devem ser postos nele para controla-lo.
mas não to conseguindo pular pras outras linhas do LCD. tentei acompanhar o datasheet mas n consegui fazer nada, só "travar" o "bicho"
poderiam dizer qual ou quais valores binarios devo colocar nesse display?
...

Obs: D0-D1-D2-D3-D4-D5-D6-D7 ...


D7 é o Bit de maior ordem, logo deve ser o primeiro

ficando assim:
Obs: D7 D6 .........D2 D1 D0


Isso que foi feito a seguir é o ASCII

0 ---> 30
1 ---> 31
2 ---> 32 etc.
em Hexadecimal, lógico

DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Re: problemas para escrever na 2º linha do LCD

Mensagempor ze » 22 Abr 2013 11:55

além de pidão voce é um mala(gradecido). Mas meu sobrenome é perdão
Código: Selecionar todos
#define lin1 0x80
#define lin2 0xc0
#define lin3 0x94
#define lin4 0xd4
#define LCD_DB7 P00
#define LCD_DB6 P01
#define LCD_DB5 P02
#define LCD_DB4 P03
#define LCD_E P04
#define LCD_RS P05
#define LCD_STROBE LCD_E=1;LCD_E=0
//#define sda p2.1
//#define scl p2.1
void lcd_init()
{
        LCD_E=0;
        LCD_RS = 0;             // write control bytes
        delay(1000);
        LCD_DB7=0;              //set bit pattern for...
        LCD_DB6=0;              //... power-on-reset
        LCD_DB5=1;
        LCD_DB4=1;
   LCD_STROBE;
        delay(1000);
   LCD_STROBE;
        delay(1000);
   LCD_STROBE;
        delay(1000);
        LCD_DB4=0;              // specify 4-bit operation
   LCD_STROBE;
        delay(1000);

   lcd_write(0x28);   // 4 bit mode, 1/16 duty, 5x8 font
   lcd_write(0x0e);   
   lcd_write(0x06);   
   lcd_write(0x0c);
   lcd_write(0x01);   //cls   
}
unsigned char data1;
unsigned int addr;

//1 ~= 1uS @ xtal 12MHz
void delay(unsigned int t)
{
    while(--t);
}

bit a bit mas voce pode escrever o byte direto no port. só cuidado com LCD_E.
Código: Selecionar todos
void lcd_write(unsigned char c)
{
ACC=c;
        LCD_DB7=ACC7;
        LCD_DB6=ACC6;
        LCD_DB5=ACC5;
        LCD_DB4=ACC4;
   LCD_STROBE;
        LCD_DB7=ACC3;
        LCD_DB6=ACC2;
        LCD_DB5=ACC1;
        LCD_DB4=ACC0;
   LCD_STROBE;
        delay(2000); // ~  mS
}


a função abaixo facilita pra voce. Basta posicionar linha, coluna e... "texto"

Código: Selecionar todos
void msgdsp(unsigned char l,unsigned char c,const char * s)
{
   LCD_RS=0;   //comandos
      lcd_write(l+c);//posiciona
   LCD_RS = 1;   // write characters
   while(*s)
      lcd_write(*s++);
}

ex.
Código: Selecionar todos
msgdsp(lin3,5,"OBRIGADO!");//espero que seu display não dê erro ao imprimir isso

ah claro, não esqueça dos includes necessários pros registros
de nada
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Re: problemas para escrever na 2º linha do LCD

Mensagempor renan-papaco » 22 Abr 2013 14:23

estou usando o HD4470 mesmo...e vocês ja ajudaram, vlw.

mas...aí que vocês perguntam...pra que isso?
bem, sei que há rotinas prontas em C baseadas num header "LCD.h" mas esses comandos só permitem sobrepor caracteres no LCD. ao menos no livro que possuo, não vi nenhum comando que ensine a digitar, apagar ou mover caractere por caractere, só dá pra "escrever" no LCD.

minha intenção é justamente poder desenvolver um microterminal usando um LCD, atribuindo á variaves cada caractere gerado, por exemplo, poderia fazer um programa no qual eu possa colocar a combinação q eu desejar e depois manda-las pra uma porta paralela q poderia ser interfaceada no proprio MCU e literalmente imprimir er papel tudo digitado. já desenvolvi um circuito logico de teclado , q usaria um port do 8051(o port P0), outro port como o port P1 poderia ser usado pra mandar dados pro lcd, o port P2 poderia mandar dados pra impressora e ainda restaria o port P3 pra usar como um "barramento" de controle, sendo duas vias pro LCD e outras duas(ao menos o pino STROBE e o PAPER OUT poderiam ser "emulados") e ainda poderia sobrar o pino RXD e o TXD pra usar como porta serial. seria uma ideia meio "tosca" ou eu basicamente poderia implementar isso em algum comercio como um microterminal de vendas.
Sabe quem mais programa um 8051 com ROM externa? MINHA MÃE! HOOOOOOOOOOOOOOOOOO
Avatar do usuário
renan-papaco
Byte
 
Mensagens: 292
Registrado em: 17 Jun 2012 15:56


Voltar para 8051

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x