Maticový LED zobrazovač a jeho řízení

Maticový LED zobrazovač a jeho řízení

     Maticový LED zobrazovač má vytvořenu soustavu bodů z LED diod uspořádaných do mřížky (matice). Mřížka je rozdělena na sloupce a řádky, které lze nezávisle na sobě ovládat. Potřebujeme-li zobrazit (rozsvítit) určitý bod, je nutné vybrat správný sloupec a správný řádek. V našem maticovém LED zobrazovači bude svítit ta dioda, která má na sloupci a na řádku nastavenou z mikropočítače Log0. Při chodu programu je z mikropočítače přes tranzistor PNP připojeno na všechny LED daného n-tého sloupce kladné napětí a současně je na katody LED (řádky) přivedena Log0 pro ty diody, které mají svítit. Postupným rychlým přepínáním sloupců (multiplexním buzením) dosáhneme požadovaného obrazce, nebo znaku na celém zobrazovači.                 

obrazekObr. 1: Realizace úlohy

 

obrazekObr. 2: Schéma zapojení maticového LED zobrazovače

     Činnost maticového LED zobrazovače si můžeme ověřit následujícím programem, který zobrazuje animaci různě velkých čtverců, od 8x8 bodů až po 2x2 body.

Rezistory vedoucí do bází tranzistorů pro řízení sloupců jsou zapojeny na port D, katody LED diod pro zapínání řádků jsou připojeny na port C a na dva bity portu B. Výhodné je sloupce i řádky si očíslovat a první sloupec připojit na 0-tý bit a tak postupně další sloupce, to stejné u řádků.

V programu se nově naučíme používat příkaz cyklu For – Next, který se velmi často používá pro opakující se činnosti, v našem případě k nastavení doby svícení jednoho obrazce při multiplexním řízení jednotlivých sloupců celého maticového zobrazovače. Při ověřování programu si můžete vyzkoušet vliv změny proměnných „Cykly“ a „Svit“ na výsledný postup animace.

’-------------------------------------------------------------------------------------

’ POLE_CTVERCE-1.bas Ukázka ovládání maticového disleje z LED.

’-------------------------------------------------------------------------------------

$regfile = “m8def.dat”                                    ‘Soubor s deklaracemi

$crystal = 12000000                                      ‘Kmitočet oscilátoru v Hz

Config Portd = Output                                    ‘celý port D bude sloužit pro řízení sloupců

Config Portc = Output                                    ‘port C a port B (2bity) pro řízení řádků

Config Portb.0 = Output

Config Portb.1 = Output

Config Portb.2 = Input                                    ‘PB2 vstup pro tlačítko

Portb.2 = 1

Dim Svit As Word , Pocet As Word , Cykly As Word                ‘definování proměnných

Svit = 250

Cykly = 250

Sloupec Alias Portd                                        ‘přezdívka pro port D - sloupce

’-----------------------  HLAVNI PROGRAM  -------------------------------------

Do                                                                   ‘začátek smyčky Do-Loop

Nejvetsi:                                                          ‘největší čtverec 8x8

For Pocet = 1 To Cykly                                   ‘cyklem For se nastavuje doba svícení čtverce

Portb.0 = 0                                                      ‘zápis do všech řádků 1.sloupce

Portb.1 = 0

Portc = &B0000000

Sloupec = &B11111110                                  ‘zapnutí 1.sloupce

Waitus Svit

Portb.0 = 0                                                     ‘zápis do všech řádků 2.sloupce

Portb.1 = 1

Portc = &B1011111

Sloupec = &B11111101                                  ‘zapnutí 2.sloupce

Waitus Svit

Portb.0 = 0                                                      ‘zápis do všech řádků 3.sloupce

Portb.1 = 1

Portc = &B1011111

Sloupec = &B11111011                                  ‘zapnutí 3.sloupce

Waitus Svit

Portb.0 = 0                                                     ‘zápis do všech řádků 4.sloupce

Portb.1 = 1

Portc = &B1011111

Sloupec = &B11110111                                 ‘zapnutí 4.sloupce

Waitus Svit

Portb.0 = 0                                                    ‘zápis do všech řádků 5.sloupce

Portb.1 = 1

Portc = &B1011111

Sloupec = &B11101111                                ‘zapnutí 5.sloupce

