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.
Obr. 1: Realizace úlohy
Obr. 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.