![](http://www.elektronika.lt/_sys/img/dot.gif) |
![](/_sys/img/dot.gif)
|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 02 08, 21:00. Visos datos yra GMT + 2 valandos.
|
|
|
![](/_sys/img/box_ico.gif) |
Forumas » Mikrovaldikliai » LCD valdymas
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
![](/_sys/img/dot.gif) |
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
LCD valdymas |
Parašytas: 2013 03 08, 11:54 |
|
|
|
Sveiki, darau įioki toki projektelį. Mėginu su 5 mygtukais (UP, RIGHT, DOWN, LEFT, ENTER) valdyti LCD1602, kad sužinočiau pati valdymo principą. Žemiau pateikiau kodo fragmento skeletą, kad mažiau vietos užimtų, 5 mygtukai prijungti prie F portų. Kaip matote, viską darau su IF tikrinimais.
Problema yra tame, jog sekanciame meniu paspausdus LEFT mygtuką, niekaip neiseina gristi i Pagrindini meniu. Programa ties ta vieta užlušta (sustoja veikti). Žinoma, su komanda goto viską galima padaryti lengvai, tačiau kažkaip su ta komanda nesamonė yra, norisi normalesni ir gražesnį kodą parašyt.
Gal kas turit minčių kaip iš tokios situacijos išsisukti?
Kodas: |
#define UP ((status & 0x1F) == 0x01) //PORTF 0, HIGH 0 0001 & 1 1111 = 0 0001
#define LEFT ((status & 0x1F) == 0x02) //PORTF 1, HIGH 0 0010 & 1 1111 = 0 0010
#define ENTER ((status & 0x1F) == 0x04) //PORTF 2, HIGH 0 0100 & 1 1111 = 0 0100
#define RIGHT ((status & 0x1F) == 0x08) //PORTF 3, HIGH 0 1000 & 1 1111 = 0 1000
#define DOWN ((status & 0x1F) == 0x10) //PORTF 4, HIGH 1 0000 & 1 1111 = 1 0000
#define MAIN_MENU 0
#define FIRST_MENU 1
#define MENU1 2
#define MENU2 3
#define HOME 4
#define BACK 10
int main(void)
{
LCD_init();
unsigned int status;
short etat=MAIN_MENU;
DDRF = 0xE0;
PORTF = 0x1F;
/******************* Pagrindinis meniu **************/
while ((etat!= FIRST_MENU) || (etat == HOME))
{
// HOME1:
if(ENTER)
{
etat=FIRST_MENU;
}
if(UP|LEFT|DOWN|RIGHT)
{
etat=MAIN_MENU;
}
}
/********** Sekantis meniu ****************/
if (etat == FIRST_MENU)
{
while (etat != BACK)
{
if(LEFT)
{
etat=BACK;
// goto HOME1;
}
}
}
}
|
|
|
|
|
|
![](/_sys/img/dot.gif) |
![](templates/elektronikalt/images/folder.gif) |
LCD valdymas |
Parašytas: 2013 03 08, 13:34 |
|
|
|
stat=MAIN_MENU;// arba HOME, o ne BACK |
|
|
|
|
![](templates/elektronikalt/images/folder.gif) |
LCD valdymas |
Parašytas: 2013 03 08, 14:06 |
|
|
|
Šitas variantas jau buvo mėgintas, tačiau jis taip pat yra neveikiantis. Tarkim, jei tavo sakytoje vietoje (paboldinta vieta) parašome HOME arba MAIN_MENU, tai gauname, jog visada while sąlyga bus vykdoma, nes vienu atveju gauname, jog HOME not BACK yra TRUE, ir kitu atveju taip pat gaunasi.
Kodas: |
if (etat == FIRST_MENU)
{
while (etat != BACK)
{
if(LEFT)
{
[b]etat=HOME; [/b]
}
}
} |
|
|
|
|
|
![](templates/elektronikalt/images/folder.gif) |
LCD valdymas |
Parašytas: 2013 03 08, 14:24 |
|
|
|
nematau jokiu problemu del "goto"
bet jei esi ciklo vidule ir nori betkurioje vietoje patekti i ciklo pradzia tai naudok zodi
continue
jei nori cikla nutraukti naudok
speju kad break turetu ismesti is { } komandu grupes
reikes isbandyti ka daro tokia funkcija
{
break;
} |
|
|
|
|
![](templates/elektronikalt/images/folder.gif) |
LCD valdymas |
Parašytas: 2013 03 08, 14:33 |
|
|
|
Bet ar su goto programa po kurio nors laiko neužsibugins? Nes truputi miglotai pamenu, jog ant asemblerio, bent jau ant PIC, kvieciant goto daugiau nei 8 kartus liktais persipildo programos skaitiklis, o cia yra naudojamas AVR |
|
|
|
|
![](templates/elektronikalt/images/folder.gif) |
LCD valdymas |
Parašytas: 2013 03 08, 14:50 |
|
|
|
Na ir durna siandien galva Nebuvau int main funkcijoje begalinio ciklo padares, sekanciame meniu su break uzbaigiam cikla ir is karto gristam i pirminio ciklo pradzia
Problema IŠSPRESTA, dėkui visiems už sugaištą laiką ![Smile](images/smiles/icon_smile.gif) |
|
|
|
|
|
![](http://www.elektronika.lt/_sys/img/box_ico.gif) |
Google paieška forume |
|
![](http://www.elektronika.lt/_sys/img/box_ico.gif) |
Naujos temos forume |
|
![](http://www.elektronika.lt/_sys/img/dot.gif) |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
![](http://www.elektronika.lt/_sys/img/dot.gif) |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
LEGO
Mänguköök,
mudelautod,
nukuvanker |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
KCD2 Mods
Installing KCD 2 Mods,
KCD 2 Guides,
KCD 2 Cheats |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
GTA 6 Wiki
GTA 6 Map,
GTA 6 Characters,
GTA 6 News |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
![](http://www.elektronika.lt/_sys/img/dot.gif) |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
|
![Reklama](http://www.elektronika.lt/_sys/img/rrr2.gif)
|
![Reklama](http://www.elektronika.lt/_sys/img/rrr1.gif) |