1. sayfa
asembbler da desen kodları verirdim ama pic c yi bilmiyorum yani asembbler bana daha kolay geldiği içindiğerleriyle uğrasmıyorum neyse kolay gelsin |
Butonlara basıldığında butonların toprağa çekildiği mantığıyla kod yazıyorum.Değişken değeri 255 ise arttırma yapmaz değişken değeri sıfır ise azaltmaz.
|
#include <16F84A.h> #use delay(clock=4000000) #fuses XT,NOWDT,NOPROTECT,PUT int i=0; void main(void) { while(TRUE) { if(!input(pin_a0) && i!=255) //arttırma { while(!input(pin_a0)); //elini butondan çekene kadar bekle i++; } if(!input(pin_a1) && i!=0) //azaltma { while(!input(pin_a1)); i--; } } } ben bas bırak buton kullandığını, basılınca porta low değeri (0) gönderdiğini ve değeri artacak değişkeninin de işaretsiz 8 bit (0-255) olduğunu varsaydım. Kod yukarıdaki şekildedir. Arkadaşınkine benzedi. üstteki kodda #fuses'dan sonra #define A0 input(pin_a0) #define A1 input(pin_a1) eklenirse, "input(pin_a0)" yerine sadece A0, input(pin_a1) yerine de sadece A1 kullanılabilir. Ufak bir ek olsun bu dediklerim. |
Bunu gözardı etme. Kodu yazarken geciktirmeyi unutmuşum. Butonlar için geciktirme lazım. Pic hızlı olduğu için butona bas bırak sırasında bir kere basmanıza rağmen birden fazla basılmış gibi algılayabilir. Network_Killer arkadaş buna dikkat etmiş onunki daha doğru bir kod. |
@muuzoo "&& i!=255" bunu bu şekilde yazmayı akıl edememiştim doğrusu. aşağıda bir karşılaştırma daha yaparak 0 ya da 255 olduysa sıfırla ya da 255'de tut diye yazıyordum eskiden. şimdi senin mantıkla bu iş daha iyi yapılıyor. Doğruya doğru. ![]() |
İşinize yaradıysa ne mutlu. ![]() |
cevaplar için teşekkürler.. deboucing tam olarak ne bilmiyorum ama butonun basma bırakma olayını şu şekilde yaptım.. if (!RA0) k0=1; if(RA0&&k0==1) {if(sayac!=100) sayac++;k0=0;} yanlız bir şey daha sorayım. şimdid ben ra0 portunu kullanıyorum buton için. butonu direk pin ile toprak arasına bağlıyorum. şimdi TRISA=0x01 yazıp ra0 ı giriş yaptığım da buton işlemiyor. bunun için butonu nasıl bağlamalıyız.(ayrıca butona seri direnç bağlayarak ta denedim. bir de pine direnç üzerinden 5V bağladım ve pini buton üzerinden toprağa bağladım , bir resimde görmüştüm. ama olmadı) RA0 ı TRISA=0x00 ile çıkış yapıyorum. RA0=1 yapınca buton işliyor. ama bu sanki yanlış bir kullanım. bu konuda ne önerebilirsiniz.yani kısaca butonu girişe nasıl bağlarım? ![]() cevaplar için şimdiden teşekkürler.. |
Kod + Proteus 7.1 sp2 için simülasyon dosyaları: http://rapid_share.com/files/62443917/Buton_Okuma.rar.html Önce simülasyonu çalıştır. bir iki kere butona bas. sonra simülasyonu pause'la. i'nin değerini göreceksin açılan paencereden... |
sağol hocam. açıklamışlar burada. biz gözden kaçırmışız konuyu ama.... |
1. sayfa
iki tane buton var (böcek buton deniyor herhalde,basınca basılı kalmıyor.darbe şeklinde sinyal üretiyor.).
biri program içindeki bir değişkeni arttıracak diğeri azaltacak her basışta.
bir buton portA.0 diğeri de portA.1 e bağlı olsun misal olarak.
bilene çok kolaydır ama bir yardım edin.