The schematic is really simple : a 74HCT595 as high side driver, and a 74HCT595 driving a ULN2803 as low side driver.

I kept the board simple as well so I could etch it myself.

The built up board :

The software bitbangs a couple of IO ports to control the two shift registers, intensity variation is done by changing the duty cycle of the leds. This example has 3 bits intensity (8 different intensities). We can use these “8 pixels x 8 pixels x 3 bit” intensity as 3 bitmaps with 8 pixels x 8 pixels. The highest valued bitmap (the MSB of the intenisty) is shown 2 x als long as the second highest. The second highest value is shown 2 x as long as the LSB.

Example 2 :

Making character bitmaps is a lot of work. If you have access to a unix box of sorts you can use figlet and the 5×7 font to generate these for you.

This will result in a monospaced font which are not as pretty as the hand made fonts.