One possible issue maybe, you may need to specify a clock frequency in the device properties dialog box rather than the default which according to Proteus docs is 1MHz.
Although, I maybe incorrect as I've never simulated an AVR design in Proteus.
I stand corrected, after conferring with Alex, apparently if the an Internal RC (1/2/4/8MHz) is selected the clock frequency entry is simply ignored.
Another possible issue maybe, your LCD initialization routine does not appear to provide adequate delays after each initialization command has been issued and the power on delay is much too short (2ms), I usually recommend a 50ms delay as it is sufficient for most applications.
You initialize your LCD at the start of main and also inside the while loop (which will be executed ,multiple times)
- - - Updated - - -
Maybe consider using an LCD library like (or any other).
When the rest of your code works as intended then you can make your own library too but having several things that can be wrong at the same time is a recipe for disaster.
If you don't want to use a ready LCD library then create a new project a try to make your own but only try to show a simple message.
When you manage to do that the you can experiment with the timers and what you are trying to do.