If this was a computer based system I would say build up some libraries and just call the functions as you need them. But for embedded stuff I always liked to minimize the function calls and stick with the standard libraries for whatever ide is being used.
Having a huge number of functions might in theory make the code more modular but it also makes it take longer to run and takes up more memory. So I say make a main loop do the extreme basics like update the display only and let the interrupts do the bulk of the work.
My vote is for the absolute basic features for the first revision and once that actually works then go wild with adding stuff on to it