avatar_kartal_0689

Menü oluşturma

Başlatan kartal_0689, 20 Eylül 2013, 16:49:38

kartal_0689

Arkadaşlar forumda biraz inceleme yaparken menü oluşturmayla ilgili bir konuda bende uyguladıklarımı yazayım istedim.
Gerçi konu çok eski ancak belki bi faydası dokunur. Konunun kaynağı burası http://etepic.com/index.php/topic,560.msg6099.html#msg6099

Öncelikle menü oluşturduğumuzda PIC' in diğer işlemlerini yapması için, yani menü içerisindeyken sadece o kodlarla uğraşmasını istemiyorsak
bir timer kurup, sürekli çalışacak işlemleri orada yaptırmamız gerekir. Örnekte timer anlatılmamış sadece menü kullanımı anlatılmıştır.

Ben MikroPascal kullanıyorum, kodlar buna göre verilmiştir. Ayrıca mantık aynıdır.
if (Ok_Button = 0) then
             begin
                  MainMenu_In_Counter := (MainMenu_In_Counter + 1);
                  if (MainMenu_In_Counter > 25) then
                     begin
                          while (Ok_Button = 0) do
                            begin
                                 Lcd_Out(4,1,'Menu Loading........');
                            end;
                          MCU_Buzzer := 1; Time_100ms; MCU_Buzzer := 0;
                          Main_Menu();//Ana menu
                          MainMenu_In_Counter := 0;
                     end;
             end
             else MainMenu_In_Counter := 0;


yukarıdaki kodda 'OK' adında bir butonumuz var, bu butona basıldığında 'MainMenu_In_Counter' isimli değişken saydırılır.Bu şekilde kaç saniye basılı tutulup işlem yapılmasına karar verilir.
Bu değişken değeri 25 olursa buton konumu tekrar '0' olana kadar LCD ekranda 'Menu Loading...' yazar.
Buton '0' olduktan sonra buzzer çalar ve susar daha sonra 'Main_Menu();//Ana menu' isimli alt programa gidilir.
Eğer butona basılmamışsa sayaç değeri '0' olarak kalır.

Şimdi Ana menu isimli alt programa göz atalım.

Procedure Main_Menu;//Ana Menu   ayarlar ve verilerin işlendiği bölüm.
var
MainMenu_Counter : byte;
  begin
          Lcd_Cmd(_LCD_CLEAR);   // Clear the Screen
          MainMenu_Counter := 1; // ilk menu üzerinde durur.
          Menu_Counter     := 0x00;
         
    Repeat //*****************Menu_Counter değeri 255 olana kadar döngüde dur.

      //Menu içerisinde dolaşmak için sayaç kodları
      if (Down_Button = 0) then
        begin
             MainMenu_Counter := MainMenu_Counter + 1;MCU_Buzzer := 1;
             Time_100ms; MCU_Buzzer := 0;
              if (MainMenu_Counter > 3) then// aşağı inmek için artırılır
                  MainMenu_Counter := 1;    // yukarı çıkmak için değer azaltılır.
        end                                 // pcb ye göre yazılım yapılır.
        else
      if (Up_Button = 0) then
        begin
             MainMenu_Counter := MainMenu_Counter - 1; MCU_Buzzer := 1;
             Time_100ms; MCU_Buzzer := 0;
              if (MainMenu_Counter < 1) then
                  MainMenu_Counter := 3
        end;
      //Menu içerisinde dolaşmak için sayaç kodları

      Case MainMenu_Counter of
        1: begin //Sistem Test Menusu
               
                Lcd_Out(1,2,' Menu-1 icerik      '); // 1.menu
                Lcd_Out(2,1,' Menu-2 icerik      ');
                Lcd_Out(3,1,' Cikis                   ');
                Sag_Ok(1,1);//burada sag_ok isimli alt programa gider.bu alt programda bir sembol oluşturulmuştur.
                if (Ok_Button = 0) then
                  begin
                       While (Ok_Button = 1) do
                        begin
                       
                        end;
                       While (Ok_Button = 0) do
                        begin
                       
                        end;
                       MCU_Buzzer := 1; Time_100ms;
                       MCU_Buzzer := 0;
                                                                     
                  end;
               
           end;
     
     2: begin
               
                Lcd_Out(1,1,' Menu-1 icerik     ');
                Lcd_Out(2,2,'Menu-2 icerik       '); // 2.menu
                Lcd_Out(3,1,' Cikis                  ');
                Sag_Ok(2,1);//burada sag_ok isimli alt programa gider.bu alt programda bir sembol oluşturulmuştur.
                if (Ok_Button = 0) then
                  begin
                       While (Ok_Button = 1) do
                        begin
                       
                        end;
                       While (Ok_Button = 0) do
                        begin
                       
                        end;
                       MCU_Buzzer := 1; Time_100ms;
                       MCU_Buzzer := 0;
                                                                     
                  end;
               
           end;


      3: begin
               
                Lcd_Out(1,1,' Menu-1 icerik     ');
                Lcd_Out(2,1,' Menu-2 icerik      '); 
                Lcd_Out(3,2,'  Cikis                    '); // Cıkış
                Sag_Ok(3,1);//burada sag_ok isimli alt programa gider.bu alt programda bir sembol oluşturulmuştur.
                if (Ok_Button = 0) then
                  begin
                       While (Ok_Button = 1) do
                        begin
                       
                        end;
                       While (Ok_Button = 0) do
                        begin
                       
                        end;
                       MCU_Buzzer := 1; Time_100ms;
                       MCU_Buzzer := 0;

                      Menu_Counter = 0XFF;// Bu değer 0xFF oldu ve repeat komutundan çıkılıyor. Aslında menüden çıkılıyor.
                                                                     
                  end;
               
           end;


      end;//Case MainMenu_Counter end...
     
    Until (Menu_Counter = 0XFF);//MainMenu_Counter 255 olana kadar sonsuz dongu
       
        MCU_Buzzer := 1;Time_50ms;MCU_Buzzer := 0;
        Lcd_Cmd(_LCD_CLEAR);
   
  end;// Procedure end...


Yukarıda 'menu counter' adında değişken up-down butonlarına her basılışta artırılır ya da azaltılır. Bu sırada ben buzzer' ıda öttürdüm. :)
Daha sonra bu değişkenin durumuna göre Case komutunu kullandım. Yani bu değişken 1 ise cas komutunun 1. işlemini yapar, 2 ise 2. işlemini yapar.
Örneklerde be menülerden başka menülere girmedik ancan istersek başka menülere de girilebilir.

>>>Sag_Ok(1,1);//burada sag_ok isimli alt programa gider.bu alt programda bir sembol oluşturulmuştur.<<< isimli bir satır var. Burayı da açıklayayım.

Procedure Sag_Ok(pos_row6, pos_char6 : byte);
var n : byte;
begin
  Lcd_Cmd(64);
  for n := 0 to 7 do Lcd_Chr_CP(Character_Ok3[n]);
  Lcd_Cmd(_LCD_RETURN_HOME);
  Lcd_Chr(pos_row6, pos_char6, 0);
end;


yukarıda LCD ekrana sağ ok '->' bu şekle benzer bir şekil oluşturduk.

Const
Character_Ok3      : array[0..7] of byte = (24,28,30,31,30,28,24,0);


Sorularınız olursa pazartesi günü cevaplayacağım.

iyi çalışmalar

i.soran
TURKEY/ANK

Powered by EzPortal