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

Pridružen-a: Tor 01 Apr 2008 18:27 Prispevkov: 459 Aktiv.: 2.19
|
Objavljeno: Pon Feb 15, 2010 10:11 pm Naslov sporočila: podmeni |
|
|
Na kak način se lahko gibleš v podmeniju, neda bi oviral glavni meni uporaba bi bila 4 tipk levo, desno, potrditev, nazaj |
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Tor Feb 16, 2010 12:54 am Naslov sporočila: |
|
|
Tole je celotna koda za uro z alarmom, ki sem jo napisal ulala nazaj. Ni napisano najlepše, vendar deluje. Kar je tu po mojem mnenju dobro je menujski sistem, da se ne hecaš preveč, je pa napisano v C-ju upam da ti pomaga.
Manjka ti header datoteka, vendar ni tam nič takega kar bi vplivalo na sam menujski sistem.
Koda: |
#include "C:\devel\pic\projekti\Ura-termo\ura-hdlg.h"
#org 0x1F00, 0x1FFF void loader16F876(void) {} //protect bootloader code for the 8k 16F876/7
int kounter,kounter2;
boolean alarm_activated,rs232_mode,escape;
#int_TIMER1
TIMER1_isr()
{
if (alarm_activated)
{
if (kounter<=2) output_high(alarmPin);
else output_low(alarmpin);
kounter++;
if (kounter==15) kounter=0;
}
if (rs232_mode)
{
kounter2++;
if (kounter2>=250)
{
escape=true;
kounter2=0;
}
}
}
struct mnu {
char c_string[9];
};
const struct mnu menu1[6] =
{
{"Cas "},
{"Datum "},
{"Alarm "},
{"Svet. "},
{"Izhod "}
};
const struct mnu menu2[4] =
{
{"Ura "},
{"Minuta "},
{"Sekunda"},
{"Izhod "}
};
const struct mnu menu3[4] =
{
{"Dan "},
{"Mesec "},
{"Leto "},
{"Izhod "}
};
const struct mnu menu4[1] =
{
{"Menu "}
};
const struct mnu menu5[5] =
{
{"Dnevni "},
{"Datiran"},
{"Brez "},
{"Izhod "}
};
const struct mnu menu6[3] =
{
{"Dnevna "},
{"Nocna "},
{"Izhod "}
};
void init()
{
int t1;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
port_b_pullups(TRUE);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_2); // Potrebujem za alarm (piskanje)
hdlg_init();
init_temp();
alarm_activated=false;
kounter=0;
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
hdlg_gotox(0); //1234567812345678
printf(hdlg_putc,"\fPametna ura v1.2");
t1=read_rtc(0);
t1=t1&0b11111100;
if (t1==0)
{
write_rtc(0,0b10000100);
write_rtc(8,0b10000000);
time[0]=0;
time[1]=0;
time[2]=0;
time[4]=1;
time[5]=1;
set_alarm_time();
set_alarm_date();
}
delay_ms(2000);
}
boolean tipka_set()
{
if (input(set))
{
while (input(set)) delay_ms(10);
delay_ms(20);
return true;
}
else return false;
}
boolean tipka_select()
{
if (input(select))
{
while (input(select)) delay_ms(10);
delay_ms(20);
return true;
}
else return false;
}
void menu_ura(boolean alarm) //Kadar nastavljamo cas mora biti false
{
int select3,select2;
if (!alarm) printf(hdlg_putc,"\f%S%C",menu1[0],1);
else printf(hdlg_putc,"\f%S%C",menu1[2],1);
select2=0;
while (select2!=3)
{
while (!tipka_set()) //izbira nastavitvene funkcije
{
if (tipka_select())
{
select2++;
if (select2==4) select2=0;
}
hdlg_gotox(8);
printf(hdlg_putc,"%S%C",menu2[select2],4);
delay_ms(100);
}
if (select2<3)
{
if (!alarm) gettime();
else get_alarm_time();
printf(hdlg_putc,"\f%S%C",menu2[select2],1);
select3=time[2-select2]; // <<<--- kaj bomo popravili in funkcija poda trenutno nastavljen čas
while (!tipka_set())
{
if (tipka_select())
{
select3++;
if (select2==0 && select3>23) select3=0;
if (select2>0 && select3>59) select3=0;
}
hdlg_gotox(8);
printf(hdlg_putc," %02D %C",select3,4);
delay_ms(50);
}
time[2-select2]=select3;
if (!alarm) settime();
else set_alarm_time();
if (!alarm) printf(hdlg_putc,"\f%S%C",menu1[0],1);
else printf(hdlg_putc,"\f%S%C",menu1[2],1);
}
}
}
void menu_datum(boolean alarm)
{
int select2,select3;
if (!alarm) printf(hdlg_putc,"\f%S%C",menu1[1],1);
else printf(hdlg_putc,"\f%S%C",menu1[2],1);
select2=0;
while (select2!=3)
{
while (!tipka_set()) //izbira nastavitvene funkcije
{
if (tipka_select())
{
select2++;
if (select2==4) select2=0;
}
hdlg_gotox(8);
printf(hdlg_putc,"%S%C",menu3[select2],4);
delay_ms(100);
}
if (select2<3)
{
if (!alarm) getdate();
else get_alarm_date();
printf(hdlg_putc,"\f%S%C",menu3[select2],1);
select3=time[5-select2]; // <<<--- kaj bomo popravili in funkcija poda trenutno nastavljen datum
while (!tipka_set())
{
if (tipka_select())
{
select3++;
if (select2==0 && select3>31) select3=1;
if (select2==1 && select3>12) select3=1;
if (select2==2 && select3>99) select3=0;
}
hdlg_gotox(8);
printf(hdlg_putc," %02D %C",select3,4);
delay_ms(50);
}
time[5-select2]=select3;
if (!alarm) setdate();
else set_alarm_date();
if (!alarm) printf(hdlg_putc,"\f%S%C",menu1[1],1);
else printf(hdlg_putc,"\f%S%C",menu1[2],1);
}
}
}
void menu_svetilnost()
{
int select2,select3;
printf(hdlg_putc,"\f%S%C",menu1[3],1);
select2=0;
while (select2!=2)
{
while (!tipka_set()) //izbira nastavitvene funkcije
{
if (tipka_select())
{
select2++;
if (select2==3) select2=0;
}
hdlg_gotox(8);
printf(hdlg_putc,"%S%C",menu6[select2],4);
delay_ms(100);
}
if (select2<2)
{
printf(hdlg_putc,"\f%S%C",menu6[select2],1);
if (select2==0) select3=read_eeprom(dnevna_osvet);
else select3=read_eeprom(nocna_osvet);
while (!tipka_set())
{
if (tipka_select())
{
select3++;
if (select3>7) select3=0;
}
hdlg_gotox(8);
printf(hdlg_putc," %02D %C",select3,4);
delay_ms(50);
}
if (select2==0) write_eeprom(dnevna_osvet,select3);
else write_eeprom(nocna_osvet,select3);
printf(hdlg_putc,"\f%S%C",menu1[3],1); //Vrnemo se nazaj v podmenu
}
}
}
void menu()
{
int sel1,sel2;
boolean izhod;
printf(hdlg_putc,"\f%S%C",menu4[0],1);
hdlg_gotox(8);
printf(hdlg_putc,"%S%C",menu1[0],4);
sel1=0;
izhod=false;
while (!izhod)
{
//Prikaz in izbira začetnega menuja
while (!tipka_set())
{
if (tipka_select())
{
sel1++;
if (sel1>4) sel1=0;
}
hdlg_gotox(8);
printf(hdlg_putc,"%S%C",menu1[sel1],4);
delay_ms(100);
}
//###########################################################################
//################### Nastavitev časa ###################
//###########################################################################
if (sel1==0)
{
menu_ura(false);
}
//###########################################################################
//################### Nastavitev datuma ###################
//###########################################################################
if (sel1==1)
{
menu_datum(false);
}
//###########################################################################
//################### Nastavitev alarma ###################
//###########################################################################
if (sel1==2)
{
printf(hdlg_putc,"\f%S%C",menu1[2],1);
sel2=0;
while (sel2!=3)
{
while (!tipka_set()) //izbira nastavitvene funkcije
{
if (tipka_select())
{
sel2++;
if (sel2==4) sel2=0;
}
hdlg_gotox(8);
printf(hdlg_putc,"%S%C",menu5[sel2],4);
delay_ms(100);
}
if (sel2<3)
{
if (sel2==0)
{
menu_ura(true);
write_rtc(0,0b00000100);
write_rtc(8,0b10010000);
}
if (sel2==1)
{
menu_ura(true);
menu_datum(true);
write_rtc(0,0b00000100);
write_rtc(8,0b10110000);
}
if (sel2==2)
{ //1234567812345678
printf(hdlg_putc,"\f Brez alarma ");
write_rtc(0,0b00000100);
write_rtc(8,0b10000000);
delay_ms(300);
}
printf(hdlg_putc,"\f%S%C",menu1[2],1); //Vrnemo se nazaj v podmenu
}
}
}
//###########################################################################
//################### Nastavitev svetilnosti ###################
//###########################################################################
if (sel1==3)
{
menu_svetilnost();
}
if (sel1==4) izhod=true;
printf(hdlg_putc,"\f%S%C",menu4[0],1); //Vrnemo se v glavni menu
}
printf(hdlg_putc,"\f");
}
void main()
{
int t,prehod;
char sprej[30];
alarm_activated=false;
init();
prehod=0;
while (true)
{
while (!kbhit())
{
if (prehod>=30) prehod=0;
hdlg_gotox(0);
gettime();
getdate();
t=read_rtc(0)&0b00000110;
if (t==6) alarm_activated=true;
else alarm_activated=false;
printf(hdlg_putc,"%02u:%02u:%02u",time[2],time[1],time[0]);
if (input(dnevninocni)) hdlg_intensity(read_eeprom(dnevna_osvet));
else hdlg_intensity(read_eeprom(nocna_osvet));
if (!alarm_activated)
{
// Tule bomo naredili "oglaševanje" na vsakih 5 sec
if (prehod==0 && prehod<10)
{
hdlg_gotox(8);// 123456 78
printf(hdlg_putc," %3D%C ",read_temp(),0x1b);
}
if (prehod>10 && prehod<20)
{
hdlg_gotox(8);
printf(hdlg_putc,"%02u.%02u.%02u",time[5],time[4],time[3]);
}
if (prehod>20 && prehod<30)
{
if (read_rtc(8)==0x80)
{
hdlg_gotox(8);
//12345678
hdlg_putc("A@ --:--");
}
if (read_rtc(8)==0x90)
{
get_alarm_time();
hdlg_gotox(8);
printf(hdlg_putc,"A@ %02u:%02u",time[2],time[1]);
}
}
}
else
{
hdlg_gotox(8);
printf(hdlg_putc,"Izk.A? %C",2);
}
for (t=0;t<=25;++t)
{
if (tipka_select())
{
menu();
break;
}
if (alarm_activated && tipka_set())
{
write_rtc(0,0b00000100);
alarm_activated=false;
delay_ms(20);
output_low(alarmpin);
}
delay_ms(10);
}
prehod++;
}
escape=false;
//1234567812345678
printf(hdlg_putc,"\f RS 232 MODE");
delay_ms(800);
printf(hdlg_putc,"\f");
while (!escape)
{
kounter2=0;
gets(sprej);
printf("%S\n\r",sprej);
printf(hdlg_putc,"%S",sprej);
kounter=0;
if (sprej[0]=='\\' && sprej[1]=='f') hdlg_putc("\f");
if (sprej[0]=='#') escape=true;
for (t=0;t<=30;++t) sprej[t]=0;
if (input(dnevninocni))
{
hdlg_intensity(read_eeprom(dnevna_osvet));
}
else
{
hdlg_intensity(read_eeprom(nocna_osvet));
}
}
printf(hdlg_putc,"\f");
}
}
|
|
|
Nazaj na vrh |
|
 |
