3 Simple Ways to
Share What You Make

With Instructables you can share what you make with the world — and tap into an ever-growing community of creative experts.

PhotosPhotos

Share one or more photos of a project, recipe, or whatever you've made, quickly and easily.

Step by StepStep-By-Step

Share your step-by-step photos with text instructions of what you made so others can do it too!

VideoVideo

Share your how-to video. You'll need your embed code from a video site such as YouTube.

8x8 LED matrix

8x8 LED matrix
This instructable will show you how to make a 8x8 LED matrix in witch you can control evry single LED and create your own patterns as long as they only need 64 pixels to show them in one color.

Update 25.09.10

I've added a pattern generator to create patterns but not all of it's features are complete
 
Remove these adsRemove these ads by Signing Up
 

Step 1Materials

Materials
Materials you need:
-8x8LED matris (can make one but i bought mine)
-16x120Ohm resistors
-8xNPN transistors (I used C547B)
-1xPIC16f690
-prototype board (or you can make pcb for this)
-wire
-5V power supply (you can use a voltige regulator but I just power mine from a usb port)

Tools:
-PIC programmers (all the pic programmers from microchip exept for pickit1 will work)
-Software- MPLAB (free software from microchip)
-Soldering iron
-A vacum pump for removing solder is good to have
-wire cutters

Skills you need:
-soldering skill (being capable of making good solder connections within 5-10 sec.)
-Logic thinking to some level

If this is your first experiense using microcontrollers I recommend that you start with a more simple project.
« Previous StepDownload PDFView All StepsNext Step »
21 comments
Dec 30, 2011. 9:39 AMnadsa says:
I'm using pic16f877a... Can you translate this to it???Pls... I'm a beginner to pic..

Thanks
Sep 5, 2011. 7:54 PMbingoconchal says:
how to get a full schematic of it?can anyone save me
May 6, 2011. 1:51 AMdanilo-dude says:
OK, so let's say I built this. Because I'm a beginner and i don't know almost anything about circuits and stuff, how should I program the microcontroler to show some letters? I make the letters, save them but how to upload them to the microcontroler? Thanks in advance!
Jan 9, 2011. 1:02 AMkalasas18 says:

I have a simple ASM program with a matrix display light just columns. An example:

;-----------------------
LIST      P=16F876
#include <p16F876.inc>
   
__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
ORG   0x2100
DE   0x00
ORG    0


cblock 0x20
d1
d2
d3
endc

goto start

Delay
;999990 cycles
movlw 0x07
movwf d1
movlw 0x2F
movwf d2
movlw 0x03
movwf d3
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto Delay_0

;6 cycles
goto $+1
goto $+1
goto $+1

;4 cycles (including call)
return

loop:
movlw b'00000111'
movwf PORTA
movlw b'11110010'
movwf PORTB
movlw b'11111111'
movwf PORTC
call Delay
call Delay
call Delay

goto loop
start:
bsf STATUS,RP0 ; select register page 1
movlw 0 ; put 0 into W
movwf TRISC ; set portC all output
clrf  TRISA
clrf  TRISB

bsf STATUS,RP1 ; select Page 2,
bcf STATUS,RP0 ; by setting RP1 in Status register and clearing RP0

clrf PORTC ; select Digital I/O on port C


bcf STATUS,RP1 ; back to Register Page 0
goto loop

end
;-----------------------

This program code is OK. But I want the program to which I could display the words fleeing across the screen. Started, I tried to ignite a pair of columns on different sites but with the burning LEDs. But received some strange flashing, do not light longer ... Anybody know what's wrong ...
Programme code:

;-----------------------
LIST      P=16F876
#include <p16F876.inc>
   
__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
ORG   0x2100
DE   0x00
ORG    0


cblock 0x20
   Delay1               ; delay loop 1
   Delay2               ; delay loop 2
   Delay3               ; delay loop 3
   TimeDelay            ; time delay x 0.001 s
   EndCount            ; used to tell PIC the end of the table is reached
   Counter               ; used as table counter
   Line1               ; Line 1
   Line2               ; Line 2
   Line3               ; Line 3
   Line4               ; Line 4
   Line5               ; Line 5
   sad
   Line6               ; Line 6
   Line7               ; Line 7
   Line8               ; Line 8
   Layer4               ;  brightness, and time
   Brightness            ; LED brightness
   Time               ; time for each pattern to stay
   Temp               ; temp register
d1
d2
d3
endc


goto start

Delay
;999990 cycles
movlw 0x17
movwf d1
movlw 0x2F
movwf d2
movlw 0x03
movwf d3
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto Delay_0

;6 cycles
goto $+1
goto $+1
goto $+1

;4 cycles (including call)
return

loop:
movlw b'00000001'
movwf Line1
movlw b'11110010'
movwf Line2
call   output



call Delay
movlw b'11100000'
movwf Line1
movlw b'10101010'
movwf Line2
call   output
call Delay

goto loop


start:
bsf STATUS,RP0 ; select register page 1
movlw 0 ; put 0 into W
movwf TRISC ; set portC all output
clrf  TRISA
clrf  TRISB

bsf STATUS,RP1 ; select Page 2,
bcf STATUS,RP0 ; by setting RP1 in Status register and clearing RP0

clrf PORTC ; select Digital I/O on port C
bcf STATUS,RP1 ; back to Register Page 0
goto loop



