You are on page 1of 7

PIC MICROCONTROLLER BASED LED MOVING MESSAGE DISPLAY

Moving Message Display MMD with LED matrix using PIC Microcontroller PIC16f628
Compiler - Proton
MMD PROJECT INTRODUCTION:This is a simple moving message display project in which LED matrix are used for
scanning the text message from right to left. PIC microcontroller 16f628 is use
d in the LED moving message display project.
Parts of the Moving message display:LED Matrix
=
12
74LS595 serial to parallel shift registers for columns scanning = 8
MCU = PIC16f628
74LS138 decoder for rows scanning = 1
crystal = 4MHz with 22pf capacitors
and other power supply components.
circuit diagram of the moving message display is as follows:The program of the moving message display is written in proton basic language is
as under:Device=16F628A
XTAL=4
ALL_DIGITAL=true
Output PORTB
Output PORTA
Serial data Pin
Symbol SER = PORTB.0
Symbol SRCLK = PORTB.1 Serial data Clock Pin
Symbol SRClr = PORTB.2 Serial data Clear
Symbol Latch = PORTB.3 Columns, Latch
High SRClr Turn off the serial register clear
Dim serial_buffer[120] As Byte
STR serial_buffer = Moving Message Display and many other Microcontroller Project
can be downloaded free from www.PICinf.blogspot.com , 0
Symbol selectline PORTA
Dim row As Byte
Dim character_counter As Byte
Dim general_index As Byte
dim charcter as byte
dim scrolling as byte
dim ch_index as byte
dim start_ch_idx as byte
dim end_ch_idx as byte
for general_index =0 to 120
if serial_buffer[general_index]>0 then serial_buffer[general_index] =serial_buff
er[general_index]-32
next general_index
setup for positive pulses:
lATCH = 0 : SRCLK = 0 : SER = 0
start_ch_idx =0
end_ch_idx = 120
Loop:
For row =0 To 6
ch_index = start_ch_idx
for character_counter = 0 to 9
GoSub Get_Pattern
inc ch_index
if ch_index = end_ch_idx then ch_index =0
next character_counter
PulsOut Latch,4
selectline = row
DelayUS 250
selectline = 7

