modding calculators to play music

Apr 2026

the trusty AR7778 calculator

the AR7778 calculator has the somewhat unique feature of a ‘piano’ mode.
that is, pressing a key will play a note.
each calculator can only play 14 notes, with each note skipping a semitone.
however, the calculators each have a slightly different frequency offset (some calculators play notes at higher frequencies than others).
so, by buying enough calculators and checking the frequencies they play, you can play every note in two whole octaves. waow.

some very talented people can perform music with these:

i can’t perform music, so instead i modded my calculators to allow for MIDI music playback.

the bluetac over the speakers is just to make the calculators quiter, since they are really loud.

the modding process

to play music, i made connections to the calculator’s PCB (circuitboard) so i can ‘inject’ key inputs.

firstly you must understand how calculators read input.
they work with a row-column matrix system: pressing a key pushes down metal to connect a row and column trace. the calculator reads this as input to a particular key.
by reverse engineering which traces correspond to each row and column, we can externally short these traces to inject a key input.

when opening up the calculator, visible on the PCB are circular pads. these pads expose the traces so that we can read and input electrical signals.
we can use a multimeter in continuity mode to test if two traces of a PCB are connected - that is, if electricity can flow between two parts of the PCB.
when a key is pressed, electricity can flow between that key’s row and column traces.
when the key is not pressed, electricity cannot flow.

therefore, we can press a key, then test every possible pair of pads on the PCB, to see which become connected when we press the key, but are not connected when the key is not pressed.
by doing so, we can determine the row & column pads.
here is the map of the PCB i made. on the right are the row & column pairs corresponding to each key.

AR7778 PCB Mapped

now, by simply soldering to these pads, we have external access to the parts of the PCB responsible for key input!

AR7778 PCB soldered

but how do we actually inject input?
the answer is optocouplers: when we feed them power, they connect the two wires connected to it.
without power to the optocoupler, the wires are disconnected and electricity cannot flow between them.

optocoupler

this essentially recreates how pressing a key works.
so, we wire up every combination of row & column to optocouplers. we can feed electricity to a specific optocoupler to inject a specific key.
to control these optocouplers, and actually play music, we need a devboard. this is essentially a tiny programmable CPU (microcontroller) on a board, with pins that allow us to send electrical output (and read input, but we don’t care about that).
i used an arduino uno r3 for this. it’s a very limited devboard but powerful enough for this task.
quick aside: this is an opensource board, so you can get cheap clone boards that function identically. i am using an elegoo clone.

arduino uno r3

you will also need some way to generate music for your microcontroller of choice to feed to the calculator.
that is, the devboard must correctly time power to the optocoupler corresponding to the key (and thus note) you want to play.
for this, i made a script that reads a MIDI file, reading each event (note & timing), then outputting C++ code for the Arduino that will playback these events on the calculators.
a more elegant way would be to communicate these events over serial, with the Arduino flashed with code that can interpret and play these…

remember that there is a very limited range of notes that can be played:

note range

do not let the plotted notes in the image decieve you: notes play for a fixed amount of time. holding a key for a longer time does not play a longer note.

since there are so many optocouplers (14 for each calculator), serial-in parallel-out (SIPO) shift registers are needed to address the optocouplers, as there are a limited number of pins on the arduino.
SIPO shift registers mean that with only a few pins on the arduino, we can access an essentially unlimited number of optocouplers.

SIPO register

a final challenge i will mention is you must cut the plastic at the back of the calculator’s casing to allow for the wires to exit. i found a standard wire cutter to be sufficient for this.
you will also have to cut out the plastic supporting the back of the LCD display to make room for the wires. i used electric tape to stick the display to the case.

this is what the finished circuit looks like. at the time of this picture i had unplugged one of the calculators to test another idea, reading key input (which happens to be much easier).
because of the maze of wires you can’t really see what’s going on, but essentially it is just daisy-chained SIPO registers connecting to optocouplers controlling every row & column pair for the 4 calculators.

full circuit view 1 full circuit view 2
>> Home