Driving an individual LED is a simple task and all you do is attach the LED through a current limiting resistor to a control line. When the control line goes high the LED lights up and when the control line goes low the LED is off. The problem is that if you try and drive an 8 by 8 matrix in this way you need 64 individual control lines and this would require a lot of circuitry.
The way round it is to cheat and make use of a property of your eye called persistence of vision.
Persistence of Vision
Your eye actually remembers what it has seen for a very short time i. e. The image in your eye persists for a short while. Television designers made use of this fact many years ago (and still do today) since the image created on a TV set consists of a single electron gun (actually three since there is one gun for each color).
Note: LCD TVs work in a different way.
The electron gun scans over the entire TV screen at an extremely high rate. It works by using electric fields to alter the direction of the stream of electrons (these electric fields are extremely high voltage which is why it's important never to open up a TV). The stream of electrons is deflected so that each row is scanned one line at a time. At each pixel the gun is turned on make the screen phosphor light up.
As long as the entire screen is refreshed before your eye forgets the image it looks to you like the screen has a constant steady picture. If the refresh rate was reduced then you would begin to see the image flickering.
The rate at which the screen needs to refresh is 50Hz i. e. 20ms and this is the rate needed if you do multiplexing.
To use persistence of vision in electronic designs you make use of a technique called multiplexing and it simply means sharing. Instead of driving each LED individually you can share a control line between several LEDs.
You only need to turn on a control line for a short time as long as you remember to repeat the output before the 20ms time limit.
Controlling the 8 by 8 LED matrix
An led dot matrix display is simply an array of LEDs arranged in a square grid. Each column is connected to one side of the led and each row is connected to the other.
The matrix is arranged specifically for multiplexing and you can actually get away with 8 column drivers and 8 row drivers so instead of 64 control lines you now only need 16 control lines i. e. A saving of 75%.
Note: This discussion is for the common cathode LED matrix i. e. Where the cathode (-ve) of each column of LEDs is connected together. The type of matrix determines whether you drive a row high or low to turn on an LED.
To turn on an individual LED in the matrix requires that you drive a row with a high voltage and allow current to flow through the cathode. You usually allow current to flow by attaching a transistor to a column connection and it's turned on and off using a control signal.
When you turn on the column transistor driving any of the eight rows will light up one of the 8 row LEDs. To control the next column you turn off the 1st column transistor and turn on the next column transistor (out of the 8 available). Using the same row drivers you can now control this next set of 8 LEDs.
If you repeat this process ensuring that all columns and rows are driven over the period of 20ms then it will look as though the display is not flickering at all i. e. It will appear that the LEDs are continuously driven.
You can find a microcontroller based LED matrix display project here This project also uses a helper chip that lets use only 10 control lines to control the 64 LED matrix display.
John Main's website http://www.best-microcontroller-projects.com provides microcontroller resources and free projects which are fully documented including schematics and source code.