Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: Sümeyra - 09 Ağustos 2017, 16:40:11

Başlık: While döngüsünden çıkamama
Gönderen: Sümeyra - 09 Ağustos 2017, 16:40:11
Merhaba aşağıdaki kodlarda ayar butonuna basıldıkça saat menüsü içinde sırasıyla gün, ay, yil, saat, dakika ayarlarını yaptırmak istiyorum. ayar 1 kere sayıp gün ayarı menüsüne girdikten sonra çıkmıyor. Ekranda günü arttırıp azaltıyor ama ayar butonuna basınca diğer menüye geçmiyor,sadece geri butonuyla çıkış yapıyor. Bu "while "menülerini ekledikten sonra oldu . "while(saatmenu)" içine girdikten sonra ayar butonuna basılsa da ayar =2 olup ay menüsüne giriş yapmıyor. Bunu nasıl çözebilirim?

       while(saatmenu){                       
       
       if(input(alarm_ayar)==1)
    {
       ayar++;
       delay_ms(100);     
    }

    if(ayar==1)
    {
     gunayari=1;
     while(gunayari)
     {
      printf(lcd_putc,"\fGUN");
      printf(lcd_putc,"\n%02d",gun); //LCD'ye gün,ay,yıl bilgileri yazdırılıyor
      if(input(arttir)==1)
      {
         delay_ms(50);
         while(input(arttir)==1);   
         gun++;
         if(gun==32) gun=1;
      }
      if(input(azalt)==1)
      {
         delay_ms(50);
         while(input(azalt)==1);
         gun--;
         if(gun==0) gun=31;
      }
         ds1307_set_date_time(gun,ay,yil,haftanin_gunu,saat,dakika,saniye);
         if(input(geri)==1) { gunayari=0; }
    }
    }
   
   if(ayar==2)
    {
      ayayari=1;
      while(ayayari)
      {
      printf(lcd_putc,"\fAY");
      printf(lcd_putc,"\n%02d",ay); //LCD'ye gün,ay,yıl bilgileri yazdırılıyor
      if(input(arttir)==1)
      {
         delay_ms(50);
         while(input(arttir)==1);
         ay++;
         if(ay==13) ay=1;
      }
      if(input(azalt)==1)
      {
         delay_ms(50);
         while(input(azalt)==1);
         ay--;
         if(ay==0) ay=12;
      }
          ds1307_set_date_time(gun,ay,yil,haftanin_gunu,saat,dakika,saniye);
          if(input(geri)==1) { ayayari=0; }
      }
      }
   
   
   if(ayar==3)
    {
      yilayari=1;
      while(yilayari)
      {
      printf(lcd_putc,"\fYIL");
      printf(lcd_putc,"\n20%02d",yil);
      if(input(arttir)==1)
      {
         delay_ms(50);
         while(input(arttir)==1);
         yil++;
         if(yil==2037) yil=2017;
      }
      if(input(azalt)==1)
      {
         delay_ms(50);
         while(input(azalt)==1);
         
         yil--;
         if(yil==2017) yil=2037;
      }
         ds1307_set_date_time(gun,ay,yil,haftanin_gunu,saat,dakika,saniye);
         if(input(geri)==1) { yilayari=0; }
      }
    }
   
   
                       
   if(ayar==4)
   {
      saatayar=1;
      while(saatayar)
      {
      printf(lcd_putc,"\fSAAT");
      printf(lcd_putc,"\n%02d",saat);
      if(input(arttir)==1)
      {
         delay_ms(50);
         while(input(arttir)==1);
         saat++;
         if(saat==24) saat=0;
      }
      if(input(azalt)==1)
      {
         delay_ms(50);
         while(input(azalt)==1);
         saat--;
         if(saat==-1) saat=23;
      }
         ds1307_set_date_time(gun,ay,yil,haftanin_gunu,saat,dakika,saniye);
         if(input(geri)==1) { saatayar=0; }
   }
   }
   
   if(ayar==5)
  {
      dakikaayar=1;
      while(dakikaayar)
      {
      printf(lcd_putc,"\fDAKIKA");
      printf(lcd_putc,"\n%02d",dakika);
      if(input(arttir)==1)
      {
         delay_ms(50);
         while(input(arttir)==1);
         dakika++;
         if(dakika==60) dakika=0;
      }
      if(input(azalt)==1)
      {
         delay_ms(50);
         while(input(azalt)==1);
         dakika--;
         if(dakika==-1) dakika=59;
      }
         ds1307_set_date_time(gun,ay,yil,haftanin_gunu,saat,dakika,saniye);
         if(input(geri)==1) { dakikaayar=0; }
    }
  }
   
   
   if(ayar==6||input(geri)==1)
   {
         ayar=0; saatmenu=0;
   }

   if(input(geri)==1)     {  ayar=0; anamenu=1; saatmenu=0; delay_ms(100);  }
       
          ds1307_get_time(saat,dakika,saniye);
          ds1307_get_date(gun,ay,yil,haftanin_gunu);     
         
        printf(lcd_putc,"\fTarih:%02d/%02d/20%02d ",gun,ay,yil); //LCD'ye gün,ay,yıl bilgileri yazdırılıyor
         
      switch(haftanin_gunu)  // DS1302'den sayısal olarak alınan haftanın günü bilgisine
        {                      // metin olarak karşılık atanıyor
         case 1: printf(lcd_putc,"\nPazar"); break; // Eğer "1" ise LCD'ye PAZ yaz
         case 2: printf(lcd_putc,"\nPazartesi"); break; // Eğer "2" ise LCD'ye PZT yaz
         case 3: printf(lcd_putc,"\nSali"); break; // Eğer "3" ise LCD'ye SAL yaz
         case 4: printf(lcd_putc,"\nCarsamba"); break; // Eğer "4" ise LCD'ye CRS yaz
         case 5: printf(lcd_putc,"\nPersembe"); break; // Eğer "5" ise LCD'ye PER yaz
         case 6: printf(lcd_putc,"\nCuma"); break; // Eğer "6" ise LCD'ye CUM yaz
         case 7: printf(lcd_putc,"\nCumartesi"); break; // Eğer "7" ise LCD'ye CTS yaz
      }
     
         printf(lcd_putc,"\nSaat:%02d:%02d:%02d",saat,dakika,saniye); // LCD'ye saat,dakika ve saniye değerlerini yaz
         delay_ms(200); // 1 sn gecikme veriliyor
       
       }       

