• PicŪ Basic


  • ir remote controlled 15x7 dot matrix display

    here is the simplest posible example how to use rc5in comand to programm led dot matrix display, with sample video and sample schematic
    http://www.youtube.com/watch?v=TVS4ZxKpRVA

    http://img39.imageshack.us/i/sbrdasdola.jpg/

    Code:
    <dl class="codebox"><dd><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: 
    ' 
    ' 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
    </code></dd></dl>
    This article was originally published in forum thread: ir remote controlled 15x7 dot matrix display started by xxxxxx View original post
  • Recent Activity

    towlerg-21522

    PIC18F1330 PLL problem

    Thread Starter: rcurl

    I'm just starting out on a new project that uses a PIC18F1330. I haven't used this specific chip before, so I began by trying to blink an LED just...

    towlerg Yesterday, 16:26 Go to last post
    towlerg-21522

    Pic16f18877 oread

    Thread Starter: evoortman

    Hi, On a PIC16F18877 the OREAD command doesn't seem to work. The code is working on a PIC16F1939. Both controllers use 32MHz int osc. If i...

    towlerg Yesterday, 16:25 Go to last post
    palamont-28794

    MID$ Problem with a PIC18F25K22

    Thread Starter: palamont

    Hi everybody, I encounter a strange problem : I have a string of 230 characters. This string is divided into 10 segments of 23 characters, with a...

    palamont Yesterday, 10:08 Go to last post