Stichwort Pointer. Das sind Variablen, die die Adresse einer anderen
Variablen speichern. Lies dir dazu mal ein Buch über C durch! Oder
sonstiges C-grundlagenwissen...
je nachdem, wo der Stern steht, deklariert er eine Pointervariable oder
er ist der sogenannte Dereferenzierungsoperator(liefert also zu einem
Pointer den Wert, der an der Adresse gespeichert ist). Das Gegenteil,
also der Referenzierungsoperator, der die Adresse zu einer Variablen
liefert, ist das &.
Auch in der anderen Funktion ist der Pointer Blödsinn. Bei der Übergabe
erzeugst du die Adresse mit &, in der Funktion nimmst du dann den Wert,
indem du mit * wieder dereferenzierst. Ein Anwendungsfall, wo er
gebraucht würde, ist, wenn eine Variable außerhalb der Funktion diurch
die Funktion geändert werden sollte(sogenanntes Call by Reference). Das
ist hier aber nicht der Fall.
Lösch mal alle * in der Funktion, und beim Aufruf, also hier:
>if (key_pressed_1(&PIND,PD2)) PORTD ^= (1<<5);
löscht du das &.
Edit: Schau mal hier:
http://home.netcom.com/~tjensen/ptr/pointers.htm
LG, Björn