'ProgramzTablica

Tablice w Bascom-ie


Programy z tablicami są trudne w zrozumieniu dopóty, dopóki nie zobaczymy działającego programu z ich przykładem.

Jeśli budujemy urządzenie, które rejestruje dane cyfrowe z zewnątrz przez Port wejściowy,
to warto skorzystać z tablicy. Przychodzące dane porównane będą z zawartością tablicy.
Jeśli obydwie cyfry będą takie same, załączony zostanie Port.


'ProgramzTablica.bas

'Pokazuje, jak korzysta się z tablicy.

'Tablica nazywa się Tabl, zawiera 5 danych (Il_dan_wtabl = 5).

'Zastosujemy klawiaturę AT i Lcd 2X16.

'Do czego można wykorzystać:

'Mamy zmienną Cyfra_wzmiennej1, jej zawartość cyfrowa może ulegać zmianom na skutek przyczyn zewnętrznych.

'Program sprawdza, czy w zmiennej znajduje się już taka cyfra, jakiej oczekujemy.

'Jeśli oczekiwana cyfra znajdzie się zostanie załączony Port.

'Program sprawdza więc, czy w Tabl jest taka cyfra jak w Cyfra_wzmiennej1.

'Tutaj, dla uproszczenia, do zmiennej Cyfra_wzmiennej1 załadowaliśmy cyfrę ręcznie.

'Opracował Henryk Wydmuch.

'Pamięć zajęta w 15%.

'Patrz schemat: ProgramTablica.png.

 

$regfile = "m8def.dat"                                      'Dyrektyway dla kompilatora.

 $crystal = 4000000                                         'Zastosujemy kwarc zewnętrzny 4MHz.

 Config Lcd = 16 * 2                                        'Konfiguracja Lcd.

Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.6 , E = Portd.1 , Rs = Portd.0

                                       'LCD dłączony do Portd. 2, 3, 4, 6, 1, 0.

 Config Pinc.0 = Input                                      'Pinc.0 jako wejście.

 Config Pinc.1 = Input                                      'Pinc.1 jako wejście.

 Config Keyboard = Pinc.0 , Data = Pinc.1 , Keydata = Keydata       'Keyboard=klawiatura, podłączona do Portc.0 i 1.

 

Dim Kodklaw As Byte                                         'Deklarujemy zmienną Kodklaw, tu będzie umieszczany kod naciśniętego klawisza.

                                                              '

Config Pinb.1 = Output                                      'Konfiguracja portu wykonawczego.

Set Portb.1                                                 '

Config Pinb.2 = Output                                      'Konfiguracja portu wykonawczego.

Set Portb.2                                                 '

Cls                                                         'Czyść Lcd.

 

Dim Ind As Byte , Cyfra_wzmiennej1 As Byte                  'Deklaracje zmiennych.

Dim Cyfra_wzmiennej2 As Byte , Il_dan_wtabl As Byte         '

 

Il_dan_wtabl = 5                                            'Tablica zawiera 5 danych.

 

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Do                                                          'Pętla.

 Kodklaw = Getatkbd()                                       'Odczytaj kod klawiatury (Getatkbd) i wpisz do zmiennej.

 If Kodklaw > 0 Then                                        'Jeśli pojawi się jakaś cyfra w zmiennej...

 

If Kodklaw > 31 And Kodklaw < 127 Then                      'Jeśli ta cyfra będzie większa od 31 lub mniejsza od 127...

Lcd Chr(kodklaw)                                            'Pokazuje który klawisz naciśnięto.

Cyfra_wzmiennej1 = 4                                        'Zmienna zawiera 4-kę.

Ind = Lookdown(cyfra_wzmiennej1 , Tabl , Il_dan_wtabl)      'Il_dan=ile danych jest w tablicy (podaliśmy, że 5).

Lcd "  " ; "A" ; Ind                                        'Ind = 5, na piątym miejscu Tabl.

Reset Portb.1                                               'Po naciśnięciu dowolnego klawisza załączony został Portb.1.

End If                                                      'Koniec warunku.

