Okay, the get_username function is now drawing characters to screen as they are touched, without that annoying 1-character delay that was happening before.  Using the debugger, I found that setting a breakpoint right after we drain the FIFO in the while loop in get_username caused it to work.  It looks as though we'll need a brief delay (maybe 50 or 100ms) after draining the FIFO.