Он объединяет две функции: идентификацию кнопки и считывание значение бита. При этом идентификатор кнопки прявизан к её расположению в железе (состоит из номера порта и бита в порте, или маски, что эквивалентно).
Во-первых, можно не объединять функции в один макрос. Во-вторых, не производить привязку идентификатора кнопки к конкретному железу прямо в идентификаторе. Всегда можно поиметь универсальную функцию считывания номера ножки по идентификатору вместо макроса и промежуточную теблицу или другим образом заданное отображение неких абстрактных идентификаторов кнопок в железо. Но будет слегка медленнее. Нужно или нет - решать тебе, в конце концов.