output:
   movfw   Layer4         
   andlw   b'00000001'      
   movwf   Time         
   incf   Time,1         
   bcf      STATUS,C      
   rlf      Time,1
   bcf      STATUS,C      
   rlf      Time,1
   bcf      STATUS,C      
   rlf      Time,1
   bcf      STATUS,C      
   rlf      Time,1
   bcf      STATUS,C      
   rlf      Time,1



   clrf   PORTB         ; clear port B
   movfw   Line1         ; move layer1 to W
   movwf   PORTC         ; put W onto PortC

   bsf      PORTB,4         ; turn on layer 1 buy outputing bit 5 of PortB

   movfw   Brightness      ; put brightness into W
   call   Delayy         ; call the delay

   bcf      PORTB,4         ; turn off layer 1

   movfw   Brightness      ; put Brightness into W
   sublw   4            ; sub W from 4
   btfss   STATUS,Z      ; skip if the zero flag is set
   call   Delayy         ; call the delay
decfsz   Time
               
   clrf   PORTB         ; clear port B
   movfw   Line2         ; move Line2 to W
   movwf   PORTC         ; put W onto PortC

   bsf      PORTB,5         ; turn on layer 2 buy outputing bit 6 of PortB

   movfw   Brightness      ; put brightness into W
   call   Delayy         ; call the delay

   bcf      PORTB,5         ; turn off layer 2

   movfw   Brightness      ; put Brightness into W
   sublw   4            ; sub W from 4
   btfss   STATUS,Z      ; skip if the zero flag is set
   call   Delayy         ; call the delay
decfsz   Time
   
decfsz   Time         ; decrement the Time regiester
return


Delayy:
   movwf   Delay3         ; put W into Delay 3

Loop1:
                     ; After Delay2 decreses to 0, it is reset to..
   movlw   0x1            ; put 1 into W
   movwf   Delay2         ; put W into Delay2

Loop2:
                     ; After Delay1 decreses to 0, it is reset to E9h
   movlw   0x1D         ; put 80 into W
   movwf   Delay1         ; put W into Delay1

Loop3:
   decfsz   Delay1         ; decrement Delay1
   goto   Loop3         ; jump back to Loop3
   decfsz   Delay2         ; decrement Delay2
   goto   Loop2         ; jump back to Loop2
   decfsz   Delay3         ; decrement Delay3
   goto   Loop1         ; jump back to Loop1
   return

end
;----------------------------------------------------------

Thanks for help. :)
Apr 1, 2011. 9:57 AMhatdh says:
help me complain
goto $+1
goto $+1
goto $+1
what does $ mean?
Jan 10, 2011. 9:45 AMkalasas18 says:
I have a question from this source code:

;-----------------------------------------------------
output:

clrf PORTB ; clear port B
movfw Line1 ; move layer1 to W
movwf PORTC ; put W onto PortC
bsf PORTB,4 ; turn on layer 1 buy outputing bit 5 of PortB

movfw Brightness ; put brightness into W
bcf PORTB,4


movfw Line2
movwf PORTC
bsf PORTB,5
movfw Brightness
call Delay ; call the delay
bcf PORTB,5 ; turn off layer 1
;-------------------------------------------

this code show indisplays line2 to spend line1. I want to display the line1 and line2 in one time. How to change the code?
Jan 21, 2011. 10:33 PMjeffr18 says:
How difficult would it be to control this with an arduino? can anyone push me in the right direction?
Jan 9, 2011. 8:00 AMkalasas18 says:
i need a simple code from picture (A or F or K letter). please write something the code. :/
Aug 19, 2009. 9:16 PMPyrotechnic-Robot says:
Hey so the code is just a simple 1 and 0? So how can I program this pic so i can just put power to one output. Just to make a led blink.
Jun 5, 2010. 1:13 AMleftright says:
what if we're not allowed to used a microcontroller? thanks!
Jun 11, 2010. 7:00 AMspider87 says:
You could probably hook the power up individually and switch them yourself but the microcontroller would really be what you'd need to actually be able to make patterns automatically (without your interaction).
Jun 12, 2010. 9:16 PMleftright says:
actually, it is not displayed automatically. we must use push buttons (or any) to display a certain pattern. any tips? thanks!
Sep 19, 2010. 4:40 PMspark light says:
I suppose you could use a 555 timer and counter to create a scanning row, then another counter triggered at the bottom of the first one. The, All you need id to have switches at the output of the counters. (9 for each pattern) Then, 64 AND gates for each pattern. It would be very complicated. You could just wire up many leds in parallel. It just wouldn't have multiple patters.
Aug 14, 2009. 12:04 PMpurpulhaze says:
I have a few 8x8 bicolor dot matrix LEDs I bought off of ebay some time ago that I would like to use but I'm a bit confused on the pin out. I believe they are red/green 8x8 dot matrix leds. There are 12 pins at the top and 12 at the bottom. Which gives me a total of 24. I understand I will only connect a total of 16 pins for rows and columns. So what ones do i use? I've looked over the data sheet time and time again and I'm still confused.

http://www.sure-electronics.net/DC,IC%20chips/LE-MM103_4_b.jpg
May 26, 2009. 4:18 AMthekanester says:
Nice work!
May 23, 2009. 8:50 PMuguy says:
I like the project, but a full clearer schematic would make it much better and easier to duplicate.

Pro

Get More Out of Instructables

Already have an Account?

close

All Steps Viewing
View all steps of an Instructable on the same page when you're a Pro Member.

Upgrade to Pro today!
8
Followers
2
Author:hemmikarl