www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

podmeni

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
galex4
Član
Član



Pridružen-a: Tor 01 Apr 2008 18:27
Prispevkov: 459
Aktiv.: 2.19

PrispevekObjavljeno: Pon Feb 15, 2010 10:11 pm    Naslov sporočila:  podmeni Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
bungee
Član
Član



Pridružen-a: Pon 07 Mar 2005 18:49
Prispevkov: 1479
Aktiv.: 6.24
Kraj: Ljubljana

PrispevekObjavljeno: Tor Feb 16, 2010 12:54 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
galex4
Član
Član



Pridružen-a: Tor 01 Apr 2008 18:27
Prispevkov: 459
Aktiv.: 2.19

PrispevekObjavljeno: Tor Feb 16, 2010 4:24 pm    Naslov sporočila:   Odgovori s citatom

uf je kra fajn dolga koda, upam da mi bo prišlo prav, saj programiram v mikrobasic-u

hvala
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
galex4
Član
Član



Pridružen-a: Tor 01 Apr 2008 18:27
Prispevkov: 459
Aktiv.: 2.19

PrispevekObjavljeno: Sob Feb 20, 2010 11:55 am    Naslov sporočila:   Odgovori s citatom

imaš za to mogoče narisani diagram poteka?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
bungee
Član
Član



Pridružen-a: Pon 07 Mar 2005 18:49
Prispevkov: 1479
Aktiv.: 6.24
Kraj: Ljubljana

PrispevekObjavljeno: Sob Feb 20, 2010 2:55 pm    Naslov sporočila:   Odgovori s citatom

Ne, samo programčič. Tale je star kar nekaj let že .... hmmm 5-6 let najmanj Think

Uff d'oh! kam gre čas Razz

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
galex4
Član
Član



Pridružen-a: Tor 01 Apr 2008 18:27
Prispevkov: 459
Aktiv.: 2.19

PrispevekObjavljeno: Sob Feb 20, 2010 2:57 pm    Naslov sporočila:   Odgovori s citatom

ker se bolj slabo spoznam na C mi lahko kar takole poveš kako deluje meni in podmeniji?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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