en başta
int yilayari=0;
int ayayari=0;
int gunayari=0;
int saatayar=0;
int dakikaayar=0;
şeklinde tanımlı.
Başlık: Ynt: While döngüsünden çıkamama
Gönderen: foseydon - 09 Ağustos 2017, 20:03:44
while(saatmenu) döngüsü içerisine görmenizi sağlayan ne?

saatmenu değişkeninin "true" olması.

Peki while döngüsünün içerisinde saatmenu değişkenini "false" yapan bir ifade var mı? Yok.

Bu durumda, program o döngüden asla çıkamaz. Çözüm izin döngünün içerisinde o değişkeni bir noktada "false" yapmanız gerekiyor.
Başlık: Ynt: While döngüsünden çıkamama
Gönderen: mehmet - 10 Ağustos 2017, 01:29:24
Kaç buton kullanıyorsunuz?
Başlık: Ynt: While döngüsünden çıkamama
Gönderen: Sümeyra - 10 Ağustos 2017, 11:11:01
 4 buton kullanıyorum ayar(alarm_ayar olarak tanımladım), arttır, azalt ve geri butonları. günayarı menüsünden çıkmıyordu ona da "if(input(alarm_ayar)==1) gunayari=0;" kodunu ekledim .  ay, yil, saat, dakika ayar menülerine de uygun şekilde ekleyince ayar butonuna basıldıkça menüler arasında geziyor. Ama bu sefer de geçiş yaparken önce hızlıca tarih ve saat in olduğu ana ekranı gösteriyor daha sonra menülerin içine giriyor. sırasıyla geçiş işlemi resimde gösterdiğim gibidir. ana menüyü(2.görüntü) göstermeden direk geçiş yapmasını istiyorum onu nasıl yapabilirim.

(https://s28.postimg.cc/3ulr11hpl/ge_i_ler.png) (https://postimg.cc/image/3ulr11hpl/)
Başlık: Ynt: While döngüsünden çıkamama
Gönderen: apsis - 10 Ağustos 2017, 11:15:25
Döngüden çıkmak istediğiniz yerde "break" ile döngüyü kırabilirsiniz.
Başlık: Ynt: While döngüsünden çıkamama
Gönderen: necati - 10 Ağustos 2017, 11:57:49
int8 k=0;

k=1;//girmek icin

while(k==1){                       
//saatmenu

k=0;//cikmak icin veya k=2;

}                   
       
Başlık: Ynt: While döngüsünden çıkamama
Gönderen: Sümeyra - 10 Ağustos 2017, 17:03:35
Teşekkür ederim herkese sorunu hallettim.