BUTON KONTROLÜ PULL-DOWN BAĞLANTI PULL-UP BAĞLANTI PIC girişlerine bağlı botonlara basılıp basılmadığını bilmez. Sadece o girişte 0 mı var 1 mi var onu bilir. Bağlantının türüne göre bu eşleştirmeyi sizin yapmanız gerekir. Pull-Down Bağlantı (Ters Bağlantı) Butona basılmadığında Giriş=1 Butona basıldığında Giriş=0 Pull-Up Bağlantı (Ters Bağlantı) Butona basılmadığında Giriş=0 Butona basıldığında Giriş=1
PROGRAM_1: PORTA nın 0. bitine (RA0) bağlı butona basınca PORTB ye bağlı tüm ledleri yakan program. (PORTB yi temizlemeyi unutmayınız.) Pull-Up Bağlantıya göre if (porta.ra0==1) portb=0xff; Pull-Down Bağlantıya göre if (porta.ra0==0) portb=0xff; Program açıklama: Burada devre çalıştırıldığında LED sönük konumdadır. Butona basmadığımız sürece sönük konumda kalır. Butona bastığımızda ise LED yanar. Programda LED leri söndürecek bir komut olmadığından LED ler 1 kere yakıldığında bir daha sönmez. Butona basılıp LED ler yakıldıktan sonra butona tekrar basmamız hiçbirşeyi değiştirmez. LED ler hep yanık kalır. Eğer RESET butonu ile devreyi resetlersek program tekrar başlayacağından portb=0 komutu ile LED ler söner ve biz butona basıncaya kadar sönük kalır. Bit tanımlaması yapmadaki farklılıklar if (porta.ra0==1) portb=0xff; if (porta.f0==1) portb=0xff; if (porta.b0==1) portb=0xff; if (portb.rb0==1) portb=0xff; if (portb.f0==1) portb=0xff; if (portb.b0==1) portb=0xff; Sayı Tanımlamaları Binary: porta.ra0=0b00101111; Hex: porta.ra0=0x2f; Decimal: porta.ra0=47;
DEFINE ile BUTON TANIMLAMA PROGRAM_1: PORTA nın 0. bitine (RA0) Pull-Up bağlı butona basınca PORTB ye bağlı tüm ledleri yakan program. #define buton1 porta.b0 if (buton1==1) portb=0xff; NOT: Programlamada DEFINE kullanmak kullanım kolaylığı açısından çok önemlidir. DEFINE program komutu değil, derleyici komutudur. MikroC Derleyici derleme sırasında DEFINE ile tanımlı her yeri kendi ismiyle değiştirerek derler. Yani programda buton1 yazdığınız yere porta.b0 yazarak programı derler.
PROGRAM_2: PORTA nın 0. Bitine (RA0) bağlı butona basınca PORTB deki tüm ledleri yakan, PORTA nın 1. bitine (RA1) bağlı butona basınca PORTB deki ledleri 11001100 şeklinde yakan program. (Butonlar Pull-Down bağlı) RA0 a buton1, RA1 e buton2 bağlanmıştır. #define buton1 porta.ra0 #define buton2 porta.ra1 if(buton1==0) portb=0xff; if(buton2==0) portb=0xcc; Program açıklama: Devreye enerji verdiğimizde LED ler sönük konumdadır. Butonlara basmadığımız sürece LED ler sönük kalır. Buton1 e bastığımızda (11111111) şeklinde yanar ve diğer butona basılıncaya kadar bu şekilde yanık kalır. Buton2 ye basıldığında (11001100) şeklinde yanar ve diğer butona basılıncaya kadar bu şekilde yanık kalır. Program resetlenmedikçe LED ler ya (11111111) şeklinde, ya (11001100) şeklinde yanar. Örneğin (11001100) şeklinde yanarken buton2 ye basılırsa LED lerde bir değişiklik olmaz. Buton1 e bastığımızda (11111111) durumuna geçer.
IF ve KOMUTLAR DİZİSİ PROGRAM_3: PORTA nın 0. bitine (RA0) Pull-Up bağlı butona basılınca PORTB deki tüm ledleri bir defa 1 sn. aralıklarla yakıp söndüren program. #define buton1 porta.ra0 if(buton1==1) Bu parantezden sonraki komutlar IF içindeki İFADE doğru ise yapılacak... Buraya PORTB deki Led leri yakıp söndüren program kodları yazılacak.. Bu paranteze kadar olan komutlar IF içindeki İFADE doğru ise yapılacak... Buradaki komutlar IF içindeki İFADE yanlış ise yapılacak.
PROGRAM_3: PORTA nın 0. bitine (RA0) Pull-Up bağlı butona basılınca PORTB deki tüm ledleri bir defa 1 sn. yakan program. #define buton1 porta.ra0 if(buton1==1) portb=0xff; delay_ms(1000); Program açıklama: Devreye enerji verildiğinde LED ler sönük konumdadır. Buton a bastığımızda LED ler 1 sn. yanar ve söner ve sönük konumda kalır. Butona tekrar basıldığında 1 sn. LED ler tekrar yanar ve söner. Burada dikkat edilmesi gereken konu şudur: Diyelimki butona bastık ve LED ler yanıyor. LED ler yanıyor iken butona tekrar basmak hiçbirşey ifade etmez çünkü butonun etkisinin olabilmesi için butona basıldığı anda buton kontrolü yapan if(buton1==1) komutundan programın geçmesi gerekir. Burada süre kısa olduğundan (1 sn.) bunun fazla önemi yoktur ama süre 5 sn. olsa idi delay_ms(5000); bu bekleme sırasında buton kontrol komutu çalışmayacağından butona basmanın bir anlamı olmayacaktır.
SORU: Program3 için yazdığımız kodları aşağıdaki gibi değiştirirsek programın çalışması nasıl değişir? #define buton1 porta.ra0 if(buton1==1) portb=0xff; delay_ms(1000); portb=0x00;
IF İçersindeki İfadenin 2 Tane Olması Durumu PROGRAM_4: PORTA nın 0. ve 1. bitlerine bağlı butonlara aynı anda basıldığında PORTB ye bağlı tüm ledleri yakan program. (Butonlar Pull-Up bağlı) #define buton1 porta.ra0 #define buton2 porta.ra1 if(buton1==1 && buton2==1) portb=0xff;
IF İfadeleri İçin Operatörler = = Eşittir. && VE işlemi!= Eşit değildir. VEYA işlemi < Küçüktür.! DEĞİL işlemi > Büyüktür. <= Küçük eşittir. >= Büyük eşittir. Örnekler if( buton1==0 && buton2==0). : Her 2 buton 0 olduğunda ifade doğru olur. Yani eğer butonlar Pull-Down bağlı ise her 2 butona basıldığında ifade doğru olur. if( buton1==0 buton2==0). : Butonlardan herhangi biri 0 olduğunda ifade doğru olur. Yani eğer butonlar Pull-Down bağlı ise butonlardan herhangi birine basıldığında ifade doğru olur. Butonlardan ikisinede basılması (yani ikisininde 0 olması durumunda) ifade yine doğru olur. if( (buton1==0 && buton2==0 ) buton3==0 ). buton1=0, buton2=0, buton3=0 ise İFADE=Doğru buton1=0, buton2=0, buton3=1 ise İFADE=Doğru buton1=1, buton2=0, buton3=0 ise İFADE=Doğru buton1=1, buton2=1, buton3=0 ise İFADE=Doğru buton1=1, buton2=1, buton3=1 ise İFADE=Yanlış buton1=1, buton2=0, buton3=1 ise İFADE=Yanlış buton1=0, buton2=1, buton3=1 ise İFADE=Yanlış
PROGRAM_5: PORTB nin 2. bitine (RB2 ye) Pull-Up bağlı butona basıldığı müddetce PORTB nin 5. Bitine LED i yakan programı yapınız. (RB2 ye basıldığı müddetçe demek RB2 ye basıldığında yansın, basılmadığında sönsün demektir.) #define buton portb.b2 #define LED portb.b5 trisb.b5=0; portb.b5=0; (trisb=0b11011111) (trisb=0xdf) if(buton==1) LED=1; if(buton==0) LED=0; DİĞER #define buton portb.b2 #define LED portb.b5 trisb.b5=0; portb.b5=0; (trisb=0b11011111) (trisb=0xdf) if(buton==1) LED=1; LED=0;