Tools and materials used:

  • Raspberry Pi Pico
  • 1602 LCD display (w. i2c backpack)
  • breadboards and soldering iron
  • perfboard, w. 22awg wire
  • level shifter module (only using 2 out of 4 lines for i2c)
  • two 3x4 and one 4x4 aliexpress keypads (modified to jam as close together as possible)
  • 3d Printer
  • Glue gun
  • PTouch Labelmaker
  • Laser printer (for keypad overlay), highlighter pens
  • Thonny with Circuitpython 7.2.3

Differences between this and a real 16C:

  • maximum 128 bit words (vs 16C 64 bit)
  • 16 character display, with eight 16 character windows, scrolling with shift-g < and > keys
  • 'Enter' key is standard size, not double length like a real 16C
  • Has a splash screen that gives you the current version number
  • Has a timeout feature that turns off the LCD after 5 minutes (hard coded)
  • The calculator is always 'running', ON and OFF simply turns off the display and backlight

Python is well suited to this application given a full suite of excellent string manipulation and math libraries, adafruit libraries, etc. Execution speed is not an issue.

I was helped a lot during development with access to a couple of different software emulators out there (http://www.hp16c.org/ and https://stendec.io/ctb/rpn_prog.html), especially when I can see what's happening with the stack. The manual https://literature.hpcalc.org/community/hp16c-oh-en.pdf was also essential reading.

An early version of this project got a mention on the Raspberry Pi blog https://www.raspberrypi.com/news/replica-hp-16c-coding-calculator/ and on Adafruit's Python on Hardware newsletter https://blog.adafruit.com/2022/10/19/icymi-python-on-microcontrollers-newsletter-ladyada-at-espressif-devcon-this-week-circuitpython-8-beta-2-and-more-circuitpython-icymi-raspberrypi-micropython-raspberry_pi/