Elektroda.pl
Elektroda.pl
X
Arrow Multisolution Day
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Bascom][atmega32] Program do matrycy led 5x12 lub 5x7

Hopen 13 Lis 2011 14:34 1828 2
  • #1 13 Lis 2011 14:34
    Hopen
    Poziom 12  

    Witam,
    mam mały program napisałem przy użyciu książki Pana Marcina Wiązania oraz przy użyciu elektrody do obsługi matrycy led, lecz mam nieporządany efekt stroboskopowy. Nie widać liter, tekstu, tylko wszystkie diody mrugają. Czy to jest spowodowane zasilaniem czy też błędem programu?
    Dorzucam dwa programy, przy których pracowałem i schemat, schemat jest pod:

    https://www.elektroda.pl/rtvforum/viewtopic.php?p=10087425#10087425

    Code:
    'Program tablicy świetlnej
    
    'Sterowania multipleksowe wyświetlaczem matrycowym 7x5 LED
    'Częstotliwość sterowania kolumn wyświetlacza wynosi ok. 333 Hz
    'czyli częstotliwość odświeżania kolumn wyświetlacza
    'wyniesie ok. 333/5 = ok. 67 Hz

    $regfile = "m32def.dat"                                     'informuje kompilator o pliku
           'dyrektyw mikrokontrolera
    $crystal = 16000000                                         'informuje kompilator
           'o częstotliwości oscylatora
           'taktującego mikrokontroler

    'Config Portc = Output
    Config Portd = Output
    'Config Portb = Output
    Config Porta = Output




    Config Timer0 = Timer , Prescale = 256
           'konfiguracja Timer0 jako timer
           'z podziałem preskalera przez
           '256

    Declare Sub Pob_w_zn
           'procedura tablicy świetlnej

    On Timer0 Mult_wysw_matr                                    'przerwanie od przepełnienia
           'Timer0, skok do podprogramu
           'przerwania Mult_wysw_matr

    Dim Znak As String * 1                                      'zmienna, do której wpisywany
           'jest znak do wyświetlenia
    Dim Nr_kol As Byte                                          'zmienna określająca numer
           'zapalanej kolumny wyświetlacza
    Dim Kod_zn As Byte                                          'zmienna, do której wpisywany
           'jest kod ASCII wyświetlanego




           'znaku
    Dim Kol_zn As Byte                                          'zmienna, do której wpisywany
           'jest kod wyświetlanej kolumny
           'z określonej tablicy

    Dim I As Byte                                               'zmienna licznikowa



    C1 Alias Porta.0                                            'przypisanie linii PB0 nazwy C1
    C2 Alias Porta.1                                            'przypisanie linii PB1 nazwy C2
    C3 Alias Porta.2                                            'przypisanie linii PB2 nazwy C3
    C4 Alias Porta.3                                            'przypisanie linii PB3 nazwy C4
    C5 Alias Porta.4                                            'przypisanie linii PB4 nazwy C5

    Enable Interrupts                                           'odblokowanie globalnego systemu
           'przerwań
    Enable Timer0                                               'odblokowanie przerwania od
           'przepełnienia Timer0
    Load Timer0 , 222                                           'wpisanie do licznika wartości
           'początkowej 162 gdyż
           '256 - 94 = 162

    Do
    Znak = "E"
    Wait 1

    Znak = "M"
    Wait 1

    Znak = "I"
    Wait 1

    Znak = "L"
    Wait 1

    Znak = " "
    Wait 1

    Znak = "A"
    Wait 1

    For I = 32 To 127
    Znak = Chr(i)
    Waitms 500
    Next I


    Loop
                                                          'koniec pętli nieskończonej
    End                                                         'koniec programu


    Sub Pob_w_zn
         Kod_zn = Asc(znak)

          Select Case Nr_kol                                    'w zależności od wartości

     Case 0:                                                    'jeśli I ma wartość 1, to
      Kol_zn = Lookup(kod_zn , Kol1)                            'wpisanie do tablicy Kol(5) kodu
           'znaku dla kolumny 1
     Case 1:                                                    'jeśli I ma wartość 2, to
      Kol_zn = Lookup(kod_zn , Kol2)                            'wpisanie do tablicy Kol(5) kodu
           'znaku dla kolumny 2
     Case 2:                                                    'jeśli I ma wartość 3, to
      Kol_zn = Lookup(kod_zn , Kol3)                            'wpisanie do tablicy Kol(5) kodu
           'znaku dla kolumny 3
     Case 3:                                                    'jeśli I ma wartość 4, to
      Kol_zn = Lookup(kod_zn , Kol4)                            'wpisanie do tablicy Kol(5) kodu
           'znaku dla kolumny 4
     Case 4:                                                    'jeśli I ma wartość 5, to
      Kol_zn = Lookup(kod_zn , Kol5)                            'wpisanie do tablicy Kol(5) kodu
           'znaku dla kolumny 5
     End Select                                                 'koniec instrukcji wyboru

     Portd = Portd And &B01111111
     Kol_zn = Kol_zn And &B10000000

     Portd = Portd Or Kol_zn

     End Sub                                                     'koniec procedury

                                                      'koniec procedury

    Mult_wysw_matr:                                             'podprogramu obsługi przerwania
           'od przepełnienia Timer0
     Load Timer0 , 34                                           'wpisanie do licznika wartości
           'początkowej
     Set C1                                                     'wygaszenie kolumny 1
     Set C2                                                     'wygaszenie kolumny 2
     Set C3                                                     'wygaszenie kolumny 3
     Set C4                                                     'wygaszenie kolumny 4
     Set C5                                                     'wygaszenie kolumny 5
     Call Pob_w_zn                                              'wywołanie procedury
           'pobierającej i wysyłającej kod
           'wyświetlanej kolumny z tablic
     Select Case Nr_kol                                         'w zależności od wartości Nr_kol
           'wykonaj:
     Case 0:                                                    'gdy Nr_kol = 0, to
      Reset C1                                                  'włączenie kolumny 1
     Case 1:                                                    'gdy Nr_kol = 1, to
      Reset C2                                                  'włączenie kolumny 2
     Case 2:                                                    'gdy Nr_kol = 2, to
      Reset C3                                                  'włączenie kolumny 3
     Case 3:                                                    'gdy Nr_kol = 3, to
      Reset C4                                                  'włączenie kolumny 4
     Case 4:                                                    'gdy Nr_kol = 4, to
      Reset C5                                                  'włączenie kolumny 5

     End Select                                                 'koniec instrukcji wyboru

     Incr Nr_kol                                                'zwiększenie o jeden wartości
           'Nr_kol
     If Nr_kol = 5 Then                                         'jeśli wartość Nr_kol osiągnie
           '5, to
      Nr_kol = 0                                                'zerowanie wartości Nr_kol
     End If
    Return                                                      'powrót z podprogramu przerwania

    Kol1:                                                       'tablica kodów Kol1 dla
           'pierwszej kolumny wyświetlacza
           '- kolejność kodów odpowiada
           'numerom ASCII
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 ,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 ,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 ,
    Data 127 , 127 , 127 , 127 , 127 , 107 , 109 , 29 , 73 , 127 ,
    Data 127 , 127 , 107 , 119 , 127 , 119 , 127 , 125 , 65 , 127 ,
    Data 94 , 61 , 115 , 13 , 97 , 127 , 73 , 79 , 127 , 127 , 119 ,
    Data 107 , 127 , 95 , 89 , 64 , 0 , 65 , 0 , 0 , 0 , 65 , 0 ,
    Data 127 , 125 , 0 , 0 , 0 , 0 , 65 , 0 , 65 , 0 , 78 , 63 , 1 ,
    Data 3 , 1 , 28 , 15 , 60 , 127 , 43 , 127 , 111 , 126 , 127 ,
    Data 125 , 0 , 113 , 113 , 113 , 119 , 103 , 0 , 127 , 125 , 0 ,
    Data 127 , 96 , 96 , 113 , 96 , 119 , 96 , 118 , 111 , 97 , 99 ,
    Data 97 , 110 , 103 , 110 , 127 , 127 , 127 , 119 , 119

    Kol2:                                                       'tablica kodów Kol2 dla drugiej
           'kolumny wyświetlacza
           '- kolejność kodów odpowiada
           'numerom ASCII
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 ,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 ,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 ,
    Data 127 , 127 , 127 , 127 , 15 , 0 , 85 , 27 , 54 , 47 , 99 ,
    Data 62 , 119 , 119 , 122 , 119 , 124 , 123 , 58 , 94 , 60 , 62 ,
    Data 107 , 46 , 86 , 56 , 54 , 54 , 73 , 74 , 107 , 107 , 62 ,
    Data 63 , 54 , 59 , 54 , 62 , 62 , 54 , 55 , 62 , 119 , 62 , 126 ,
    Data 119 , 126 , 95 , 111 , 62 , 55 , 62 , 55 , 54 , 63 , 126 ,
    Data 125 , 126 , 107 , 119 , 58 , 0 , 75 , 62 , 95 , 126 , 63 ,
    Data 106 , 118 , 110 , 110 , 106 , 64 , 90 , 119 , 110 , 126 ,
    Data 123 , 62 , 111 , 119 , 110 , 107 , 107 , 119 , 106 , 1 ,
    Data 126 , 125 , 126 , 117 , 122 , 108 , 119 , 127 , 62 , 119 , 99

    Kol3:                                                       'tablica kodów Kol3 dla trzeciej
           'kolumny wyświetlacza
           '- kolejność kodów odpowiada
           'numerom ASCII
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 ,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 ,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 ,
    Data 127 , 127 , 127 , 6 , 127 , 107 , 0 , 119 , 42 , 31 , 93 ,
    Data 93 , 65 , 65 , 121 , 119 , 124 , 119 , 54 , 0 , 58 , 46 , 91 ,
    Data 46 , 54 , 55 , 54 , 54 , 73 , 73 , 93 , 107 , 93 , 58 , 48 ,
    Data 59 , 54 , 62 , 62 , 54 , 55 , 54 , 119 , 0 , 62 , 107 , 126 ,
    Data 103 , 119 , 62 , 55 , 58 , 51 , 54 , 0 , 126 , 126 , 113 ,
    Data 119 , 120 , 54 , 62 , 96 , 62 , 63 , 126 , 95 , 106 , 110 ,
    Data 110 , 110 , 106 , 55 , 90 , 111 , 32 , 110 , 117 , 0 , 115 ,
    Data 111 , 110 , 107 , 107 , 111 , 106 , 110 , 126 , 126 , 121 ,
    Data 123 , 122 , 106 , 73 , 0 , 73 , 85 , 85

    Kol4:                                                       'tablica kodów Kol4 dla czwartej
           'kolumny wyświetlacza
           '- kolejność kodów odpowiada
           'numerom ASCII
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 ,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 ,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 ,
    Data 127 , 127 , 127 , 127 , 15 , 0 , 85 , 108 , 93 , 127 , 62 ,
    Data 99 , 119 , 119 , 127 , 119 , 127 , 111 , 46 , 126 , 54 , 22 ,
    Data 0 , 46 , 54 , 47 , 54 , 53 , 127 , 127 , 62 , 107 , 107 , 55 ,
    Data 62 , 59 , 54 , 62 , 93 , 54 , 55 , 54 , 119 , 62 , 1 , 93 ,
    Data 126 , 95 , 123 , 62 , 55 , 61 , 53 , 54 , 63 , 126 , 125 , 126 ,
    Data 107 , 119 , 46 , 62 , 75 , 0 , 95 , 126 , 111 , 106 , 110 ,
    Data 110 , 118 , 106 , 63 , 90 , 111 , 126 , 33 , 110 , 126 , 111 ,
    Data 111 , 110 , 107 , 115 , 111 , 106 , 126 , 125 , 125 , 126 ,
    Data 117 , 122 , 102 , 62 , 127 , 119 , 99 , 119

    Kol5:                                                       'tablica kodów Kol5 dla piątej
           'kolumny wyświetlacza
           '- kolejność kodów odpowiada
           'numerom ASCII
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 ,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 ,
    Data 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 , 127 ,
    Data 127 , 127 , 127 , 127 , 127 , 107 , 91 , 92 , 122 , 127 , 127 ,
    Data 127 , 107 , 119 , 127 , 119 , 127 , 95 , 65 , 127 , 78 , 57 ,
    Data 123 , 49 , 121 , 31 , 73 , 67 , 127 , 127 , 127 , 107 , 119 ,
    Data 79 , 65 , 64 , 73 , 93 , 99 , 62 , 63 , 80 , 0 , 127 , 63 , 62 ,
    Data 126 , 0 , 0 , 65 , 79 , 66 , 78 , 57 , 63 , 1 , 3 , 1 , 28 , 15 ,
    Data 30 , 127 , 43 , 127 , 111 , 126 , 127 , 112 , 113 , 125 , 0 ,
    Data 115 , 95 , 65 , 112 , 127 , 127 , 127 , 127 , 112 , 112 , 113 ,
    Data 119 , 96 , 119 , 125 , 125 , 96 , 99 , 97 , 110 , 97 , 110 ,
    Data 127 , 127 , 127 , 119 , 119


    Code:

    ' ______________________________________________________________________________
    '|  Program " MINI TEXT SCROLLER",  Autor: Manekinen,  www:diy.elektroda.eu
    '|            Kompilator: bascom 1.11.9.0, Data: 21.09.2009
    '|               Tylko do wykorzystania niekomercyjnego
    '|______________________________________________________________________________

    $regfile = "m32def.dat"
    $crystal = 16000000
    $hwstack = 256
    $swstack = 256
    $framesize = 256
    '____________________konfiguracja portów, wszystkie jako wyjścia________________

    Config Portc = Output
    Config Portd = Output
    Config Portb = Output
    Config Porta = Output

    Portc = 255
    Portd = 255
    Portb = 0
    Porta = 0


    '_____________________ustawienie przerwań_______________________________________
    'Timer0 steruje multipleksowaniem diód
    Config Timer0 = Timer , Prescale = 256
    'Enable Timer0
    On Timer0 Led
    'Start Timer0

    'Timer1 Steruje przesuwem tekstu
    Config Timer1 = Timer , Prescale = 64
    'Enable Timer1
    On Timer1 Przesun
    'Start Timer1

    'Timer2 Steruje wygaszaniem diod, od wywołania timer0 (czyli zapalenia diod)
    'zaczyna zliczać określoną ilość impulsów przeliczoną wcześniej na podstawie napięcia baterii
    'w ten sposób prąd diod jest ograniczony odpowiednim wypełnieniem
    'Config Timer2 = Timer , Prescale = 256
    'Enable Timer2
    'On Timer2 Wypelnienie
    'Start Timer2


    Enable Interrupts                                           'włączam przerwania



    '__________________deklaracje zmiennych_________________________________________

    Dim Text As Byte                                            'zmienna do przychowywania indeksu odczytywanego znaku
    Dim Piond As Long                                           '17 bitowa zmienna przechowująca dane do przepisania na piny
    Dim Znak As Byte                                            'przechowuje dane znaku odczytanego z tabeli
    Dim Pion(5) As Long                                         'linia 1-5
    Dim Linia As Byte                                           'która linia ma być wyświetlana
    Dim Znak_next As Bit                                        'decyduje czy pobrać kolejny znak, czy kontynuować wyświetlanie aktualnego
    Znak_next = 1                                               'poprawna wartość początkowa
    Dim Nr_znaku As Byte                                        'numer kolejny łądowanego znaku
    Dim Linia_zmian As Byte                                     'licznik przełączający linie poziome przy wpisywaniu nowego znaku
    Dim Szer_znaku As Byte                                      'zmienna przechowująca informacje o szerokości znaku, czyli ile razy ładować linię
    Dim Ktory_napis As Byte                                     'który napis jest aktualnie wyświetlany, wartość 0 to wyświetlacz zatrzymany
    Ktory_napis = 5                                             'na samym początku wyświetla tekst powitania (nr5)
                                             'odczyt ADC z baterii
    Dim Pomiar_jedn As Byte
    Dim Pomiar_dzie As Byte
    Dim Pomiar_setn As Byte
    Dim Licznik As Byte
    Dim Offset As Word
    Dim Prz1 As Byte
    Dim Prz2 As Byte
    Dim Prz3 As Byte
    Dim Prz4 As Byte
    Dim Nr_komorki_w_edycji As Byte
    Dim X As Byte
    Dim Adres_napisu As Word
    Dim Ostatni_napis As Byte
    'flagi
    Dim Wstal As Bit
    Dim P1 As Bit
    Dim P2 As Bit
    Dim P3 As Bit
    Dim P4 As Bit

    Dim Predkosc As Bit
    Dim Negatyw As Bit
    Dim Wielkie As Bit
    Dim Edytor As Bit
    Dim Napis_edyc_wybrany As Bit
    Dim Koniec_miejsca As Bit

    '____________________________początek programu__________________________________



    'uaktywniam timery i nastepuje rozpoczęcie wyświetlania
    Enable Timer0
    Start Timer0

    Enable Timer1
    Start Timer1

    'Enable Timer2
    'Start Timer2

    '______________________________start____________________________________________
    Do




    Loop

    '_________________________czyszczenie wyświetlacza______________________________
    Wyczysc:
    Pion(1) = 0
    Pion(2) = 0
    Pion(3) = 0
    Pion(4) = 0
    Pion(5) = 0
    Return


    '__________________________regulacja_wypełnienia________________________________
    'tutaj tylko gasze diody
    Wypelnienie:
    Porta = &B000000
    Return


    '__________________________multipleksowanie_diod________________________________
    Led:
    'większa liczba da szybsze multiplekoswanie, linie mogą nanosić się na siebie pozostawiając widmo
    'mniejsza liczba da wolniejsze multipleksowanie, będzie widoczny efekt migotania
    Timer0 = 500
    'Timer2 = Licznik

    Incr Linia : If Linia = 6 Then Linia = 1
    Select Case Linia
    Case 1:
       Piond = Pion(1)
       Gosub Przepisz
       Porta.4 = 1

    Case 2:
       Piond = Pion(2)
       Gosub Przepisz
       Porta.3 = 1

    Case 3:
       Piond = Pion(3)
       Gosub Przepisz
       Porta.2 = 1

    Case 4:
       Piond = Pion(4)
       Gosub Przepisz
       Porta.1 = 1

    Case 5:
       Disable Timer0                                           'zatrzymuje multipleksowanie

       Enable Timer0                                            'wznawiam multipleksowanie

       Piond = Pion(5)
       Gosub Przepisz
       Porta.0 = 1

    End Select


    Return


    '__________________________wpisuje_na_porty_____________________________________
    Przepisz:

    'odwracam całą zmienną. W pierwszej wersji linie pionowe były aktywowane stanem wysokim, a teraz niskim
    'więc cały tekst jest wyświetlany w negatywie
    'zamiast robić od nowa wszystkie tablice znaków łatwiej jest odwrócić przed wyświetleniem
    If Negatyw = 0 Then Toggle Piond

    Portc.7 = Piond.1 : Portc.6 = Piond.2 : Portc.5 = Piond.3 : Portc.4 = Piond.4 : Portc.3 = Piond.5 : Portc.2 = Piond.6
    Portd.7 = Piond.7 : Portd.6 = Piond.8 : Portd.5 = Piond.9 : Portd.4 = Piond.10 : Portd.3 = Piond.11 : Portd.2 = Piond.12


    Return



    '_________________pobieranie_i_przesuwanie_tekstu_______________________________
    Przesun:
    '45000 - 60000

    Timer1 = 5200                                               'wpisując w licznik liczbę, skracamy jego pracę i regulujemy czas (16 bit)
    If Predkosc = 1 Then Timer1 = 5400


       If Znak_next = 1 Then                                    'jeśli pora zmienić znak
          Znak_next = 0                                         'ustawiam bit że nowy znak został pobrany

          Select Case Ktory_napis

             Case 1:
                Offset = Nr_znaku
                Readeeprom Text , Offset
                Ostatni_napis = 1
             Case 2:
                Offset = Nr_znaku + 128
                Readeeprom Text , Offset
                Ostatni_napis = 2
             Case 3:
                Offset = Nr_znaku + 256
                Readeeprom Text , Offset
                Ostatni_napis = 3
             Case 4:
                Offset = Nr_znaku + 384
                Readeeprom Text , Offset
                Ostatni_napis = 4
             Case 5:
                If Nr_znaku < 21 Or Nr_znaku > 24 Then
                   Text = Lookup(nr_znaku , Tab_powitanie)
                Elseif Nr_znaku = 21 Then
                   Text = Pomiar_jedn
                Elseif Nr_znaku = 22 Then
                   Text = 65
                Elseif Nr_znaku = 23 Then
                   Text = Pomiar_dzie
                Elseif Nr_znaku = 24 Then
                   Text = Pomiar_setn
                End If
                Ostatni_napis = 5

          End Select

          Incr Nr_znaku                                         'zwiększam numer kolejny znaku

          'jeśli wybrano opcje samych wielkich liter, przesuwam odczyt z tablicy o 26 znaków w prawo
          'ale tylko dla zakresu znaków od małe 'a' do małe 'z'
             If Wielkie = 1 Then
                If Text > 10 And Text < 37 Then
                   Text = Text + 26
                End If
             End If


          Szer_znaku = Lookup(text , Tab_szerokosc)             'do zmiennej szer_znaku wpisuje jego szerokość z tabeli, żeby wiedzieć ile razy powtórzyć pętle wpisywania linii

       End If



       Do                                                       'pętla odczytująca kolejną linię pionową znaku
          Offset = 5 * Text                                     'każdy znak zajmuje 5 komórek pamięci więc łatwo można obliczyć jego położenie w tablicy
          Offset = Offset + Linia_zmian
          Znak = Lookup(offset , Tab_znaki)

          'Adres = Loadlabel(tab_znaki)
          'Adres = Adres + Offset
          'Offset = Cpeek(offset)


          Select Case Linia_zmian
             Case 0:
             Shift Pion(1) , Left , 1
             Pion(1).0 = Znak.szer_znaku                        'do pierwszego bitu pierwszej linii przepisuje stan logiczny, o numerze kolejnym dyktowanym przez szerokość znaku

             Case 1:
             Shift Pion(2) , Left , 1
             Pion(2).0 = Znak.szer_znaku

             Case 2:
             Shift Pion(3) , Left , 1
             Pion(3).0 = Znak.szer_znaku

             Case 3:
             Shift Pion(4) , Left , 1
             Pion(4).0 = Znak.szer_znaku

             Case 4:
             Shift Pion(5) , Left , 1
             Pion(5).0 = Znak.szer_znaku

          End Select

          Incr Linia_zmian                                      'zwiększam linie zmian
          If Text = 87 Then Pion(linia_zmian).0 = 0             'PO CO TO?-> patrz komentarz ostatniego znaku w tablicy tab_znaki

       Loop Until Linia_zmian = 5                               'powtarzaj odczyt dopóki nie zostaną odczytane wszystkie 5 linii
       Linia_zmian = 0                                          'kasuje licznik linii poziomych po odczytaniu wszystkich 5 linii
       Decr Szer_znaku
       If Szer_znaku = 254 Then Znak_next = 1                   'jeśli wyświetle cały znak (wraz z odstępem, wartość ujemna) to ustaw że trzeba załadować kolejny znak

       If Text = 87 And Znak_next = 1 Then Ktory_napis = 0      'jeśli natrafie na znak końcowy '87', i jeśli cały poprzedni znak został wyświetlony, przechodze w power-down w głównej pętli

    Return



    '____________________________zwłoka 0.5 sekundy_________________________________
    Wait05:
    Waitms 500
    Return

    '_________________________________tablice_______________________________________



    'tablica zawierająca szerokość danego znaku
    Tab_szerokosc:
    'zn   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   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   !   ?   .   ,   :   ;   -   _   +   =   "   '   &   (   )   /   \   <   >   #   $   %   *   @  END       'jaki znak
    Data 4 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 4 , 4 , 3 , 4 , 4 , 1 , 3 , 4 , 3 , 5 , 4 , 4 , 4 , 4 , 3 , 4 , 3 , 4 , 3 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 4 , 4 , 3 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 4 , 5 , 5 , 4 , 4 , 4 , 1 , 4 , 1 , 2 , 1 , 2 , 3 , 3 , 3 , 3 , 3 , 1 , 4 , 2 , 2 , 5 , 5 , 3 , 3 , 5 , 5 , 5 , 3 , 5 , 15       'ile pól szerokości
    'nr   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87K       'numer kolejny


    'przykład - wielka litera F:

    'bity8 4 2 1

    '    1 1 1 1      = 15
    '    1 0 0 0      = 8
    '    1 1 1 0      = 14
    '    1 0 0 0      = 8
    '    1 0 0 0      = 8

    'więc jest 5 linii, i kolejno dla każdej przedstawione dane w tablicy będą wynosić 15 , 8 , 14 , 8 , 8
    'w ten sposób można łatwo tworzyć nowe znaki lub prymitywne obrazki :)
    'Oczywiście wymagany jest wpis w tabeli szerokości, i nalezy zadbać aby znak końcowy był zawsze na końcu, i należy uaktualnić jego adres we właściwych miejscach programu.

    'cyfry
    Tab_znaki:
    'Dig_0:
    Data 6 , 11 , 9 , 13 , 6
    'Dig_1:
    Data 6 , 2 , 2 , 2 , 7
    'Dig_2:
    Data 6 , 9 , 2 , 4 , 15
    'Dig_3:
    Data 6 , 9 , 2 , 9 , 6
    'Dig_4:
    Data 6 , 10 , 15 , 2 , 2
    'Dig_5:
    Data 15 , 8 , 14 , 1 , 14
    'Dig_6:
    Data 7 , 8 , 14 , 9 , 6
    'Dig_7:
    Data 15 , 1 , 2 , 4 , 8
    'Dig_8:
    Data 6 , 9 , 6 , 9 , 6
    'Dig_9:
    Data 6 , 9 , 7 , 1 , 14
    'małe litery
    'S_spac:
    Data 0 , 0 , 0 , 0 , 0
    'Small_a:
    Data 0 , 6 , 9 , 9 , 7
    'Small_b:
    Data 8 , 14 , 9 , 9 , 14
    'Small_c:
    Data 0 , 3 , 4 , 4 , 3
    'Small_d:
    Data 1 , 7 , 9 , 9 , 7
    'Small_e:
    Data 0 , 7 , 9 , 10 , 7
    'Small_f:
    Data 1 , 2 , 7 , 2 , 2
    'Small_g:
    Data 7 , 9 , 7 , 1 , 6
    'Small_h:
    Data 8 , 14 , 9 , 9 , 9
    'Small_i:
    Data 1 , 0 , 1 , 1 , 1
    'Small_j:
    Data 1 , 0 , 1 , 1 , 6
    'Small_k:
    Data 8 , 9 , 10 , 14 , 9
    'Small_l:
    Data 4 , 4 , 4 , 4 , 3
    'Small_m:
    Data 0 , 26 , 21 , 21 , 21
    'Small_n:
    Data 0 , 14 , 9 , 9 , 9 ,
    'Small_o:
    Data 0 , 6 , 9 , 9 , 6
    'Small_p:
    Data 0 , 14 , 9 , 14 , 8
    'Small_q:
    Data 0 , 7 , 9 , 7 , 1
    'Small_r:
    Data 0 , 5 , 6 , 4 , 4
    'Small_s:
    Data 0 , 7 , 12 , 3 , 14
    'Small_t:
    Data 2 , 7 , 2 , 2 , 1
    'Small_u:
    Data 0 , 9 , 9 , 9 , 7
    'Small_v:
    Data 0 , 5 , 5 , 5 , 2
    'Small_w:
    Data 0 , 17 , 21 , 21 , 10
    'Small_x:
    Data 0 , 9 , 6 , 6 , 9
    'Small_y:
    Data 0 , 9 , 7 , 1 , 6
    'Small_z:
    Data 0 , 15 , 2 , 4 , 15
    'wielkie litery
    'Big_a:
    Data 6 , 9 , 15 , 9 , 9
    'Big_b:
    Data 14 , 9 , 14 , 9 , 14
    'Big_c:
    Data 7 , 8 , 8 , 8 , 7
    'Big_d:
    Data 14 , 9 , 9 , 9 , 14
    'Big_e:
    Data 15 , 8 , 14 , 8 , 15
    'Big_f:
    Data 15 , 8 , 14 , 8 , 8
    'Big_g:
    Data 6 , 9 , 8 , 11 , 7
    'Big_h:
    Data 9 , 9 , 15 , 9 , 9
    'Big_i:
    Data 7 , 2 , 2 , 2 , 7
    'Big_j:
    Data 15 , 1 , 1 , 9 , 6
    'Big_k:
    Data 9 , 10 , 12 , 10 , 9
    'Big_l:
    Data 4 , 4 , 4 , 4 , 7
    'Big_m:
    Data 17 , 27 , 21 , 17 , 17
    'Big_n:
    Data 9 , 13 , 11 , 9 , 9
    'Big_o:
    Data 6 , 9 , 9 , 9 , 6
    'Big_p:
    Data 14 , 9 , 14 , 8 , 8
    'Big_q:
    Data 6 , 9 , 9 , 11 , 7
    'Big_r:
    Data 14 , 9 , 14 , 10 , 9
    'Big_s:
    Data 7 , 8 , 6 , 1 , 14
    'Big_t:
    Data 7 , 2 , 2 , 2 , 2
    'Big_u:
    Data 9 , 9 , 9 , 9 , 6
    'Big_v:
    Data 17 , 17 , 17 , 10 , 4
    'Big_w:
    Data 21 , 21 , 21 , 21 , 10
    'Big_x:
    Data 9 , 9 , 6 , 9 , 9
    'Big_y:
    Data 9 , 9 , 6 , 4 , 8
    'Big_z:
    Data 15 , 2 , 4 , 8 , 15
    'znaki interpunkcyjne i znaki dodatkowe
    'S_wykr:
    Data 1 , 1 , 1 , 0 , 1
    'S_zapy:
    Data 6 , 9 , 2 , 0 , 2
    'S_krop:
    Data 0 , 0 , 0 , 0 , 1
    'S_prze:
    Data 0 , 0 , 0 , 1 , 2
    'S_dwuk:
    Data 0 , 1 , 0 , 1 , 0
    'S_sred:
    Data 0 , 1 , 0 , 1 , 2
    'S_mysl:
    Data 0 , 0 , 7 , 0 , 0
    'S_podk:
    Data 0 , 0 , 0 , 0 , 7
    'S_plus:
    Data 0 , 2 , 7 , 2 , 0
    'S_rown:
    Data 0 , 7 , 0 , 7 , 0
    'S_cudz:
    Data 5 , 5 , 5 , 0 , 0
    'S_apos:
    Data 1 , 1 , 1 , 0 , 0
    'S_ampe:
    Data 4 , 10 , 6 , 9 , 6
    'S_nawl:
    Data 1 , 2 , 2 , 2 , 1
    'S_nawp:
    Data 2 , 1 , 1 , 1 , 2
    'S_ukol:
    Data 16 , 8 , 4 , 2 , 1
    'S_ukop:
    Data 1 , 2 , 4 , 8 , 16
    'S_wiek:
    Data 4 , 2 , 1 , 2 , 4
    'S_mnie:
    Data 1 , 2 , 4 , 2 , 1
    'S_hash:
    Data 10 , 31 , 10 , 31 , 10
    'S_dola:
    Data 15 , 20 , 14 , 5 , 30
    'S_proc:
    Data 25 , 26 , 4 , 11 , 19
    'S_gwia:
    Data 5 , 2 , 5 , 0 , 0,
    'S_malp:
    Data 14 , 19 , 21 , 23 , 2
    'END
    'Data 0 , 0 , 0 , 0 , 0 'brak...
    'ten znak miał maskować wyświetlacz po ostatnim znaku napisu, miał mieć 16 pól szerokości...
    'ale zmieszanie w jednej tablicy słów i bajtów, a potem odczytywanie tego różnymi zmiennymi to masakra...
    'przy odczycie znaków jest warunek, jeśli = 87 (znak końcowy) to ręcznie nadpisuje bity wyświetlacza zerami,
    'niezależnie od tego co odczytano z tablicy... więc równie dobrze dancyh dla znaku 87 może nie być.

    'polskie znaki diaktryczne
    '.(jeszcze nie zaimplementowane, ciężko było opracować znak z ogonkiem nie mając dodatkowej dolnej linii - ale może ktoś będzie miał pomysł jak to wykonać:))
    '........................


    'powitanie zawiera tekst wyświetlany po podłączeniu zasilania
    Tab_powitanie:
    Data 59 , 19 , 30 , 11 , 20 , 66 , 10 , 29 , 30 , 11 , 24 , 10 , 12 , 11 , 30 , 15 , 28 , 19 , 19 , 67 , 10 , 0 , 0 , 0 , 0 , 32 , 87 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13
    '     W    i    t    a    j    ,   _s_   s    t    a    n   _s_   b    a    t    e    r    i    i    :   _s_  _napiecie bat_   v   _s_  _E_                                                                                       dotąd jest napis'  'napięcie bat'  'i dalej tekst

    0 2
  • Arrow Multisolution Day
  • Arrow Multisolution Day
  • #3 13 Lis 2011 14:44
    Hopen
    Poziom 12  

    Już to poprawiłem, net mi się zaciął i dlatego poszło dwa razy.

    0