Hay muchos ejemplos si haces suficiente trabajo en Google, pero dependiendo de qué es exactamente lo que quieres que haga tu cubo, es posible que no encuentres el código exacto (si lo hicieras, no sería muy divertido ;-))
El proceso básico con el diseño del firmware sería decidir una base de tiempo fija para sus actualizaciones de LED, por ejemplo 100Hz. Luego cree una rutina de interrupción que actualice sus datos LED en este punto. Puede hacerlo todo en el bucle principal, pero esto es ineficiente ya que el bucle principal está atascado esperando la próxima actualización cuando podría estar haciendo otras cosas.
Cada microcontrolador moderno tiene un temporizador periférico, por lo que configura esto para crear la interrupción. En la rutina de interrupción, usted actualiza los datos o, mejor aún, establece un indicador que llama a una rutina en el código principal. Lo ideal es que las rutinas de interrupción sean cortas y rápidas.
De eso se trata en general, para las conexiones, puede usar registros de desplazamiento, multiplexores o simplemente conectar los LED directamente si tiene suficientes pines disponibles. Aunque los pines de salida son capaces o tienen suficiente corriente para controlar un LED típico, dado el número, el consumo de energía general probablemente excederá las especificaciones, por lo que necesitará un transistor para controlar cada LED (o use el registro de desplazamiento, otros circuitos integrados de controladores mencionados anteriormente) )
Me gustaría saltar a la derecha y comenzar a experimentar, leer el periférico del temporizador y las interrupciones, y ver qué se te ocurre. Pellizca fragmentos de código útil de varios proyectos si es necesario. Pruebe y aborde el proceso de manera modular, de modo que pueda probar cada parte más pequeña a medida que avanza y luego unirlas todas.
Luego, si se queda atascado, regrese con una pregunta específica y publique su código y esquema para que podamos darle una respuesta detallada.