Deberias empezar a leer el codigo. Lo voy a describir aca lo que hace tu programa.
A pesar que el datasheet habla de que debe enviarse varias veces el Function Set, veo que lo envia una sola ves. (Por que los primeros no son validos)
ACA DATASHEET DEL DRIVER:
https://www.sparkfun.com/datasheets/LCD/HD44780.pdfTu programa,
-inicializa los modulos
Lo que tenes en "Inicio"
- Inicializa los datos a enviar, es decir le pone valores en tu caso el "HOLA", 1 registro por letra
Lo que tenes en "TABLA"
-Inicializa el LCD:
Esto consta de enviar la instruccion de "Clear Display"
Envia la instruccion Function Set - Aca debo determinar que se trata de 2 filas, es decir N = 1.
Envia la instruccion de Display control. Que maneja si se ve el cursor, blink y el LCD.
Envia la instruccion del Modo de funcionamiento, esto le dice al LCD que cuando envie un dato incremente o decremente la posicion de memoria interna.
Envia la instruccion para que comienze en la direccion 0x00 ( DDRAM SELECTED )
Y luego procede a enviar 1 por uno los valores almacenados en DATO1, DATO2, DATO3 y DATO4.
Finalmente ejecuta la instruccion RETURN HOME del LCD ( 0000 0010 que esta en tu segunda hoja) y vuelve a escribir la palabra HOLA en la memoria del LCD. Todo esto se repite por siempre
Cuando digo instrucciones al LCD son los datos que le pones. Te sugiero que busques HD44780 y ahi vas a tener la tabla de instrucciones.
-----------------------------------------------------
Si quisieras agregar una segunda fila, primero deberias cambiarlo en el Function Set, es deicr poner el 1.
Y luego deberias cargar (DDRAM SELECTED) con 0x1100 0000, en ves de 0x1000 0000.
Con esto el primer HOLA va a estar escrito en la segunda fila. Luego al enviarse la instruccion RETURN HOME ( esto hace que la memoria a escribirse en el display empieze del 0x00) lograrias que se escriba un HOLA en la primer fila, pero como nada cambio las posiciones de memoria de la segunda, entonces te deberia quedar asi el LCD:
--------------------
HOLA
HOLA
--------------------