LCD programa: ajuda necessária

K

kiranmayik

Guest
oi a todos,
Eu tentei AT89C51 interface com display LCD 20x2 (ODM-20216S).
Tenho ligado port1 de LCD e P3.0 a RS, P3.1 a R / W, P3.2 a E.
mas o LCD não está mostrando nenhuma saída.
Esse é o código:; comunicar com LCD
; verificar pavilhão ocupado antes de enviar dados, o comando para o LCD
; Pino P1 = dados, P3.0 = RS, P3.1 = R / W, P3.2 = pins E
ORG 0H

MOV A, # 38H; inicializar LCD 2 linhas
ACALL COMMAND; comando questão

MOV A, # 0EH; LCD, cursor
ACALL COMANDO
MOV A, # 02H; voltar para casa
ACALL COMANDO
MOV A, # 01H; comando LCD claro
ACALL COMANDO
MOV A, # 06H; cursor para a direita turno
ACALL COMANDO
MOV A, # 80H; cursor: linha 1, a posição 0
ACALL COMANDO
MOV A, # 'L', carta mostrar L
ACALL DATADISP
MOV A, # 'C'
ACALL DATADISP
MOV A, # 'D'
ACALL DATADISP
AQUI:
SJMP AQUI; ficar aquiCOMMAND:
ACALL READY; verificar se lcd pronto
MOV P1, A; código de comando questão
CLR P3.0; RS = 0 para o comando
CLR P3.1; R / W = 0 para gravar LCD
SETB P3.2; E = 1 para H-para-pulso L
ACALL ATRASO
CLR P3.2; E = 0, no fecho
RETDATADISP:
ACALL READY; verificar se lcd pronto
MOV P1, dados A; questão
SETB P3.0; RS = 1 para os dados
CLR P3.1; R / W = 0 para gravar LCD
SETB P3.2; E = 1 para H-para-pulso L
ACALL DELAY; lcd dar algum tempo
CLR P3.2; E = 0, no fecho
RETPRONTO:
SETB P1.7; fazer P1.7 Porta de entrada
CLR P3.0; RS = 0 acesso commang registo
SETB P3.1; R / W = 1 registo comando de leitura
; ler comando registo e verificação pavilhão ocupado
BACK:
CLR P3.2; E = 0 para L-a-pulso H
ACALL DELAY; lcd dar algum tempo
SETB P3.2; E = 1 L-a-pulso H
JB P1.7, BACK; ficar até pavilhão ocupado = 0
RETDELAY:
MOV R3, # 50
HERE1: MOV R4, # 255
HERE2: DJNZ R4, HERE2
DJNZ R3, HERE1
RET
FIMNão tenho certeza quanto a atrasos give.do eu tenho que dar atraso na partida para poder assim on.If quanto? e demora cerca de quanto é necessário para permitir que o pino.

por favor me ajude.
obrigado.

 
Hai

Aqui está o tutorial
http://www.8052.com/tutlcd.phtml

Se o seu LCD é baseado em HD44780 (os comandos me fazem pensar assim)
Aqui está o timings

http://home.iae.nl/users/pouweha/lcd/lcd0.shtml # HD44780

Happy coding
Nandhu: D

 
oi a todos,
Eu tentei AT89C51 interface com display LCD 16X2 (HD44780)
Tenho ligado port1 de LCD e P1.0 a RS, P1.1 a R / W, P1.2 a E.
mas o LCD não está mostrando nenhuma saídaAdicionado após 2 minutos:eek:i a todos,
Eu tentei AT89C51 interface com display LCD 16X2 (HD44780)
Tenho ligado port1 de LCD e P1.0 a RS, P1.1 a R / W, P1.2 a E.
mas o LCD não está mostrando nenhuma saídaqualquer um por favor me ajude a completar meu circuito LCD

 
Também colocou alguns atrasos entre os sinais de escrever enale .. dez chk o pote para o ajuste de contraste ...

 
querido
este é o código fonte do programa desenvolvido utilizado para LCD 16 * 1
Código:

; Interface LCD 89S52

; LCD 8952

; D7 14 P1.7

; D6 13 P1.6

; D5 12 P1.5

; D4 11 P1.4

; PT 6 P1.3

; RS 4 P1.2

; GND 1,3,5

; VCC 2# INCLUDE "8051EQU.INC"

LCD_DATA_4 equ P1.4.

LCD_DATA_5. Equ P1.5

LCD_DATA_6. Equ P1.6

LCD_DATA_7 equ P1.7.

LCD_RS equ P1.2.

LCD_EN. Equ P1.3; RESET

. ORG 0H

AJMP INÍCIO

; Interrupções não (usado); rotinas de interrupção no local adequado

; posições de memória

. ORG 03H; interrupção externa 0

RETI

. ORG 0BH; interrupção timer 0

RETI

. ORG 13H; interrupção externa 1

RETI

. ORG 1BH; interrupção timer 1

RETI

. Porta ORG 23H; serial interromper

RETI

. ORG 25H; localizar início do resto do programa

INICIALIZAR:; configurar o controle de registrosMOV R4, # 00H

