hijoles
tu micro no es muy grande 128k de FLASH y 16,384 bytes en RAM
28 pines no es muy grande
esos desafios son los buenos , yo optaria por hacer todo SPI
con un 74HC595 sacaria mis datos para hacer el DAC
asi ahorro 8 pines y solo gasto 3
con otro SPI me comunicaria con las eeprom, con el CD4021 hago el teclado asi sobran pines bueno es una sugerencia.
respecto a tu pregunta
segun como te entiendo solamente basta con hacer: char DO[150]; no es necesario de poner cada elemento de ese largo de 150?, es decir no es necesario poner char DO[150]={12,124,...}?
ya no lo veo necesario pues si uno va a leer directamente de la EEPROM no es necesario reservar tanta memoria.
lo que haria seria guardar todos los datos en la eeprom digamos las notas que quepan de DO hasta la que quepa pero si conocemos el tamaño de cada nota podriamos leer solo la longitud que mide
no recuerdo como es leer una memoria externa pero el algoritmo es asi o mas o menos asi debes indagar
char valor; //un char es solo 1 byte
int16 direccion; //int16 son 2 bytes ya que la eeprom mide mas aya de los 255 bloques usar 2 bytes
valor = leer_memoria(direccion);
la variable valor es la que se enviara directamente al DAC
la funcion de leer memoria la invente puede tener otro nombre busca en internet una libreria que te permita leer memorias eeprom externas ya sea i2c o SPI.
la direccion leera los datos que estan en tu eeprom