Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 53 odgovora
  • 19.918 pregleda

Najnovija ↓

Re: Mikrokontroler i LCD 24.07.2009. u 22:40 · pre 210 meseci #41
a paj sad ovo sto sam uradio:

void MainMenuFunction ()
{
Lcd_Out(1,1,MeniMika);

while (1)
{

if (MPC=0 && Button(&PORTE, RE2, 1, 1))
{
MPC =1;
Delay_ms(600);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out (1,1,MeniLaza);
}
if (MPC=1 && Button(&PORTE,RE2,1,0))
{
MPC=2;
}
if (MPC=2 && Button(&PORTE, RE2, 1, 1))
{
MPC=3;
Delay_ms(600);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out (1,1,MeniPera);
}
if (MPC=3 && Button(&PORTE,RE2,1,0))
{
MPC = 4;
}
if (MPC=4 && Button(&PORTE,RE2,1,1))
{
MPC=5;
Delay_ms(600);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out (1,1,MeniAca);
}
if (MPC=5 && Button(&PORTE,RE2,1,0))
{
MPC=0;
Delay_ms(600);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out (1,1,MeniMika);
}
}
}

samo sto ni ovo ne pije vodu.. jer mi while uslov proverava to beskonacno puta u krug pa mi posle dovodjena 1 na RE2, prebaci na sledece stanje (sa Mike na peru :) ) ali posle 600ms vrati me na Miku...
Razbijam glavu celo popodne kako da napisem ovaj meni!
Re: Mikrokontroler i LCD 25.07.2009. u 13:12 · pre 210 meseci #42
Ajde probaj da objasniš šta ti je ideja, koji je cilj, šta tačno hoćeš da postigneš, možda grešiš u pristupu problemu.

Pozdrav.
Sinisha
Re: Mikrokontroler i LCD 25.07.2009. u 18:07 · pre 210 meseci #43
Pa napisao sam na prosloj strani... :) cak sam i kod sa proteusovim fajlom okacio u zip-u!
Hocu da napravim klasican meni sa tri tastera! Levo , Desno i Potvrdni (enter) taster! Negde gresim uporno...
Imam solidnog iskustva u programiranju aplikacija za racunar u C-u ali u MikroC-u za mikrokontrolere i nemam, tako da ne izvaljujem gresku!

Dakle LEVO (RE1 = 1), DESNO (RE2 = 1), i POTVRDNI taster (RE0 = 1)
Hvala! ;)
Re: Mikrokontroler i LCD 25.07.2009. u 23:08 · pre 210 meseci #44
Ja bih to ovako napravio (pošto ne znam C, napisaću opisno):
definisao bih promenljivu koaj se zove "meni" i dodelio joj neku početnu vrednost u delu za inicijalizaciju zavisno od toga koja treba da bude prva opcija menija.
Napravio bih potprogram koji bi se zvao "ispis" koji bi na displeju ispisivo tekst u zavisnosti od stanja promenljive "meni".

potprogram
ispis:
if meni=1 piši "Mika"
if meni=2 piši "Pera"
if meni=3 piši "Laza"
return

inicijalizacija:
meni=1
gosub ispis

glavna_petlja:
da li je pritisnut neki taster?
ako ne, idi na "glavna petlja"

ako je pritisnut taster "meni levo" i meni > 1 onda smanji meni za 1
ako je pritisnut taster "meni desno" i meni < 3 onda uvećaj meni za 1
ako je pritisnut taster "meni izbor" radi to i to
gosub ispis
goto glavna_petlja

izbor:
.....
.....



To bi bilo otprilike to s tim da verovatno treba da se ispiše nešto novo ako se pritisne "meni izbor" tako da to treba prilagoditi.
Takodje u zavisnosti od tvojih planova možda je dobro na napišeš program kao tzv. "state machine" jer imaš više opcija menija, a možda imaš potrebe i za podmenijima.

Pozdrav.
Sinisha

Re: Mikrokontroler i LCD 25.07.2009. u 23:43 · pre 210 meseci #45
Citat:
conver: a paj sad ovo sto sam uradio:

...

samo sto ni ovo ne pije vodu.. jer mi while uslov proverava to beskonacno puta u krug pa mi posle dovodjena 1 na RE2, prebaci na sledece stanje (sa Mike na peru :) ) ali posle 600ms vrati me na Miku...
Razbijam glavu celo popodne kako da napisem ovaj meni!


