Ledler portb'nin tüm pinlerine mi bağlı? Birde Liste değişkenini ne için kullanıyorsunuz?
Sorunuza cevap vermekten ziyade meselenin temelini (bildiğim kadarı ile) anlatıp sonra bir tavsiyede bulunmak isterim.
Öncelikle bir PORT'un diğer pinlerine dokunmadan istediğimiz bir pinini setlemek/resetlemek için (yani lojik 1/0 yapmak için) ne yapmalıyız onu öğrenelim.
Mesela PORTB 'nin 4. pinini setlemek isteyelim;
*** PORTB |= (1<<4); şeklinde yapmamız gerekli. (1<<4) demek, 0000 0000 sayısının 4. bitini 1 yap. (0001 0000) Sonra bu değeri PORTB nin değeri ile 'VEYA' işlemine tabi tutup tekrar PORTB 'ye yaz. Böylece PORTB'nin sadece 4.pini 1 oldu. Diğer pinleri ise eski durumunu korudular.
Resetlemek için ise;
*** PORTB &= ~(1<<4); şeklinde yapmalıyız. (1<<4) demek (0001 0000) demek idi. Sonra ~ işlemi ile bu ifade terslendi ve (1110 1111) oldu. Sonra da PORTB ile 'VE' işlemine tabi tutup tekrar PORTB'ye yazdık. Böylece PORTB'nin sadece 4.pini 0 oldu. Diğer pinleri eski değerlerini korudular.
Not1: Derleyicide şöyle bir kolaylık var. <iom.h> kütüphanelerinde PORTB0, 0 olarak define edilmiş. PORTB1, 1 olarak.........PORTB7 de 7 olarak define edilmiştir. Yani (1<<4) yerine daha kolay olması için (1<<PORTB4) yazabilirsiniz. Çünkü PORTB4 arka planda 4 olarak tanımlı zaten. Bu her PORT için geçerlidir.
Not2: PORTB |= (1<<PORTB4) yerine biraz daha kolaylık için _BV() makrosunu kullanabilirsiniz.
Yani PORTB |= _BV(4);
Veya PORTB &= ~_BV(4) gibi bir kullanımda aynı anlama gelmektedir.
Şimdi sorunuzun cevabı için bu linki inceleyebilirsiniz:
http://www.lojikprob.com/avr/c-ile-...msek-ve-dugmeler-ile-yuruyen-isik-uygulamasi/
Bende bu siteden çok faydalanıyorum. Kolay gelsin.