for character_counter = 0 to 7
SHOut SER,SRCLK,lsbfirst,[0]
next character_counter
PulsOut Latch,4
Next row
inc scrolling
if scrolling = 10 then
scrolling = 0
Inc start_ch_idx
If start_ch_idx = end_ch_idx Then start_ch_idx = 0
endif
GoTo Loop
End
Get_Pattern:
charcter = LRead LABEL+((serial_buffer[ch_index]) * + row
charcter = ~charcter
out a clock pulse and one bit on data pin
out the low 5 bits of pattern
If charcter.4 = 1 Then SER = 1
SRCLK = 1 : SRCLK = 0: SER = 0
If charcter.3 = 1 Then SER = 1
SRCLK = 1 : SRCLK = 0: SER = 0
If charcter.2 = 1 Then SER = 1
SRCLK = 1 : SRCLK = 0: SER = 0
If charcter.1 = 1 Then SER = 1
SRCLK = 1 : SRCLK = 0: SER = 0
If charcter.0 = 1 Then SER = 1
SRCLK = 1 : SRCLK = 0: SER = 0
SRCLK = 1 : SRCLK = 0: SER = 0
Return
LABEL:
LDATA $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF Space
LDATA $FB,$FB,$FB,$FB,$FB,$FF,$FB,$FF !
LDATA $F5,$F5,$F5,$FF,$FF,$FF,$FF,$FF
LDATA $F5,$F5,$E0,$F5,$E0,$F5,$F5,$FF #
LDATA $FB,$F0,$EB,$F1,$FA,$E1,$FB,$FF $
LDATA $E3,$EA,$E5,$FB,$F4,$EA,$F8,$FF %
LDATA $F7,$EB,$EB,$F7,$EA,$ED,$F2,$FF &
LDATA $F9,$F9,$FD,$FB,$FF,$FF,$FF,$FF
LDATA $FD,$FB,$F7,$F7,$F7,$FB,$FD,$FF (
LDATA $F7,$FB,$FD,$FD,$FD,$FB,$F7,$FF )
LDATA $FB,$EA,$F1,$FB,$F1,$EA,$FB,$FF *
LDATA $FF,$FB,$FB,$E0,$FB,$FB,$FF,$FF +
LDATA $FF,$FF,$FF,$F3,$F3,$FB,$F7,$FF ,
LDATA $FF,$FF,$FF,$F1,$FF,$FF,$FF,$FF LDATA $FF,$FF,$FF,$FF,$FF,$F3,$F3,$FF .
LDATA $FF,$FE,$FD,$FB,$F7,$EF,$FF,$FF /
LDATA $F1,$EE,$EC,$EA,$E6,$EE,$F1,$FF 0
LDATA $FB,$F3,$FB,$FB,$FB,$FB,$F1,$FF 1
LDATA $F1,$EE,$FE,$F1,$EF,$EF,$E0,$FF 2
LDATA $F1,$EE,$FE,$F9,$FE,$EE,$F1,$FF 3
LDATA $FD,$F9,$F5,$ED,$E0,$FD,$FD,$FF 4
LDATA $E0,$EF,$E1,$FE,$FE,$FE,$E1,$FF 5
LDATA $F9,$F7,$EF,$E1,$EE,$EE,$F1,$FF 6
LDATA $E0,$FE,$FD,$FB,$F7,$F7,$F7,$FF 7
LDATA $F1,$EE,$EE,$F1,$EE,$EE,$F1,$FF 8
LDATA $F1,$EE,$EE,$F0,$FE,$FD,$F3,$FF 9
LDATA $FF,$F3,$F3,$FF,$F3,$F3,$FF,$FF :
LDATA $F3,$FB,$F3,$F3,$FF,$F3,$F3,$FF ;
LDATA $FD,$FB,$F7,$EF,$F7,$FB,$FD,$FF <

LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA

$FF,$FF,$F1,$FF,$F1,$FF,$FF,$FF
$F7,$FB,$FD,$FE,$FD,$FB,$F7,$FF
$F1,$EE,$FE,$FD,$FB,$FF,$FB,$FF
$F1,$EE,$FE,$F2,$EA,$EA,$F1,$FF
$FB,$F5,$EE,$EE,$E0,$EE,$EE,$FF
$E1,$F6,$F6,$F1,$F6,$F6,$E1,$FF
$F1,$EE,$EF,$EF,$EF,$EE,$F1,$FF
$E1,$F6,$F6,$F6,$F6,$F6,$E1,$FF
$E0,$EF,$EF,$E3,$EF,$EF,$E0,$FF
$E0,$EF,$EF,$E3,$EF,$EF,$EF,$FF
$F1,$EE,$EF,$E8,$EE,$EE,$F1,$FF
$EE,$EE,$EE,$E0,$EE,$EE,$EE,$FF
$F1,$FB,$FB,$FB,$FB,$FB,$F1,$FF
$F8,$FD,$FD,$FD,$FD,$FD,$F3,$FF
$EE,$ED,$EB,$E7,$EB,$ED,$EE,$FF
$EF,$EF,$EF,$EF,$EF,$EF,$E0,$FF
$EE,$E4,$EA,$EA,$EE,$EE,$EE,$FF
$EE,$E6,$EA,$EC,$EE,$EE,$EE,$FF
$F1,$EE,$EE,$EE,$EE,$EE,$F1,$FF
$E1,$EE,$EE,$E1,$EF,$EF,$EF,$FF
$F1,$EE,$EE,$EE,$EA,$ED,$F2,$FF
$E1,$EE,$EE,$E1,$EB,$ED,$EE,$FF
$F1,$EE,$EF,$F1,$FE,$EE,$F1,$FF
$E0,$FB,$FB,$FB,$FB,$FB,$FB,$FF
$EE,$EE,$EE,$EE,$EE,$EE,$F1,$FF
$EE,$EE,$EE,$F5,$F5,$FB,$FB,$FF
$EE,$EE,$EE,$EA,$EA,$E4,$EE,$FF
$EE,$EE,$F5,$FB,$F5,$EE,$EE,$FF
$EE,$EE,$F5,$FB,$FB,$FB,$FB,$FF
$E0,$FE,$FD,$FB,$F7,$EF,$E0,$FF
$F1,$F7,$F7,$F7,$F7,$F7,$F1,$FF
$FF,$EF,$F7,$FB,$FD,$FE,$FF,$FF
$F1,$FD,$FD,$FD,$FD,$FD,$F1,$FF
$FB,$F5,$EE,$FF,$FF,$FF,$FF,$FF
$FF,$FF,$FF,$FF,$FF,$FF,$E0,$FF
$F3,$F3,$F7,$FB,$FF,$FF,$FF,$FF
$FF,$FF,$F1,$FE,$F0,$EE,$F1,$FF
$EF,$EF,$E9,$E6,$EE,$E6,$E9,$FF
$FF,$FF,$F8,$F7,$F7,$F7,$F8,$FF
$FE,$FE,$F2,$EC,$EE,$EC,$F2,$FF
$FF,$FF,$F1,$EE,$E0,$EF,$F1,$FF
$F9,$F6,$F7,$E1,$F7,$F7,$F7,$FF
$FF,$FF,$F0,$EE,$F0,$FE,$F1,$FF
$EF,$EF,$E9,$E6,$EE,$EE,$EE,$FF
$FB,$FF,$F3,$FB,$FB,$FB,$F1,$FF
$FD,$FF,$F9,$FD,$FD,$FD,$F3,$FF
$F7,$F7,$F6,$F5,$F3,$F5,$F6,$FF
$F3,$FB,$FB,$FB,$FB,$FB,$F1,$FF
$FF,$FF,$E5,$EA,$EA,$EA,$EA,$FF
$FF,$FF,$E9,$E6,$EE,$EE,$EE,$FF
$FF,$FF,$F1,$EE,$EE,$EE,$F1,$FF
$FF,$FF,$E1,$EE,$E1,$EF,$EF,$FF
$FF,$FF,$F0,$EE,$F0,$FE,$FE,$FF
$FF,$FF,$E9,$E6,$EF,$EF,$EF,$FF
$FF,$FF,$F0,$EF,$F1,$FE,$E1,$FF
$FB,$FB,$F0,$FB,$FB,$FB,$FC,$FF
$FF,$FF,$EE,$EE,$EE,$EC,$F2,$FF
$FF,$FF,$EE,$EE,$EE,$F5,$FB,$FF
$FF,$FF,$EE,$EE,$EA,$EA,$F4,$FF
$FF,$FF,$EE,$F5,$FB,$F5,$EE,$FF

=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
backslash
[
^
underline
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x

LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA

$FF,$FF,$EE,$F5,$FB,$FB,$F3,$FF y
$FF,$FF,$E0,$FD,$FB,$F7,$E0,$FF z
$F9,$F7,$F7,$E7,$F7,$F7,$F9,$FF {
$FB,$FB,$FB,$FF,$FB,$FB,$FB,$FF |
$F3,$FD,$FD,$FC,$FD,$FD,$F3,$FF }
$F5,$EA,$FF,$FF,$FF,$FF,$FF,$FF ~
$F5,$EA,$F5,$EA,$F5,$EA,$F5H DEL

LED moving message diaply using PIC16f628 CD4017 and 74LS595


SECOND MMD PROJECT
LED moving message diaply using PIC16f628 CD4017 and 74LS595
Introduction of MMD Project-2:The PIC microcontroller PIC16f628 is used the main processor in the MMD. The dif
ference from the previous moving message diaply and this is method for scaning t
he rows. In previous MMD a decoder 74LS138 was used to scan the rows. But in thi
s project, i have used CD4017 for row scanning instead of use of any decoder.
Components of the LED moving message display:LED matrix = 88 LED matrix 8 Nos,
MCU = PIC16f628
Shift registers = 74LS595 8Nos
crystal = 4MHz with 22 pF capacitors.
and other basic components like reset switches and regulated power suplly of 5V
which have enough current baring for this project like 1Amp max.
The circuit diagram of the 8 x 8 x 8 LED matrix moving message display using PIC
microcontroller is as under:-

Code of the Moving message diaply is written in proton basic compiler and is as
under:Device=16F628A
XTAL=4
ALL_DIGITAL=true
Output PORTB
Symbol SER = PORTB.0 Serial data Pin
Symbol SRCLK = PORTB.1 Serial data Clock Pin
Symbol SRClr = PORTB.2 Serial data Clear
Symbol Latch = PORTB.3 Columns, Latch
Symbol RowClk = PORTB.4
Row clock, to select new row
Symbol Rowrst = PORTB.5 Row reset, selects row 0
High SRClr Turn off the serial register clear
Dim serial_buffer[128] As Byte
STR serial_buffer = www.PICinf.blogspot.com , 0
Dim i As Byte
Dim n As Byte
Dim b As Byte
Dim c As Byte
dim m as byte
dim l as byte
dim ch_index as byte

dim start_ch_idx as byte


dim end_ch_idx as byte
for b =0 to 128
if serial_buffer[b]>0 then serial_buffer[b] =serial_buffer[b]-32
next b
setup for positive pulses:
lATCH = 0 : SRCLK = 0 : SER = 0
c = 0
start_ch_idx =0
end_ch_idx = 30
Loop:
PulsOut Rowrst,2
give a pulse on row reset pin, to select row 0
For i=0 To 6
ch_index = start_ch_idx
for n = 0 to 10
GoSub GetPatternAndOut
inc ch_index
if ch_index = end_ch_idx then ch_index =0
next n
PulsOut Latch,4
DelayUS 250
PulsOut RowClk,2
for n = 0 to 7
SHOut SER,SRCLK,lsbfirst,[0]
next n
PulsOut Latch,4
Next i
inc l
if l = 10 then
l = 0
Inc start_ch_idx
If start_ch_idx = end_ch_idx Then start_ch_idx = 0
endif
GoTo Loop
End
GetPatternAndOut:
m = LRead LABEL+((serial_buffer[ch_index]) * +i
m = ~m
out a clock pulse and restore data pin to 0
out the low 5 bits of pattern
SRCLK = 1 : SRCLK = 0: SER = 0
If m.4 = 1 Then SER = 1
SRCLK = 1 : SRCLK = 0: SER = 0
If m.3 = 1 Then SER = 1
SRCLK = 1 : SRCLK = 0: SER = 0
If m.2 = 1 Then SER = 1
SRCLK = 1 : SRCLK = 0: SER = 0
If m.1 = 1 Then SER = 1
SRCLK = 1 : SRCLK = 0: SER = 0
If m.0 = 1 Then SER = 1
SRCLK = 1 : SRCLK = 0: SER = 0
Return
LABEL:
LDATA $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF Space
LDATA $FB,$FB,$FB,$FB,$FB,$FF,$FB,$FF !
LDATA $F5,$F5,$F5,$FF,$FF,$FF,$FF,$FF
LDATA $F5,$F5,$E0,$F5,$E0,$F5,$F5,$FF #
LDATA $FB,$F0,$EB,$F1,$FA,$E1,$FB,$FF $
LDATA $E3,$EA,$E5,$FB,$F4,$EA,$F8,$FF %
LDATA $F7,$EB,$EB,$F7,$EA,$ED,$F2,$FF &

LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA

$F9,$F9,$FD,$FB,$FF,$FF,$FF,$FF
$FD,$FB,$F7,$F7,$F7,$FB,$FD,$FF
$F7,$FB,$FD,$FD,$FD,$FB,$F7,$FF
$FB,$EA,$F1,$FB,$F1,$EA,$FB,$FF
$FF,$FB,$FB,$E0,$FB,$FB,$FF,$FF
$FF,$FF,$FF,$F3,$F3,$FB,$F7,$FF
$FF,$FF,$FF,$F1,$FF,$FF,$FF,$FF
$FF,$FF,$FF,$FF,$FF,$F3,$F3,$FF
$FF,$FE,$FD,$FB,$F7,$EF,$FF,$FF
$F1,$EE,$EC,$EA,$E6,$EE,$F1,$FF
$FB,$F3,$FB,$FB,$FB,$FB,$F1,$FF
$F1,$EE,$FE,$F1,$EF,$EF,$E0,$FF
$F1,$EE,$FE,$F9,$FE,$EE,$F1,$FF
$FD,$F9,$F5,$ED,$E0,$FD,$FD,$FF
$E0,$EF,$E1,$FE,$FE,$FE,$E1,$FF
$F9,$F7,$EF,$E1,$EE,$EE,$F1,$FF
$E0,$FE,$FD,$FB,$F7,$F7,$F7,$FF
$F1,$EE,$EE,$F1,$EE,$EE,$F1,$FF
$F1,$EE,$EE,$F0,$FE,$FD,$F3,$FF
$FF,$F3,$F3,$FF,$F3,$F3,$FF,$FF
$F3,$FB,$F3,$F3,$FF,$F3,$F3,$FF
$FD,$FB,$F7,$EF,$F7,$FB,$FD,$FF
$FF,$FF,$F1,$FF,$F1,$FF,$FF,$FF
$F7,$FB,$FD,$FE,$FD,$FB,$F7,$FF
$F1,$EE,$FE,$FD,$FB,$FF,$FB,$FF
$F1,$EE,$FE,$F2,$EA,$EA,$F1,$FF
$FB,$F5,$EE,$EE,$E0,$EE,$EE,$FF
$E1,$F6,$F6,$F1,$F6,$F6,$E1,$FF
$F1,$EE,$EF,$EF,$EF,$EE,$F1,$FF
$E1,$F6,$F6,$F6,$F6,$F6,$E1,$FF
$E0,$EF,$EF,$E3,$EF,$EF,$E0,$FF
$E0,$EF,$EF,$E3,$EF,$EF,$EF,$FF
$F1,$EE,$EF,$E8,$EE,$EE,$F1,$FF
$EE,$EE,$EE,$E0,$EE,$EE,$EE,$FF
$F1,$FB,$FB,$FB,$FB,$FB,$F1,$FF
$F8,$FD,$FD,$FD,$FD,$FD,$F3,$FF
$EE,$ED,$EB,$E7,$EB,$ED,$EE,$FF
$EF,$EF,$EF,$EF,$EF,$EF,$E0,$FF
$EE,$E4,$EA,$EA,$EE,$EE,$EE,$FF
$EE,$E6,$EA,$EC,$EE,$EE,$EE,$FF
$F1,$EE,$EE,$EE,$EE,$EE,$F1,$FF
$E1,$EE,$EE,$E1,$EF,$EF,$EF,$FF
$F1,$EE,$EE,$EE,$EA,$ED,$F2,$FF
$E1,$EE,$EE,$E1,$EB,$ED,$EE,$FF
$F1,$EE,$EF,$F1,$FE,$EE,$F1,$FF
$E0,$FB,$FB,$FB,$FB,$FB,$FB,$FF
$EE,$EE,$EE,$EE,$EE,$EE,$F1,$FF
$EE,$EE,$EE,$F5,$F5,$FB,$FB,$FF
$EE,$EE,$EE,$EA,$EA,$E4,$EE,$FF
$EE,$EE,$F5,$FB,$F5,$EE,$EE,$FF
$EE,$EE,$F5,$FB,$FB,$FB,$FB,$FF
$E0,$FE,$FD,$FB,$F7,$EF,$E0,$FF
$F1,$F7,$F7,$F7,$F7,$F7,$F1,$FF
$FF,$EF,$F7,$FB,$FD,$FE,$FF,$FF
$F1,$FD,$FD,$FD,$FD,$FD,$F1,$FF
$FB,$F5,$EE,$FF,$FF,$FF,$FF,$FF
$FF,$FF,$FF,$FF,$FF,$FF,$E0,$FF
$F3,$F3,$F7,$FB,$FF,$FF,$FF,$FF
$FF,$FF,$F1,$FE,$F0,$EE,$F1,$FF
$EF,$EF,$E9,$E6,$EE,$E6,$E9,$FF

(
)
*
+
,
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
backslash
[
^
underline
a
b

LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA
LDATA

$FF,$FF,$F8,$F7,$F7,$F7,$F8,$FF c
$FE,$FE,$F2,$EC,$EE,$EC,$F2,$FF d
$FF,$FF,$F1,$EE,$E0,$EF,$F1,$FF e
$F9,$F6,$F7,$E1,$F7,$F7,$F7,$FF f
$FF,$FF,$F0,$EE,$F0,$FE,$F1,$FF g
$EF,$EF,$E9,$E6,$EE,$EE,$EE,$FF h
$FB,$FF,$F3,$FB,$FB,$FB,$F1,$FF i
$FD,$FF,$F9,$FD,$FD,$FD,$F3,$FF j
$F7,$F7,$F6,$F5,$F3,$F5,$F6,$FF k
$F3,$FB,$FB,$FB,$FB,$FB,$F1,$FF l
$FF,$FF,$E5,$EA,$EA,$EA,$EA,$FF m
$FF,$FF,$E9,$E6,$EE,$EE,$EE,$FF n
$FF,$FF,$F1,$EE,$EE,$EE,$F1,$FF o
$FF,$FF,$E1,$EE,$E1,$EF,$EF,$FF p
$FF,$FF,$F0,$EE,$F0,$FE,$FE,$FF q
$FF,$FF,$E9,$E6,$EF,$EF,$EF,$FF r
$FF,$FF,$F0,$EF,$F1,$FE,$E1,$FF s
$FB,$FB,$F0,$FB,$FB,$FB,$FC,$FF t
$FF,$FF,$EE,$EE,$EE,$EC,$F2,$FF u
$FF,$FF,$EE,$EE,$EE,$F5,$FB,$FF v
$FF,$FF,$EE,$EE,$EA,$EA,$F4,$FF w
$FF,$FF,$EE,$F5,$FB,$F5,$EE,$FF x
$FF,$FF,$EE,$F5,$FB,$FB,$F3,$FF y
$FF,$FF,$E0,$FD,$FB,$F7,$E0,$FF z
$F9,$F7,$F7,$E7,$F7,$F7,$F9,$FF {
$FB,$FB,$FB,$FF,$FB,$FB,$FB,$FF |
$F3,$FD,$FD,$FC,$FD,$FD,$F3,$FF }
$F5,$EA,$FF,$FF,$FF,$FF,$FF,$FF ~
$F5,$EA,$F5,$EA,$F5,$EA,$F5H DEL

You might also like