I find RTOS could give a more elegant solution by separating the tasks; keyboard, sensor, LCD and using mailboxes or message queues to pass data around. It depends on your resources on your microcontroller as each tasks will require memory. You could also designed using interrupts and depending on your timing requirements, you could use a state machine or create an event driven system similar to QP framework by Miro Samek. The one good thing about RTOS, you can set task priorities. You would have to implement it yourself if you take the interrupt route. At my previous work, we chose a RTOS for the LCD for handling the buttons and animation plus controlling the drum/motor of a washing machine.