Have you tried using timers?
You can make a timer that generates an interrupt each second. In the interrupthandler you can decrement by 50.
You can make a timer that counts at a certain rate, while the butten is pressed. That way you can count "exact" the time that passed since the button was pressed. If it's longer than it's overflow value you'll need a temp variable to count the overflows.
- no ugly delay()'s