Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Picproje Kütüphane (Library) => Konuyu başlatan: sigmoid - 20 Kasım 2010, 09:59:04

Başlık: Buton okuma fonksiyonu
Gönderen: sigmoid - 20 Kasım 2010, 09:59:04
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.