'Wykonaj drugą instrukcję:

   If Kodklaw = 5 Then                                      'Jeśli naciśnięto F1.

   Cyfra_wzmiennej1 = 1                                     'A w zmiennej Cyfra_wzmiennej1 znajduje się 1, to...

   Ind = Lookdown(cyfra_wzmiennej1 , Tabl , Il_dan_wtabl)   'Poszukaj w Tabl na którym miejscu jest 1.

   Lcd "B" ; Ind                                            'Ind=3, czyli na trzecim miejscu Tabl.

   If Ind = 3 Then                                          'Jeśli na trzecim, czyli 3, to...

   Reset Portb.2                                            'Załącz Portb.2.

   End If                                                   'Koniec warunku.

   End If                                                   'Koniec warunku.

 

 If Kodklaw = 127 Then                                      'Jeśli w zmiennej pojawi się nr 127 (Delete), to...

 Cls                                                        'Czyść LCD.

 End If                                                     'Koniec warunku.

 

End If                                                      'Koniec warunku (If Kodklaw > 0 Then).

Loop                                                        'Powtarzaj pętlę.

End                                                         'Koniec zawartości pętli.

 

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Tablica numerów przycisków klawiatury AT w kodzie ASCI:

  Keydata:                                                  'Podprogram tablicy.

     'Małe litery

   Data 0 , 5 , 0 , 3 , 4 , 5 , 6 , &H07 , 5 , 5 , 5 , &H0B , &H0C , 0,       ''''''''''''A

   Data 63 , 63 , 63 , 63 , 63 , 63 , 63 , 113 , 49 , 63 , 63 , 63 , 122,       ''''''''''B

   Data 115 , 97 , 119 , 50 , 63 , 63 , 99 , 120 , 100 , 101 , 52 ,       ''''''''''''''''C

   Data 51 , 63 , 63 , 32 , 118 , 102 , 116 , 114 , 53 , 63 , 63 , 110 ,       '''''''''''D

   Data 98 , 104 , 103 , 121 , 54 , 63 , 63 , 63 , 109 , 106 , 117 , 55 ,       ''''''''''E

   Data 56 , 63 , 63 , 44 , 107 , 105 , 111 , 48 , 57 , 63 , 63 , 46 , 47 ,       ''''''''F

   Data 108 , 59 , 112 , 95 , 63 , 63 , 63 , 63 , 63 , 63 , 61 , 63 , 63 , 63 ,       ''''G

   Data 63 , 13 , 63 , 63 , 124 , 63 , 63 , 63 , 63 , 63 , 63 , 63 , 63 , 63 , 63,       'H

   Data 63 , 49 , 63 , 52 , 55 , 63 , 63 , 63 , 48 , 127 , 50 , 53 , 54 , 56,       ''''''I

   Data 1 , 63 , 5 , 43 , 51 , 45 , 42 , 57 , 63 , 63       ''''''''''''''''''''''''''''''J

 

    'Duże litery

  Data 0 , 0 , 0 , 5 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0,       ''''''''''K

  Data 0 , 0 , 0 , 0 , 0 , 0 , 81 , 33 , 03 , 0 , 0 , 90 , 83 , 65,       ''''''''L

  Data 87 , 64 , 0 , 0 , 67 , 88 , 68 , 69 , 36 , 35 , 0 , 0 , 0 , 86,       '''''M

  Data 70 , 84 , 82 , 37 , 0 , 0 , 78 , 66 , 72 , 71 , 89 , 94 , 0,       ''''''''N

  Data 0 , 0 , 77 , 74 , 85 , 38 , 42 , 0 , 0 , 60 , 75 , 73 , 79,       '''''''''O

  Data 41 , 40 , 0 , 0 , 62 , 63 , 76 , 58 , 80 , 0 , 0 , 0 , 0 , 0,       '''''''P

  Data 0 , 123 , 43 , 0 , 0 , 0 , 0 , 0 , 125 , 0 , 0 , 0 , 0 , 0 , 0,       '''''Q

  Data 0 , 0 , 0 , 0 , 0 , 0 , 49 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 48,       '''''R

  Data 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0       'S

 

Tabl:

Data 123 , 22 , 1 , 60 , 4