Supongo que el código esta bien, me parece que faltan algunas cosas en tu hardware como por ejemplo resistencias en la base de cada transistor de unos 1.5k, y también resistencias en las salidas del registro hacia la matriz. Y algo muy importante resistencias de pull-up (de unos 2.2k o hasta 10k ) para la memoria
En ucontrol seguramente que figuran, y que tu talvez no los colocaste en tu esquema porque no hacen mucha falta para simular, pero para la practica si tienen que estar, para protección y buen funcionamiento del circuito. Lo digo por si se te olvidaron colocarlas.
No te olvides colocar algunos condensadores en la alimentación del micro, para que reciba una buena señal de DC