With the use of the LCD module, sending data streams to the screen was relatively simple. And that’s the only difference with this project from the ones I worked on in the past, the added layer of interfacing with an LCD. The ATmega328P has enough memory to be able to use the <stdio> library, as well as an oscillator with an adequate frequency that I didn’t have to use an external crystal.
But as is the case with any project of this level of complexity, it is important to break it up into manageable parts that will serve as stepping stones to leveling up complexity incrementally.
The first thing to ensure is that the connections are done correctly — try sending one character to the LCD. This step can be further broken down to handle initializing the LCD with all the ports that are used for the connection defined properly. Additionally, another sub-domain of this first step is making proper use of the stdio library and initializing the data stream.