Вы можете прочитать их за один раз, если они являются выводами одного и того же отображенного в памяти регистра портов. Затем вы можете просто создать новую маску:
#define SWITCH_ALL (switch_green | switch_yellow | switch_blue | switch_red)
Или труднее читать, но в остальном эквивалентно:
#define SWITCH_ALL 0x0F
Затем, при условии, что вы можете избавиться от, казалось бы, лишней pin_read
функции:
uint8_t button_pressed (void)
{
return (uint8_t) (PORTX & SWITCH_ALL);
}
где PORTX
- имя регистра данных порта.
Помимо того, что он быстрее, он также имеет преимущество в том, что все ваши выводы будут считываться синхронно, в одно и то же время.
Однако, , вам, естественно, нужно будет добавить где-нибудь отскок кнопки, иначе показания будут ненадежными.