galex4 Član

Pridružen-a: Tor 01 Apr 2008 18:27 Prispevkov: 459 Aktiv.: 2.19
|
Objavljeno: Tor Feb 16, 2010 4:24 pm Naslov sporočila: |
|
|
uf je kra fajn dolga koda, upam da mi bo prišlo prav, saj programiram v mikrobasic-u
hvala |
|
Nazaj na vrh |
|
 |
galex4 Član

Pridružen-a: Tor 01 Apr 2008 18:27 Prispevkov: 459 Aktiv.: 2.19
|
Objavljeno: Sob Feb 20, 2010 11:55 am Naslov sporočila: |
|
|
imaš za to mogoče narisani diagram poteka? |
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Sob Feb 20, 2010 2:55 pm Naslov sporočila: |
|
|
Ne, samo programčič. Tale je star kar nekaj let že .... hmmm 5-6 let najmanj
Uff kam gre čas
Načeloma je osnovno stanje prikaz ure in temperature, če pritisneš tipko pa se pojavi glavni menu, potem pa z izbiro dobiš podmenuje, razen pri menuju izhod, ki te vrne nazaj v višji menu oziroma osnovni prikaz. |
|
Nazaj na vrh |
|
 |
galex4 Član

Pridružen-a: Tor 01 Apr 2008 18:27 Prispevkov: 459 Aktiv.: 2.19
|
Objavljeno: Sob Feb 20, 2010 2:57 pm Naslov sporočila: |
|
|
ker se bolj slabo spoznam na C mi lahko kar takole poveš kako deluje meni in podmeniji? |
|
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
|