What you need
PICAXE 28X1
8x8 LED Matrix (I use these from http://earthshinedesign.co.uk)
2x 74HC595 shift chips
The code uses 222 bytes of program memory and 72 bytes of EEPROM (for a static message "FRESHNEY.ORG").
What it does
It scrolls a message across the face of an 8x8 LED matrix.
The message is stored in the PICAXE chip's EEPROM as raw column data. Each byte of the EEPROM represents one column to display. On a 28X1 there are 256 bytes of EEPROM, enough for a 42 character message (assuming a 5x8 font with one space column between each character).
The matrix code for this project is optimised in such a way that the character data needs to be stored so that the character is rotated 90 degrees clockwise and then inversed (sounds complicated but it saves doing it in code and is therefore faster and easier!!!).

Each row of this character represents a column of our display.
The top row in this C would be;
(1*128) + (0*64) + (0*32) + (0*16) + (0*8) + (0*4) + (0*2) + (1*1) = 129
The second row in this C would be;
(0*128) + (1*64) + (1*32) + (1*16) + (1*8) + (1*4) + (1*2) + (0*1) = 126
etc.

The code for this project comes with the above data in EEPROM. Each byte of EEPROM represents one column of the message. The left most column is byte 0.
The 8x8 matrix can be thought of as a window that shows only a small part of the message at a time. To create the illusion of the message scrolling across the face of the matrix we just have to make the "window" move through the data.
The scroll routine starts at column 1 and outputs columns 1,2,3,4,5,6,7,8 to the matrix then moves one to the right (a scroll to the left) to display 2,3,4,5,6,7,8,9 and so on.
When it reaches the end, it does the opposite.
Notes
The 8x8 matrix I've used here, like many others, doesn't allow all of the columns to be accessed at the same time. If you look at the code you'll see that we're actually only ever lighting up one column at a time. However, the columns are being lit up so fast that the eye percieves them all to be on at the same time!
The first of the shift registers sets the column to activate, the second shift register sets the data.
There is a small performance penalty when reading from the EEPROM so for optimal speed it would be worth copying the message from the EEPROM to the scratchpad (on those microcontrollers with it) and reading the data from there instead.
On the 28X1 chips the scratchpad is only 128 bytes long (half of the EEPROM) but the 40X1 chips have 1024 bytes.
In "real" projects however the EEPROM would be best suited to storing font data and then having the message built up from the font data.
Future improvements
The 8x8 LED matrix I'm using is bicolour (red and yellowy-green) so I'd like to make use of that in the future.

Twitter