Čiju glavu kad svuda imaš jedan znak jednako umesto dva?
Re: Mikrokontroler i LCD 26.07.2009. u 00:24 · pre 210 meseci #46
jedno ili dva znaka =, mikroCpro, sam prepozna i iskompajlira ga kako valja!
Problem je sto mi meni preskace, a ja ne znam zasto!
Danas sam malo konsultovao sinisu pa sam nesto ispravio ali ne mnogo:

Evo:

int MPC=0; //Brojac (MPC = MenuPositionCounter)

char MeniMika[] = " <- Mika ->";
char MeniLaza[] = " <- Laza ->";
char MeniPera[] = " <- Pera ->";
char MeniAca[] = " <- Aca ->";



void MainMenuFunction () //Funkcija za ispisivanje teksta u zavisnosti od vrednosti brojaca
{
if (MPC==0) //Ako je stanje brojaca = 0, ispisivace MIKA
{
Lcd_Cmd (_LCD_CLEAR);
Lcd_Out (1,1,MeniMika);
}
if (MPC==1) //Ako je stanje brojaca = 1, ispisivace LAZA
{
Lcd_Cmd (_LCD_CLEAR);
Lcd_Out (1,1,MeniLaza);
}
if (MPC==2) //Ako je stanje brojaca = 2, ispisivace PERA
{
Lcd_Cmd (_LCD_CLEAR);
Lcd_Out (1,1,MeniPera);
}
}

void GetKeyFunction() //funkcija za detekciju stanja na RE2
{
while(1) //Proverava stanja beskonacno puta
if(PORTE.RE2==1)
{
MPC = + 1; //Vrednost brojaca se uvecava za 1 ,onda kada se na RE2 dovede stanje 1
MainMenuFunction(); //Pozivanje funkcije za ispisivanje teksta menija sa predjasnjom vredoscu brojaca

}
else //u suprotnom kada nema stanja 1 (spustenog prekidaca na RE2)
{
MainMenuFunction(); // samo pozivam funkciju za ispisivanje pocetnog stanja menija... (kako je int MPC = 0, pocetna stavka menija mi je MIKA)
}
}



void main()
{
TRISB = 0;
PORTB = 0xFF;

ANSEL = 0;
ANSELH = 0;

TRISE=255;

Lcd_Init();

Lcd_Cmd(_LCD_CURSOR_OFF);

Lcd_Cmd(_LCD_CLEAR);


Lcd_Out(2,5,"Moj Meni :-)");


Delay_ms(2000);

Lcd_Cmd(_LCD_CLEAR);



GetKeyFunction();

}

