Sklop radi na sledeci nacin, odaberu se tipke na daljinksom upravljacu sa sledecim redoslijedom:
1. listaj slova gore
2. listaj slova dole
3. pusti poruku
4. potvrdi izabrano slovo
potom se ide na izbor poruke moguce je napisati poruku s 11 slova, nadam se da ce neko naci malo vremena i optimizirati kod jer u eepromu ima dovoljno mjesta za jos, ali kako je ovo zadovoljavalo moje potrebe nisam se previse zahmetio s ovim! ukoliko je poruka kraca od 11 slova potrebno je do 11 slova upisati prazno mjesto inace ce vam prostor za slovo na matrici biti popunjen jedinicama odnosno sve ledice ce biti ukljucene.
pritiskom tastera na daljinskom upravljacu "pusti poruku" poruka se skrola. Pritiskom tastera spojenog na RD1 ulazi se u poprogram za odabir poruke, ako zelite napisati nesto drugo ili trece! RD0 sluzi sa signalizaciju gdje smo u programu...
evo linka kako to fercera...
http://www.youtube.com/watch?v=TVS4ZxKpRVA
evo code-ta
Code: Select all
'****************************************************************
' 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:
'
' 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
http://img39.imageshack.us/i/sbrdasdola.jpg/
bilo bi mi drago da ovo nekome koristi...