Also erst mal würde ich die Idee von BMS übernehmen. Du kannst also mit 4 Pins die LEDs ansprechen. Diese Pins werden als Output konfiguriert. Die Pins können direkt LEDs treiben, du brauchst also keine Treiberbausteine, nur für jeden Pin einen entsprechend berechneten Vorwiderstand.

Die Sleep-Funktion ist recht einfach zu machen. Ein Pin (z.B. GP0) wird als Input konfiguriert. Außerdem wird der interne Pullup-Widerstand für diesen Pin aktiviert und die Interrupt-On-Change-Funktion wird eingeschaltet. Das bedeutet, der Pin ist ohne weitere Beschaltung auf High-Pegel. Nun schließt du an diesen Pin einen Schalter an, der ihn nach GND zieht, wenn er gedrückt wird. Wenn der PIC im Sleep-Modus war (durch den Befehl SLEEP ausgelöst), wacht er auf und macht im Programm weiter. Der Sleep-Modus ist extrem stromsparend, also selbst mit einer kleinen 3 Volt Batterie läuft das Ding ewig.

Um alles klein zu machen, ist wohl SMD am besten. Ich denke mit ein bißchen Geschick ist alles in einem Würfel von der Größe 5x5x5 cm unterzubringen.

Wenn weitere Unklarheiten sind, einfach fragen.

Gruß
Phaidros