The other approach to delay's (keep in mind, that there is no other process to yield the CPU too) is to use a timer (a peripheral of the micro controller).
This would take a fair bit more code to configure the timer, and setup an interrupt to handle the timer.