 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
damo Član


Pridružen-a: Čet 31 Jul 2003 13:45 Prispevkov: 2008 Aktiv.: 8.47 Kraj: Krško
|
Objavljeno: Sre Avg 16, 2006 7:45 am Naslov sporočila: pomik (scrolling) lcd displaya |
|
|
Ojla,
na 16x1 lcd moram napisati sporočilo, dolgo cca 25 znakov. Takoj sem pomislil na scroll, pa še lepo elegantno je, ko se ti napis pripelje in odpelje Problem je, ker je moj display organiziran kot dvovrstični, torej znaki 1-16 imajo adrese 01h-09h ter 40h-49h.
Display sem konfiguriral tako, da sem vključil scroll, se postavil na zadnji (16.) znak in pisal. Zaradi omenjene konfiguracije pa zadeva ne deluje.
Zdaj vidim edino možnost v tem, da sam napišem scroll rutino in za vsak nov znak napišem cel tekst na display.
Se je že kdo srečal s tem problemom? Kako ste to rešili?
lp, Damo |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.56
|
Objavljeno: Sre Avg 16, 2006 9:29 am Naslov sporočila: |
|
|
Lahko dodajas samo po en znak na konec vsake vrstice, ce imas nastavljem pomik - namesto 16 znakov bos tako poslal samo 2, moras pa zato menjati pozicijo kurzorja. |
|
Nazaj na vrh |
|
 |
damo Član


Pridružen-a: Čet 31 Jul 2003 13:45 Prispevkov: 2008 Aktiv.: 8.47 Kraj: Krško
|
Objavljeno: Sre Avg 16, 2006 2:27 pm Naslov sporočila: |
|
|
ja, pomik imam nastavljen, problem pa je, ker so lokacije organizirane 0-7 in 40-47.
Popoldne bom poskusil naslednje (recimo, da imam 20 znakov dolg text):
1. napišem sporočilo na lokacijo 0x08....0x28 (ki bo itak skrito)
2. postavim kurzor na 16i znak (adresa 0x47), vključim avt. pomik
3. for (a=1;a<=20;a++) lcd_data (text[a]); - scroll
4. for (a=1;a<=20;a++) lcd_data (" ");
(da napis odpotuje in imam na koncu le prazen lcd)
5. izključim avt. pomik
lcd_data je podprogram, ki pošlje podatek na lcd display
bom javil, kako mi je ratalo |
|
Nazaj na vrh |
|
 |
damo Član


Pridružen-a: Čet 31 Jul 2003 13:45 Prispevkov: 2008 Aktiv.: 8.47 Kraj: Krško
|
Objavljeno: Sre Avg 16, 2006 10:00 pm Naslov sporočila: Tkole sem naredil: |
|
|
//---------------------------------------------------------------
// lcd_scroll - scroll izpis teksta
//---------------------------------------------------------------
void lcd_scroll (unsigned char text[40])
{
unsigned char x=0;
lcd_clear;
lcd_code (128+0x10);
while (text[x++]!=0) lcd_data (text[x]);
x=0;
lcd_code (0x07); // set scroll mode on
lcd_code (128+0x47);
while (text[x++]!=0)
{
lcd_data (text[x]);
delay(400);
}
lcd_code (0x06); // set scroll mode off
return;
}
Pomanjkljivost je edino ta, da se mora string začeti s presledkom, ker pa "požre". Ker je ura pozna, se mi ne da več raziskovat zakaj, pa tudi moti me ne preveč.
lp |
|
Nazaj na vrh |
|
 |
domobranko Član

Pridružen-a: Pet 03 Mar 2006 17:55 Prispevkov: 35 Aktiv.: 0.15 Kraj: Koper
|
Objavljeno: Pet Avg 18, 2006 6:58 pm Naslov sporočila: |
|
|
poskusi naslednje:
void lcd_scroll (unsigned char text[40])
{
unsigned char x=0;
lcd_clear;
lcd_code (128+0x10);
while (text[x+1]!=0) {
lcd_data (text[x]);
x++;
}
x=0; lcd_code (0x07); // set scroll mode on
lcd_code (128+0x47);
while (text[x+1]!=0)
{
lcd_data (text[x]);
x++;
delay(400);
}
lcd_code (0x06); // set scroll mode off
return;
}
ko si dal text[x++] v while pogoj je x povečalo za ena še preden se je zanka začela izvajat, tako da se je v prvem koraku izvedlo lcd_data(text[1]) in ne lcd_data(text[0]) kot si želiš. |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 495 dni
Powered by phpBB © 2001, 2005 phpBB Group
|