Jump to content
ELFORUM - Forumul electronistilor

PicBasicPro - defilare text pe LCD


Recommended Posts

Va salut ! Va rog , daca stiti , dati-mi niste idei cum fac sa defilez un text pe o singura linie a unui LCD cu 16 caractere . Si.... poate ma luminati si pe mine cum lucreaza comanda : LCDOUT portx.y,STR ArrayVar{\n} ? Nu am reusit sa o fac sa-mi afiseze ceva , nici cum . Cu multumiri !

Link to comment
  • Replies 22
  • Created
  • Last Reply

Top Posters In This Topic

poti s ail legi pe prtul lpt al calculatorului1e mai usor si cu ajutorul uni program (lcdhype spr ex)poti sa faci sa iti afiseze

Ideea e urmatoare : vreau sa scriu cateva texte la adrese diferite intr-o memorie , sa le citesc din memorie si sa le " defilez " pe display la diferite conditii . Asta cu ajutorul unui program scris intr-un PIC .
Link to comment

Fiind un display de tip caracter, defilarea se va face caracter cu caracter (nu coloana cu coloana, cum se intampla la cele matriceale).

Ideea e cam asa:

- mesajul respectiv se inscrie intr-un buffer circular, adica unul care este citit de la cap la coada, iar cand ajunge la coada o ia de la cap

- afisarea o faci incepand de la o pozitie indicata de un pointer care se... misca la fiecare pas

- la display trimiti doar un sir de lungimea afisajului

Sa incerc o reprezentare "grafica":

QWERTYUIOP - bufferul----       - lungimea afisajului^          - pointer la pasul 1QWER       - stringul afisat la pasul 1QWERTYUIOP - bufferul ^         - pointer la pasul 1WERT       - stringul afisat la pasul 2QWERTYUIOP - bufferul  ^        - pointer la pasul 1ERTY       - stringul afisat la pasul 3           - si tot asa, evident la sfarsit se... intoarce
Implementarea depinde de limbaj.

Intr-unul de nivel inalt ai putea sa te folosesti de functii referitoare la stringuri pentru a compune stringul de afisat, avand ca parametrii un contor care merge de la 1 la lungimea stringului si o variabila pentru lungimea afisajului.

Cam asta ar fi... ideea. Restul e... putina munca :)

Link to comment

Am reusit deplasarea caracterelor din sir , dar ...spre dreapta !!

Acum , programul arata asa :

 

i var word

c var byte

sir var word[31]

x var byte

sir = c

 

loop:

 

pause 500 ' Wait for LCD to startup

lcdout $fe, 1 'sterge ecran

for i = 0 to 30

lookup i,["incercari diverse de afisare !"],c 'citeste sirul

 

lcdout $FE,$80+i,c 'afiseaza c (numai 16 caractere cat e linia )

pause 200

 

next i

 

deplasare:

 

pause 500

 

lcdout $fe , sir 'afisare sir , 16 caractere

pause 500

lcdout $fe, $14 'deplasare la dreapta a cursorului , si afisare a intregului sir

 

pause 300

goto deplasare

 

Incercand sa folosesc comanda "$FE , $10 " care e deplasare la stanga a cursorului , textul se deplaseaza tot la dreapta ?!

Poate mai aveti idei . Multumesc !

Link to comment

:smt006 ' DECLARATIIDevice = 16F877aXTAL = 8 ' Tip LCDDeclare LCD_DTPORT PORTDdeclare lcd_rwpin portd.1Declare LCD_RSPIN PORTD.2Declare LCD_ENPIN PORTD.3Declare LCD_INTERFACE 4Declare LCD_LINES 1Declare LCD_TYPE 0'main programdim bucla as bytedim y as bytedim caracter as bytestart:for bucla = 16 to 0 step -1print at 1,bucla,text1delayms 100next buclaclsgoto starttext1: cdata "Sincronizare ",0'program scris in ProtonBasicmerge la simulare cu Proteus ISIS :yawinkle:

Link to comment

Ai incercat si cu un text mai lung ? Pentru un text de "16" am facut acelas lucru si eu , si stiu ca merge , dar daca e mai lung , si mai e citit si litera cu litera dintr-o memorie ?!?! Eu nu am reusit . Ce am constatat e ca textul se deplaseaza la dreapta cu sau fara comanda de mutare a cursorului .

Link to comment

Nu ma pricep la Basic-urile astea de PIC (adica mi-e cam lene sa ma uit ce functii de prelucrare de stringuri au), dar uite cum ar arata codul intr-ub VB for Applications aproximativ :) - a este stringul trimis la display, iar afiseaza este functia/rutina corespunzatoare:

i=1s="String to display longer than d"d=16while true  if length(s)<= d then    a=s  else    if length(s)-i+1>=d then      a=mid(s,i,d)    else      a=right(s,length(s)-i+1) & left(s, d-(length(s)-i+1))    endif  endif  afiseaza(a)  i=i+1  if i>length(s) then i=1wend
Nu ami stiu daca e := sau = si nici daca e len sau length, ca sa nu mai spun ca nu mi-e clar daca am calculat bine argumentele lui right si left, dar sper sa fie util.

S-ar putea sa fie nevoie cazuri suplimentare pentru a nu lasa argumentele de pozitionare ale lui left si right sa ia valoarea 0.

Daca se schimba incrementarea lui i in decrementare si left cu right (cu ajustarea argumentelor), ar trebui ca textul sa defileze invers.

Link to comment

> Nu ma pricep la Basic-urile astea de PIC Dupa cum am spus mai sus , nici eu nu ma pricep sa convertesc in PicBasicPro comenzile date de tine . Daca tot vrei sa ma ajuti , cand ai timp , foloseste-ti priceperea si fa-o . Cu multumiri !

Link to comment

In opinia mea, a da ajutor cuiva care vrea sa invete programare nu inseamna sa-i dai codul, deci... succes!

Sunt de acord cu ceea ce spui . Dar de la a imi da sfaturi " in chineza "(cand eu am spus din start ca abea ma descurc cu PicBasicul ) si pana la codul dea gata ....e cale lunga . De fapt ,pe de o parte nu stiu de ce / pentru cine ,ai postat liniile acelea de cod , pe de alta parte ma gandesc ca nu-i rau ca le ai postat , or fi destui pe care s-ar putea sa-i ajute . Dar nu pe mine . Totusi iti multumesc pentru efort . Te rog sa ma scuzi .
Link to comment
  • 3 weeks later...

.. :smt006 Sal !!!dupa ceva intirziere.... 'afisare text curgatordevice = 16f877axtal 8'LCDdeclare lcd_interface 4declare lcd_lines 1declare lcd_enpin portb.3declare lcd_rspin portb.1declare lcd_rwpin portb.2'VARIABILEdim char as bytedim loop as bytedim n as byte'main programstart:data "Hello World "for loop = 16 to 0 step -1print at 1,loop,"Hello World "delayms 50next loopclsfor n = 0 to 16for loop = n to 10restore loopread charprint charnext loopdelayms 50clsnext ngoto start... codul este pentru 16F877A daca ai folosi un 18F... ai putea lucra mai usor cu stringuri ... daca reusesti sa faci programul mai "LOGIC" anunta !!! :smt006

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines