Yapmış olduğum projelerde kullandığım fonksiyonu paylaşıyorum. Yazdığım fonksiyonda butona basıldığında ilk önce 20ms bekliyor. Ondan sonra 10ms aralıkla butonu 5 kere daha kontrol ediyor. Eğer buton hala basılıysa 1 değerini dönüyor.
buton.h
#define butonokumaadeti 5 //butonun kaç kere kontrol edileceği
#define butonokumasuresi 10 //kontroller arasındaki bekleme süresi
#define butondebuncesuresi 20 //ilk bekleme süresi
unsigned char butonoku(unsigned char* portadi,unsigned char pinno);
buton.c
//buton basılıysa 1 döner. değilse 0 döner
unsigned char butonoku(unsigned char* portadi,unsigned char pinno)
{
unsigned char pinmask,durumu,sayac;
sayac=butonokumaadeti;
pinmask=1<<pinno;
durumu= (*portadi) & pinmask; //pin durumunu oku.
if(!durumu)
{
beklems(butondebuncesuresi);
while(sayac--)
{
durumu= (*portadi) & pinmask; //pin durumunu oku.
if(durumu)
return 0;
beklems(butonokumasuresi);
}
return 1;
}
return 0;
}
Kullanımı:
Öncelikle projenin başında #define ile aşağıdakine benzer bir tanımlama yapmanızı öneririm.
#define butontamam butonoku((unsigned char*)&PORTA,0)
daha sonra butona basıldığında bir iş yapması için basit bir if kullanımı yeterli.
if(butontamam)
{
yapılacak işlemler1;
işlem2;
.....
while(butontamam); //butonun bırakılmasını bekle.
}
Herkese faydalı olması dileğiyle.