Buton okuma fonksiyonu

Başlatan sigmoid, 20 Kasım 2010, 09:59:04

sigmoid

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.