Як реалізувати код для спрацювання нефіксованої кнопки

Доброго дня, підкажіть, як написати код, який реагував би на натискання кнопки?

Є функція, але при натисканні кнопки виходить, що вона спрацьовує багато разів і діоди починають моргати. Як зробити так, щоб після натискання кнопки виконання було миттєвим, але при цьому через цю мить ще раз функція не спрацювала (не змінила знову 1 в 0), а чекала, поки відпустять кнопку, а після продовжила наступне коло while і крутила вже while як треба зі швидкою частотою, доки знову не натиснуть кнопку? При спробі робити інтервал, він виходить або довгим або як пощастить.

UPD1. У вас знову іграшкова умова PINB &= 0b00000000 , що ніколи не виконується . Якщо все-таки зробите діючу умову, то має бути щось на зразок

Природно, вважається, що кнопка замикається на землю і NewState - це якраз «притиснута».

Дещо не так написав, відредагував. Так правильніше? (Я недавно тільки почав вивчати Сі) Та як можна здійснити переривання не залежить від постійного часу, а тільки від моменту часу затискання кнопки? Задумка не затиснути кнопку, а натисканням не фіксованої кнопки мати можливість вмикати та вимикати діоди.

if(PINB &= 0b00000000) в даному випадку там завжди плюс і спрацьовування стоїть на подачу землі.