I finally got an 16×2 1602 driven LCD working with my Arduino. After an hour of trying to get it working by a 74HC595N shift register I gave up and wired the LCD directly to the Arduino to check that the LCD wasn’t broken. It still didn’t display the text my Sketch was sending it, instead it was showing a row of 16 black blocks. It turned out this was because I didn’t have a potentiometer and was wiring V0 direct to GND which was setting the contrast of the LCD too high. After putting a resistor between V0 and GND I managed to see the output of my program.
The next step is to put the shift register back in and see if I can drive the display through that. Once I’ve managed to get that working I can re-add my speaker and LED and start working on the programming for my Morse code encoder. My aim is to have the text scrolling at the top of the display, and the Morse scrolling at the bottom with the LED flashing the Morse and the speaker beeping.