Code:
'****************************************************************
' SIMPLE 15X8 LED MATRIX SCROLLING EXAMPLE
' 16F877A External 8MHz Xtal Osc
' LED Matrix columns are conected to PORTC pin rc0 via ULN2004AN and CD4017.
' RC1 reset for 4017
' LED Matrix rows conected to PORTB via 100 ohm resistors
' RB0 - top row
' Author: Muamer Halilovic
' www.mtskola.com
' today
'***************************************************************************************
Device 16F877A
Xtal 12
TRISB = %00000000
TRISC = %10000000
TRISD = %00000000
PORTB=0
PORTC=0
PORTD=0
All_Digital = True
EWrite 0,[%00000100,%00000110,%01111111,%00000110,%00000100] 'Up Arrow
EWrite 5,[%00010000,%00110000,%01111111,%00110000,%00010000] 'Dn Arrow
EWrite 10,[%01111110,%00010001,%00010001,%00010001,%01111110] 'A
EWrite 15,[%01111111,%01001001,%01001001,%01001001,%00110110] 'B
EWrite 20,[%00111110,%01000001,%01000001,%01000001,%00100010] 'C
EWrite 25,[%01111111,%01000001,%01000001,%00100010,%00011100] 'D
EWrite 30,[%01111111,%01001001,%01001001,%01001001,%01000001] 'E
EWrite 35,[%01111111,%00001001,%00001001,%00001001,%00000001] 'F
EWrite 40,[%00111110,%01000001,%01001001,%01001001,%01111010] 'G
EWrite 45,[%01111111,%00001000,%00001000,%00001000,%01111111] 'H
EWrite 50,[%00000000,%01000001,%01111111,%01000001,%00000000] 'I
EWrite 55,[%00100000,%01000000,%01000001,%00111111,%00000001] 'J
EWrite 60,[%01111111,%00001000,%00010100,%00100010,%01000001] 'K
EWrite 65,[%01111111,%01000000,%01000000,%01000000,%01000000] 'L
EWrite 70,[%01111111,%00000010,%00000110,%00000010,%01111111] 'M
EWrite 75,[%01111111,%00000100,%00001000,%00010000,%01111111] 'N
EWrite 80,[%00111110,%01000001,%01000001,%01000001,%00111110] 'O
EWrite 85,[%01111111,%00001001,%00001001,%00001001,%00000110] 'P
EWrite 90,[%01111111,%00001001,%00011001,%00101001,%01000110] 'R
EWrite 95,[%01000110,%01001001,%01001001,%01001001,%00110001] 'S
EWrite 100,[%00000001,%00000001,%01111111,%00000001,%00000001] 'T
EWrite 105,[%00111111,%01000000,%01000000,%01000000,%00111111] 'U
EWrite 110,[%00011111,%00100000,%01000000,%00100000,%00011111] 'V
EWrite 115,[$00,$00,$00,$00,$00] 'blank space
EWrite 185,[$00,$00,$00,$00,$00]
EWrite 190,[$00,$00,$00,$00,$00]
EWrite 195,[$00,$00,$00,$00,$00]
EWrite 200,[$00,$00,$00,$00,$00]
EWrite 205,[$00,$00,$00,$00,$00]
EWrite 210,[$00,$00,$00,$00,$00]
EWrite 215,[$00,$00,$00,$00,$00]
EWrite 220,[$00,$00,$00,$00,$00]
EWrite 225,[$00,$00,$00,$00,$00]
EWrite 230,[$00,$00,$00,$00,$00]
EWrite 235,[$00,$00,$00,$00,$00]
EWrite 240,[$00,$00,$00,$00,$00]
EWrite 245,[$00,$00,$00,$00,$00]
'________________________________________________________________
'Deklaracija promjenjivih
'________________________________________________________________
Dim kolona As Byte
Dim brojac As Byte
Dim k As Byte
Dim scan As Byte
Dim scroll As Byte
leddata var Byte[100]
Dim ir_ulaz As Word ' WORD variabla za zaprimanje podataka
Dim EEpromAdress As Byte 'eprom adresa za upis
Dim test As Word 'uporedjivach
Dim upisi As ir_ulaz.LowByte
Dim i As Byte
Dim sledeceslovo As Word
Dim prethodnoslovo As Word
Dim potvrdi As Word
Dim play As Word
Dim x As Byte
Dim j As Byte
Dim cnt As Byte
Dim a As Byte
Dim b As Byte
Dim c As Byte
Dim d As Byte
'________________________________________________________________
'poetene vrijednosti
'________________________________________________________________
EEpromAdress = 255
cnt=0
k=114
'________________________________________________________________
'Inicijalizacija
'________________________________________________________________
High PORTD.0
DelayMS 1300
Low PORTD.0
DelayMS 1300
'________________________________________________________________
'pregledaj eeprom ako ima sta idi na main ako ne idi na pripremu
'________________________________________________________________
'*******************************************************************
Declare RC5In_Pin PORTC.7 'infrared sensor pin
'********************************************************************
provjera:
test.LowByte = ERead 255 'iscitaj zapis iz eeproma sa adrese 255
If test.LowByte = $FF Then 'ako je FF
GoSub eepromprogON 'idi u programiraj komande
DelayMS 500
EndIf
test.LowByte = ERead 120 ' iscitaj zapis iz eeproma sa adrese 120 (pocetak poruke)
If test.LowByte = $FF Then ' ako je 00
GoSub odaberporuku ' idi na odaberi poruku
DelayMS 500
EndIf
main:
Clear ' ocisti sve varijable
Low PORTD.0 ' usli smo u mod za prikaz poruke
a=14
k=120
j=0
leddata[0-13] = $00 ' varijabla ledadta od 0 do 13 je 00
For b = 0 To 11 ' moguci broj slova u poruci
For i = 0 To 4
c=i+a 'povecaj a=14-19; a=20-24; a=26-30 itd...
d=i+j+k 'povecaj j=120-124; a=126-130; a=131-135 itd...
leddata [c]= ERead d 'filuj ledadtu od 14 do max broja slova za prikaz iz eeproma pocevsi od 120 pa nadalje
DelayUS 20
Next
leddata [a+5]=ERead 119 'upisi prazanu kolonu izmedju slova
a=a+6
j=j+6
Next
For scroll = 0 To c ' skrolaj poruku c zadnji leddata
For scan = 0 To 35
PORTC.1 = 1 'reseting 4017
PORTC.1 =0
For kolona = 0 To 14 'broj kolona
PORTC.0 = 1 'clock 4017
PORTC.0 =0
PORTB = leddata[kolona]
DelayUS 250
PORTB=0
Next
Next
For brojac = 0 To (c-1)
leddata[brojac]=leddata[brojac+1]' pomjeri za jedan
Next
Next
If PORTD.1=1 Then
GoSub odaberporuku
End If
GoTo main
End
eepromprogON: 'podprogram za odabir komadi za upravljanje
High PORTD.0
Repeat
ir_ulaz.LowByte= RC5In ' Primanje signala sa TSOP1738
Until upisi<> 255' Trazi-cekaj dok ne naleti valjano zaglavlje signala
EWrite EEpromAdress , [ ir_ulaz.LowByte ]
sledeceslovo.LowByte = ERead EEpromAdress ' pridruzi varijabli sledece slovo komandu i upisi u eprom na zadnju lokaciju
For i = 0 To 4
leddata [i]=ERead i ' prikazi strelicu
Next
For scan = 0 To 185
PORTC.1 = 1 'reseting 4017
PORTC.1 =0
For kolona = 0 To 4
PORTC.0 = 1 'clock 4017
PORTC.0 =0
PORTB = leddata[kolona]
DelayUS 500
PORTB=0
Next
Next
Low PORTD.0
DelayMS 100
High PORTD.0
DelayMS 100
Low PORTD.0
DelayMS 100
High PORTD.0
Repeat
ir_ulaz.LowByte= RC5In ' Primanje signala sa TSOP1738
Until upisi<> 255' Trazi-cekaj dok ne naleti valjano zaglavlje signala
EEpromAdress=EEpromAdress - 1
EWrite EEpromAdress , [ ir_ulaz.LowByte ]
prethodnoslovo.LowByte = ERead EEpromAdress ' pridruzi varijabli sledece slovo komandu i upisi u eprom na zadnju lokaciju
For i = 0 To 4
leddata [i]=ERead i+5 ' prikazi strelicu
Next
For scan = 0 To 185
PORTC.1 = 1 'reseting 4017
PORTC.1 =0
For kolona = 0 To 4
PORTC.0 = 1 'clock 4017
PORTC.0 =0
PORTB = leddata[kolona]
DelayUS 500
PORTB=0
Next
Next
Low PORTD.0
DelayMS 100
High PORTD.0
DelayMS 100
Low PORTD.0
DelayMS 100
High PORTD.0
Repeat
ir_ulaz.LowByte= RC5In ' Primanje signala sa TSOP1738
Until upisi<> 255' Trazi-cekaj dok ne naleti valjano zaglavlje signala
EEpromAdress=EEpromAdress - 1
EWrite EEpromAdress , [ ir_ulaz.LowByte ]
play.LowByte = ERead EEpromAdress ' pridruzi varijabli play komandu i upisi u eprom na predzadnju lokaciju
leddata[0]=$FE 'play simbol
leddata[1]=$7C
leddata[2]=$38
leddata[3]=$10
leddata[4]=$00
For scan = 0 To 185
PORTC.1 = 1 'reseting 4017
PORTC.1 =0
For kolona = 0 To 4
PORTC.0 = 1 'clock 4017
PORTC.0 =0
PORTB = leddata[kolona]
DelayUS 500
PORTB=0
Next
Next
Low PORTD.0
DelayMS 100
High PORTD.0
DelayMS 100
Low PORTD.0
DelayMS 100
High PORTD.0
Repeat
ir_ulaz.LowByte= RC5In ' Primanje signala sa TSOP1738
Until upisi<> 255' Trazi-cekaj dok ne naleti valjano zaglavlje signala
EEpromAdress=EEpromAdress -1
EWrite EEpromAdress , [ ir_ulaz.LowByte ] ' pridruzi varijabli potvrfi komandu i upisi u eprom na predpredzadnju :D lokaciju
potvrdi.LowByte = ERead EEpromAdress
leddata[0]=$00
leddata[1]=$00
leddata[2]=$08
leddata[3]=$10
leddata[4]=$20
leddata[5]=$10
leddata[6]=$08
leddata[7]=$04
leddata[8]=$02
leddata[9]=$01
For scan = 0 To 185
PORTC.1 = 1 'reseting 4017
PORTC.1 =0
For kolona = 0 To 9
PORTC.0 = 1 'clock 4017
PORTC.0 =0
PORTB = leddata[kolona]
DelayUS 500
PORTB=0
Next
Next
For x=0 To 5
Toggle PORTD.0
DelayMS 100
x=x+1
Next
x=0
EEpromAdress=0
Return 'vrati se u if petlju na pocetku
odaberporuku: ' podrpogram za odabir poruke za prikaz
High PORTD.0
sledeceslovo.LowByte = ERead 255
prethodnoslovo.LowByte = ERead 254
play.LowByte = ERead 253
potvrdi.LowByte = ERead 252
cnt=0
k=114
Low PORTD.1
Repeat
ir_ulaz.LowByte= RC5In ' Primanje signala sa TSOP1738
Until upisi<> 255' Trazi-cekaj dok ne naleti valjano zaglavlje signala
While ir_ulaz.LowByte<>play.LowByte
Repeat
ir_ulaz.LowByte= RC5In ' Primanje signala sa TSOP1738
Until upisi<> 255' Trazi-cekaj dok ne naleti valjano zaglavlje signala
If ir_ulaz.LowByte=prethodnoslovo.LowByte Then
If cnt = 0 Then
cnt=5
EndIf
cnt=cnt-5
For i = 0 To 4
leddata [i]=ERead i+cnt '
Next
For scan = 0 To 185
PORTC.1 = 1 'reseting 4017
PORTC.1 =0
For kolona = 0 To 4
PORTC.0 = 1 'clock 4017
PORTC.0 =0
PORTB = leddata[kolona]
DelayUS 500
PORTB=0
Next
Next
ElseIf ir_ulaz.LowByte=sledeceslovo.LowByte Then
cnt=cnt+5
For i = 0 To 4
leddata [i]=ERead i+cnt '
Next
For scan = 0 To 185
PORTC.1 = 1 'reseting 4017
PORTC.1 =0
For kolona = 0 To 4
PORTC.0 = 1 'clock 4017
PORTC.0 =0
PORTB = leddata[kolona]
DelayUS 500
PORTB=0
Next
Next
If cnt = 119 Then
cnt=0
EndIf
ElseIf ir_ulaz.LowByte=potvrdi.LowByte Then 'upisi odabran0o slovo u narednu slobodnu eeprom lokaciju
k=k+6'krecemo od 120
For i = 0 To 4
leddata [i]=ERead i+cnt
DelayUS 10 '
Next
For i = 0 To 4
EWrite (i+k),[leddata [i]] '
DelayMS 20
Next
For scroll =0 To 1
For i = 0 To 4
leddata [i]=ERead i+cnt 'prikazi odabrano slovo
Next
leddata[5]=$00
leddata[6]=$00
leddata[7]=$08
leddata[8]=$10
leddata[9]=$20
leddata[10]=$10
leddata[11]=$08
leddata[12]=$04
leddata[13]=$02
leddata[14]=$01
For scan = 0 To 185
PORTC.1 = 1 'reseting 4017
PORTC.1 =0
For kolona = 0 To 14
PORTC.0 = 1 'clock 4017
PORTC.0 =0
PORTB = leddata[kolona]
DelayUS 500
PORTB=0
Next
Next
Next
EndIf
Wend
Low PORTD.0
Return ' vrati se odakle si i dosao
Bookmarks