Jak słusznie zauważył kolega BlueDraco, całe wyrażenie można uprościć:
Zaloguj się, aby zobaczyć kod
Timer zgłasza przerwanie co 10ms i za każdym razem sprawdza stan przycisku. Jeśli wciskasz przycisk, to na najmłodszym bicie zmiennej "Bstates" pojawia się 1, więc jeśli wartość "Bstates" będzie równa 1, czyli wystąpią 3 zera na bitach 1,2,3 oraz jedynka na bicie "0" to znaczy, że wciśnięto przycisk. Teraz po kolei:
(Bstates << 1) & 0x0F
"Bstaes" przesuń w lewo o jeden i zrób binarny "and" z wartością 0x0F kasując jednocześnie 4 starsze bity (interesują nas 4 poprzednie stany przycisku na 4 młodszych bitach, więc starsze bity "kasujemy")
(!(Key_PIN & _Key)) : jak wciśniesz przycisk podłączony do masy to binarny "and" da Ci "0", więc musisz to zanegować, aby zdarzenie wciśniętego przycisku dało co wartość "1"
(Bstates << 1) & 0x0F) | (!(Key_PIN & _Key)) : dodajesz binarnie poprzednie 3 stany przycisku z bieżącym i jeśli otrzymasz wartość 1 to znaczy, że po trzech próbkach zwolnionego przycisku, nastąpiło jego wciśnięcie.
Ta zwykła wartość "1" mówi Ci, że przez 30ms, 4 razy odczytałeś stan przycisku i 3 odczyty dały przycisk zwolniony, a ostatni z nich dał przycisk wciśnięty.
Jak pojawią się drgania styków to zignorujesz je ponieważ:
1) odczytujesz przycisk co 10ms
2) ignorujesz wszystkie przypadki poza 0001