Po pierwsze operator & nie wyzeruje nam wszystkiego. Służy on nam do pozyskania wartości tylko jednego konkretnego bitu w rejestrze PINx, a to za sprawą (1<<LCD_D4) . Czyli warunek
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
da nam w rezultacie wartość tylko konkretnego bitu w rejestrze PINx czyli stan tego pinu, któremu odpowiada ten bit.
A wygląda to tak:
załóżmy że LCD_D4 jest zdefiniowane jako 4 ( np. PB4 )
Temu wyrażeniu
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
odpowiada zatem 0b 0000 0001 << 4 przesuwanie bitowe to nic innego jak mnożenie przez 2 czyli w rezultacie da nam to liczbę
0b 0001 0000 z kolei dalsza operacja czyli
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
powoduje wyzerowanie wszystkich bitów odczytanych z rejestru PINx oprócz właśnie tego 5 bitu dlatego że 1 & ( cokolwiek ) zawsze zwróci ( cokolwiek )

Nie wiem czy moje tłumaczenie jest zrozumiałe, ale mam nadzieję, że coś tam pomoże

.