Waitus Svit

Portb.0 = 0                                                    ‘zápis do všech řádků 6.sloupce

Portb.1 = 1

Portc = &B1011111

Sloupec = &B11011111                               ‘zapnutí 6.sloupce

Waitus Svit

Portb.0 = 0                                                  ‘zápis do všech řádků 7.sloupce

Portb.1 = 1

Portc = &B1011111

Sloupec = &B10111111                              ‘zapnutí 7.sloupce

Waitus Svit

Portb.0 = 0                                                  ‘zápis do všech řádků 8.sloupce

Portb.1 = 0

Portc = &B1000000

Sloupec = &B01111111                             ‘zapnutí 8.sloupce

Waitus Svit

Next

Mensi1:                                                      ‘čtverec 6x6

For Pocet = 1 To Cykly

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B11111110

Waitus Svit

Portb.0 = 1

Portb.1 = 0

Portc = &B1100000

Sloupec = &B11111101

Waitus Svit

Portb.0 = 1

Portb.1 = 0

Portc = &B1101111

Sloupec = &B11111011

Waitus Svit

Portb.0 = 1

Portb.1 = 0

Portc = &B1101111

Sloupec = &B11110111

Waitus Svit

Portb.0 = 1

Portb.1 = 0

Portc = &B1101111

Sloupec = &B11101111

Waitus Svit

Portb.0 = 1

Portb.1 = 0

Portc = &B1101111

Sloupec = &B11011111

Waitus Svit

Portb.0 = 1

Portb.1 = 0

Portc = &B1100000

Sloupec = &B10111111

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B01111111

Waitus Svit

Next

Mensi2:                                                                    ‘čtverec 4x4

For Pocet = 1 To Cykly

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B11111110

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B11111101

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1110000

Sloupec = &B11111011

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1110110

Sloupec = &B11110111

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1110110

Sloupec = &B11101111

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1110000

Sloupec = &B11011111

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B10111111

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B01111111

Waitus Svit

Next

Mensi3:                                                           ‘čtverec 2x2

For Pocet = 1 To Cykly

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B11111110

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B11111101

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B11111011

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B11111001

Sloupec = &B11110111

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1111001

Sloupec = &B11101111

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B11011111

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B10111111

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B01111111

Waitus Svit

Next

Mensi4:                                                                      ‘zhasnutí všech bodů

For Pocet = 1 To Cykly

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B11111110

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B11111101

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B11111011

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B11111111

Sloupec = &B11110111

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B11111111

Sloupec = &B11101111

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B11011111

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B10111111

Waitus Svit

Portb.0 = 1

Portb.1 = 1

Portc = &B1111111

Sloupec = &B01111111

Waitus Svit

Next

Loop

’--------------------------  KONEC HLAVNIHO PROGRAMU  -------------------------------------------------

End

‘Maticový displej z LED je rozdělen na 8 řádků a 8 sloupců. (2 řádky a 2 sloupce nejsou využité.)

‘Dioda LED na příslušném řádku a v příslušném sloupci svítí, když je v řádku i sloupci

‘současně Log úroveň 0. Zapíšeme-li do proměnné, která odpovídá řádkům na příslušné bity

‘hodnotu Log0 a zapíšeme Log0 na pozici bitu odpovídajícímu příslušnému sloupci,

‘budou svítit LED, které měly v proměnné pro řádky zapsanou Log0.

‘U proměnných je bit s nejnižším pořadovým číslem (váhou) vpravo!

Doporučení:

     Pokud se vám podařilo ověřit funkci prvního programu pro řízení maticového displeje, můžete si do programu zařadit funkci tlačítka pro spuštění animace nebo doplnit tzv. zatemnění přechodů, kdy se při přechodu z jednoho obrazce do druhého na krátkou dobu (cca 200 us) LED zhasnou a tím se zabrání tzv. "duchům".  Pak už si můžete vymýšlet znaky a animace podle vlastních představ a fantazie.

Zdroje

Obrázky: 

  • Obr. 1, 2: Archiv autora.
Přílohy
POLE_ CTVERCE-1-program.zip Stáhnout
Procvič si

Podle vzorového programu zkus vytvořit vlastní animace například:

  • funkci přesýpacích hodin
  • zobrazování písmen a textu