MOV A, # 00H

MOV TCON, # 00H

MOV TMOD, # 00H

MOV PSW, # 00H

MOV IE, # 00H; desabilitar interrupções

RET

LCD_INITIALIZE:

NOP

mov P1, # 20h

CLR LCD_RS

SETB LCD_EN

ACALL DELAYMS

CLR LCD_EN

ACALL DELAYMS

mov a, # 28h

ACALL LCD_SEND_COMMAND

mov a, # 0Ch

ACALL LCD_SEND_COMMAND

mov a, # 02h

ACALL LCD_SEND_COMMAND

RETLCD_SEND_COMMAND:

mov 20H, a

ACALL LCD_DATA

LCD_RS clr

LCD_EN SETB

ACALL DELAYMS

LCD_EN clr

ACALL DELAYMSmov A, 20H

um swap

ACALL LCD_DATA

LCD_RS clr

LCD_EN SETB

ACALL DELAYMS

LCD_EN clr

ACALL DELAYMS

retLCD_SEND_DATA:

mov 20H, a

ACALL LCD_DATA

LCD_RS SETB

LCD_EN SETB

ACALL DELAYMS

LCD_EN clr

ACALL DELAYMSmov A, 20H

um swap

ACALL LCD_DATA

LCD_RS SETB

LCD_EN SETB

ACALL DELAYMS

LCD_EN clr

ACALL DELAYMS

retLCD_DATA:

clr c

mov 20h, uma

mov c, 4h

mov LCD_DATA_4, c

mov c, 5h

mov LCD_DATA_5, c

mov c, 6h

mov LCD_DATA_6, c

mov c, 7h

mov LCD_DATA_7, c

; MOV 20H, A; Save A mordidela para baixo

; ORL P1, # 0F0h; Bits 4 .. 7 <- 1

; Não ORL A, # 0Fh; afetam bits 0-3

; ANL P1, A; nibble alto para mostrar

; MOV A, 20H

RETLCD_CLEAR:

MOV A, # 01H

ACALL LCD_SEND_COMMAND

RETLCD_SEND_SPACES:

MOV R4, # 20H

LOOP_SPACES:

MOV A, # ''

ACALL LCD_SEND_DATA

DJNZ R4, LOOP_SPACES

RETDELAYMS:; rotina milissegundos

MOV R7, # 00H

Loopa:

INC R7

MOV A, R7

CJNE A, # 0FFH, loopa

RETDELAYHS:; meia segundo atraso acima milissegundos

MOV R6, # 00H

MOV R5, # 002H

LoopB:

INC R6

ACALL DELAYMS

MOV A, R6

JNZ LoopB

Dezembro R5

MOV A, R5

JNZ LoopB

RETDELAY1S:; um segundo atraso acima milissegundos

MOV R6, # 00H

MOV R5, # 004H

LOOPC:

INC R6

ACALL DELAYMS

MOV A, R6

JNZ LOOPC

Dezembro R5

MOV A, R5

JNZ LOOPC

RETDELAY5S:; 5 segundos de atraso

MOV R6, # 00H

MOV R5, # 010H

LOOPD:

INC R6

ACALL DELAYMS

MOV A, R6

JNZ LOOPD

Dezembro R5

MOV A, R5

JNZ LOOPD

RETDELAY20S:; 20 segundos de atraso

MOV R6, # 00H

MOV R5, # 030H

LOOPE:

INC R6

ACALL DELAYMS

MOV A, R6

JNZ LOOPE

Dezembro R5

MOV A, R5

JNZ LOOPE

RETWRITE_MOBISERVE:

mov a, # 'M'

ACALL LCD_SEND_DATA

mov a, # 'O'

ACALL LCD_SEND_DATA

mov a, # 'B'

ACALL LCD_SEND_DATA

mov a, # 'I'

ACALL LCD_SEND_DATA

mov a, # 'S'

ACALL LCD_SEND_DATA

mov a, # 'E'

ACALL LCD_SEND_DATA

mov a, # 'R'

ACALL LCD_SEND_DATA

mov a, # 'V'

ACALL LCD_SEND_DATAACALL LCD_SEND_SPACESmov a, # 'E'

ACALL LCD_SEND_DATA

mov a, # '-'

ACALL LCD_SEND_DATA

mov a, # 'E'

ACALL LCD_SEND_DATA

mov a, # 'g'

ACALL LCD_SEND_DATA

mov a, # 'y'

ACALL LCD_SEND_DATA

mov a, # 'p'

ACALL LCD_SEND_DATA

mov a, # 't'

ACALL LCD_SEND_DATA
RET

;************************* Entrada do programa ********************** ***********************

START:; programa principal (a energização, o programa inicia neste ponto)

ACALL INITIALIZE

ACALL LCD_INITIALIZE

LCD_CLEAR ACALL

ACALL WRITE_MOBISERVE

MOV P1, # 01H

ACALL DELAY1S

FREEZ:

NOP

CPL P1.1

CPL P1.0

ACALL DELAY1S

AJMP FREEZ. FIM

 

Welcome to EDABoard.com

Sponsor

Back
Top