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.
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.