LCD Probleem

E

elexhobby

Guest
Hi ..
Ik leer interfacing een LCD-scherm met UC.
Ik kon met succes karakters weergegeven op het LCD-scherm.Ik heb de cursor naar links opdracht om een indruk van een scrollende tekst te geven.Maar het probleem is wanneer de lengte van mijn string wordt meer dan 24 tekens, het volgende karakter begint automatisch worden weergegeven op lijn 2 (Ik gebruik een 16 x 2 LCD).Is dit bcoz van de beperkte hoeveelheid geheugen?Wat is de oplossing voor dit?
Stel dat ie mijn string is Hi How are you?Ik ben hier prima Deze wordt weergegeven zoals afgebeeld, omdat tot n brief 'van fijn het woord, zijn er 24 tekens.(Slechts de laatste 16 karakters zullen aanwezig zijn op elk moment in de bovenste lijn)

Quote:re u?
Ik ben fin

_____________e hier
 
ergens in de LCD-bestuurder de wiskunde is verkeerd
of uw routine te bladeren heeft een lijn aantal fouten bij de buffer is in oveflow

post de code voor uw project, zodat we allemaal kunnen bekijken aub

 
Hoi
Sorry, ik was niet duidelijk in de vermelding van mijn probleem.
Infact, ik ben verward met scherm & cursor verschuiven ook, naast mijn bovenstaande probleem.
Het commando voor cursor / scherm verschuiving is-000001 I / OS
De data sheet zegt
I / O = 1 / 0: Cursor R / L, Scherm L / R
S = 1 / 0: Shift scherm / cursor
Nu stuur ik 06 of 04 als het commando woord en tekst Welkom vanaf 87H-adres, dan H wordt weergegeven 87H, 88H op e & o zo verder tot aan 8BH.Het display is hetzelfde, of ik stuur commando woord als 06 of 04.
Aan de andere kant, als ik het stuur commando woord als 07 of 05 (hetzelfde resultaat voor beide), o wordt weergegeven 86H, 85H & l bij zo door tot H om 82h.Zo beweegt geleidelijk in de linker richting, als adres is 87H, zoals elk personage wordt verzonden.Merk op dat wanneer ik stuur eerste H van 87H in dit linker shift-modus, wordt deze weergegeven op het adres, dat wil zeggen 86H en dan is het geleidelijk verschuift naar links, als ik e, l, l, o verzenden.
06,04 = rechts verschuiven
05,07 = left shift
Aangezien ik wilde een scrolling display (zoals tent in html) te maken, stuurde ik de string Welkom op adres 90H, zodat het begint te verschuiven links van het adres 8Fh.En ik ben met een voldoende vertraging tussen het verzenden van twee karakters, om de indruk van beweging.Dit werkte prima, zolang mijn string kort was als Hello.
Maar toen ik stuurde Hello, How ru?Ik ben hier prima Merk op dat n in boete is de 24e karakter.Dus het doet het scrollen in de eerste lijn zoals verwacht tot n.Maar het karakter e start in de tweede lijn.
Dus uiteindelijk de definitieve display ziet er als getoond (laatste 16 karakters aanwezig op elk moment)

?Ik ben fin
_______e hier

(Gooi de underscore, het is gewoon om e hier duwen na fine).

Hier is de code die ik gebruik

RS EQU P1.2
RW EQU P1.1
E EQU P1.0
VLAG EQU P2.7
DATAPRT EQU P2
LCD:
mov A, # 38h
acall Command
mov A, # 0Ch
acall Command
mov A, # 07
acall Command
mov A, # 01h
acall Command
mov A, # 90h
acall Command

; Display begint hier
mov dptr, # Character
Back2:
clr A
movc A, @ A dptr
Hier JZ
acall Display
inc dptr
sjmp back2
hier:
sjmp hier

Command:
acall Ready
CLR E
mov DATAPRT, A
CLR RS
CLR RW
setb E
CLR E
retDisplay:
acall Ready
CLR E
mov DATAPRT, A
setb RS
CLR RW
setb E
CLR E
acall Delay
ret

Gereed:
Een push
clr A
CLR E
setb RW
CLR RS
mov DATAPRT, # 0FFh
Wacht:
setb E
CLR E
dec A
JZ Out
jb FLAG, Wait
Out:
Een pop
ret

Vertraging:
mov R2, # 02h
again2:
mov R0, # 0FFh
again1:
NOP
mov R1, # 0FFh
back1:
djnz R1, back1
djnz R0, again1
djnz R2, again2
ret

Karakter:
db 'Hello, How ru?Ik ben fijn hier ', 0
eindigen

Sorry voor zo'n lange post.Please do vrije tijd om te lezen en mijn twijfel antwoord.
Thanks a lot ...

 
Hi elexhobby,

Houd in gedachten dat uw beeldscherm heeft 40 tekens in een lijn (eerste 16 zichtbaar en anderen 24 verstopt aan de rechterkant)
Je begint te schrijven op het adres van 10H (uw 90H betekent: Stel DD RAM-adres 10H)
De lengte van de string is 30 tekens (Hello, how ru? Ik ben prima hier), waarin staat dat 'n' van 'betekent fijn "is in feite de 40e, de laatste char op de eerste regel (u heeft 16 ruimten in front van "H" van Hello)
U stelt I / D = 1 in de Entry-modus ingesteld, hetgeen betekent dat de DDRAM adres wordt met 1 verhoogd als een teken code is geschreven in DD RAM en S = 1 waardoor volledige scherm verschuiving naar links.
Merk op dat in een 2-regelig display, de cursor naar de tweede regel bij het passeren de 40e cijfer van de eerste lijn.
Merk ook dat de eerste en tweede lijn geeft zal er een verschuiving op hetzelfde moment.
Heb je uitzoeken?

 
OK Ik begrijp nu het probleem ..

Maar is er een oplossing voor dit, als ik wil de tekst worden weergegeven op de eerste regel alleen ..

Er is een duidelijke instructie geheugen beschikbaar, maar het zal duidelijk het hele geheugen, zodat de laatste zichtbare tekst zal ook worden geschrapt, en zal er een soort van discontinuïteit in de weergegeven tekst ..

Een oplossing is - een telling register, en zodra 24 tekens zijn voorbij, het geheugen verwijderen, opnieuw te verzenden de laatste 16 tekens zonder een vertraging tussen hen, en vervolgens stuurt u het volgende 8 karakters met een vertraging tussen hen ..Op deze manier zal de gebruiker niet merken vanwege persistentie ..

Maar op deze manier, kunt u slechts 8 tekens elke keer dat u deze procedure uit te voeren ..Is er een betere methode beschikbaar?
Bedankt voor het opruimen van mijn twijfel ..

 

Welcome to EDABoard.com

Sponsor

Back
Top