I opet mi se ista stvar desava...
kao da mi se negde preklapaju komande...
prvo mi se polako pojavljuje s leva na desno, pa se zatim brise sa desna u levo i tako sve u krug.... ne kontam ga... ko bi rekao da je ovako tesko napisati meni
Ako nekog ne mrzi , nek ucita ovaj hex u pic u proteusu koji se nalazi u ovom zip-u zajedno sa kodom, skontace o cemu pricam... stvarno ne znam kako da resim ovo! :(

http://www.megaupload.com/?d=NIV2GFP3
Re: Mikrokontroler i LCD 26.07.2009. u 01:26 · pre 210 meseci #47
Mi izgleda nemamo isti mikroC!
Ne mogu da pronađem projektni fajl a kada pokušam da iskompajliram kod ima preko trideset grešaka.

Ja koristim:

Citat:

mikroC, mikroElektronika C compiler
for Microchip PIC microcontrollers
Version: 8.1.0.0


Koja je vaša verzija?

Citat:
conver: jedno ili dva znaka =, mikroCpro, sam prepozna i iskompajlira ga kako valja!

Strašno!

Verovatno i ovo prepozna
Code:

MPC = +1;           //Vrednost brojaca se uvecava za 1

kao
Code:

MPC += 1;

Re: Mikrokontroler i LCD 26.07.2009. u 09:08 · pre 210 meseci #48
Izvinjavam se, ovo jeste stvarno moja greska:
MPC = +1;

mikroC PRO V2.50

ni ispravljanje ne pomaze...
Re: Mikrokontroler i LCD 26.07.2009. u 09:41 · pre 210 meseci #49
EVO JA GA NAPRAVIO!!!

Moze vam posluziti kao template ako nekad budete nesto pravili a zatreba vam meni

-------------------------------------------------------------------------------------
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections

int MPC=0; //Brojac (MPC = MenuPositionCounter)

char MenuItem1[] = " <- MenuItem 1 ->";
char MenuItem2[] = " <- MenuItem 2 ->";
char MenuItem3[] = " <- MenuItem 3 ->";
char SubMenuItem[] = " < SubMenuItem >";

void MainMenuFunction ()
{

if (MPC==0)
{
Lcd_Cmd (_LCD_CLEAR);
Lcd_Out (1,1,MenuItem1);
}
if (MPC==1)
{
Lcd_Cmd (_LCD_CLEAR);
Lcd_Out (1,1,MenuItem2);
}
if (MPC==2)
{
Lcd_Cmd (_LCD_CLEAR);
Lcd_Out (1,1,MenuItem3);
}
}

void MoveRightFunction()
{
MPC==MPC++;
MainMenuFunction();
}
void MoveLeftFunction()
{
MPC==MPC--;
MainMenuFunction();
}
void EnterFunction()
{
if (MPC==0||1||2)
{
Lcd_Cmd (_LCD_CLEAR);
Lcd_Out (1,1,SubMenuItem);
}
}


void GetKeyFunction()
{
MainMenuFunction();
while (1)
{
if(PORTE.RE2==1)
{
Delay_ms(500);
MoveRightFunction();
}

if(PORTE.RE1==1)
{
Delay_ms(500);
MoveLeftFunction();
}
if(PORTE.RE0==1)
{
Delay_ms(500);
EnterFunction();
}
}

}



void main()
{
TRISB = 0;
PORTB = 0xFF;

ANSEL = 0;
ANSELH = 0;

TRISE=255;

Lcd_Init();

Lcd_Cmd(_LCD_CURSOR_OFF);

Lcd_Cmd(_LCD_CLEAR);


Lcd_Out(2,5,"Moj Meni :-)");
Lcd_Out(3,5,"My Menu :-)");


Delay_ms(2000);

Lcd_Cmd(_LCD_CLEAR);



GetKeyFunction();

}
---------------------------------------------------------------------------------------
Re: Mikrokontroler i LCD 26.07.2009. u 12:01 · pre 210 meseci #50
Dobro je kad je proradilo.
Ja samo ne mogu da se načudim šta sve ovaj kompajler može da proguta:
Code:
MPC==MPC--;

Code:
if (MPC==0||1||2)

Re: Mikrokontroler i LCD 26.07.2009. u 12:51 · pre 210 meseci #51
Ja koliko znam kad ispitujes neki uslov(if) onda ide dva znaka =,a kad se necemu dodeljuje neka vrednost onda jedan.
Trebalo bi MPC=MPC--; ili jednostavnije MPC--;
Mada mozda taj pro i moze to da radi,imam ga,ali jos uvek radim u obicnom mikroC.
Vazno je da kod radi!(meni licno je malo cudan,ali bitno je da sljaka)

Re: Mikrokontroler i LCD 26.07.2009. u 14:00 · pre 210 meseci #52
@barum

if (MPC==0||1||2)

sta je ovde lose napisano???

ovo jeste:
treba da bude:
MPC = MPC--;
Re: Mikrokontroler i LCD 26.07.2009. u 23:14 · pre 210 meseci #53
Citat:
conver: @barum

if (MPC==0||1||2)

sta je ovde lose napisano???


To je tautologija.
Mislim da je pisac hteo da kaže:

Code:
if (  MPC==0  ||  MPC==1  ||  MPC==2  ) 
Re: Mikrokontroler i LCD 15.12.2009. u 20:21 · pre 205 meseci #54
Problem sa grafickim displejem i PIC-om!!! \

PIC 16F887 8Mhz

Povezao sam ovako:

// Glcd module connections
char GLCD_DataPort at PORTD;
sbit GLCD_CS1 at RB0_bit;
sbit GLCD_CS2 at RB1_bit;
sbit GLCD_RS at RB2_bit;
sbit GLCD_RW at RB3_bit;
sbit GLCD_EN at RB4_bit;
sbit GLCD_RST at RB5_bit;
sbit GLCD_CS1_Direction at TRISB0_bit;
sbit GLCD_CS2_Direction at TRISB1_bit;
sbit GLCD_RS_Direction at TRISB2_bit;
sbit GLCD_RW_Direction at TRISB3_bit;
sbit GLCD_EN_Direction at TRISB4_bit;
sbit GLCD_RST_Direction at TRISB5_bit;
// End Glcd module connections

dakle copy/paste iz Helpa za MikroCpro

kad iskompajliram, ubacim u proteus, izbaci mi gresku na lcd-u u vezi Busy Flag-a... ne kontam... kako da ga setujem off, pomoc ?
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme