Ko smo spoznali koncept in ukaze iz knjižnice MAX7219$SE.sub, bomo način njihove uporabe ilustrirali s pomočjo nekaj primerov. Še enkrat poudarimo, da je knjižnica napisana za generični in FC-16 modul, in ni direktno uporabljiva na ostalih izvedbah matričnih LED displejev z MAX7219 čipom (poglejte predhodno nadaljevanje). Prav tako knjižnica podpira eno ali dve vrsti z največ 16 moduli v vsaki vrsti, vendar je module nujno medsebojno povezati tako, kot je prikazano na shemah na slika 3 in 4.
Testno okolje
Programski primeri so pisani za testno okolje katerega poenostavljena shema je prikazana na sliki 5. Lahko se uporabijo MiniPin II, MegaPin, Arduino Uno ali Nano ali katera koli podobna konfiguracija. Za nekatere primere je potrebna serijska komunikacija z osebnim računalnikom, ki jo simbolizira IC2; preko USB porta testno okolje dobi tudi potrebno napajalno napetost.
Namesto 328P se lahko uporabijo tudi drugi ATmega in tudi zmogljivejši ATtiny mikrokontrolerji. Pri izboru mikrokontrolerjev je omejujoči faktor velikost SRAM-a: knjižnica “hrani” kopijo vsebine displeja v SRAM-v in bo zasedenost spomina odvisna od števila modulov v displeju. 512 B bo dovolj samo za zelo majhne displeje, zato priporočam ATmege z 1 ali 2 kB SRAM-a. Takšni mikrokontrolerji bodo imeli več kot dovolj programskega Flash spomina, katere zavzetost je odvisna od uporabljenih ukazov in fontov. Če delamo samo v grafičnem načinu, ali če v tekstualnem načinu uporabljamo samo en font, bo del programa, ki se nanaša na prikaz na displeju, manjši od 4 kB in ga bomo lahko prevedli tudi s pomočjo demo verzije Bascom-AVR programa.
Ta vsebina je samo za naročnike
Na testno okolje po sliki 5 lahko spojimo eno ali dvovrstični displej z enim do šestnajst modulov v vsaki vrstici. Da bi se delovanje testnih programov lahko bolje videlo, naj bo minimalna priporočljiva konfiguracija displeja 1×4 ali 2×4. Testne programe bomo prilagodili dimenzijam displeja z ustreznimi konfiguracijskimi ukazi.
Komunikacija z displejem se odvija preko 3-bitnega vodila z linijami DIN, CLK in CS. Te linije so v testnem okolju vezane na pine PD7, PD6 in PD5 mikrokontrolerja (na Arduino ploščici so to priključki 7, 6 in 5, na shemi so označeni z modrimi kvadratki). Mikrokontroler pošilja ukaze MAX7219 čipom po DIN liniji sinhrono s taktnimi impulzi, ki jih generira na CLK liniji. Ukazi so 16-bitni, če pa so moduli povezani (glejte slike 3 in 4), mora mikrokontroler sočasno poslati ukaze za vse module v eni vrsti. Če se v vrsti nahaja 16 modulov, bo sporočilo dolgo 16 * 16 = 256 bitov. Prvo 16-bitno sporočilo bo “prispelo” do prvega (skrajno levega) modula, zadnje se bo zadržalo na zadnjem (skrajno desnim) modulu. Ko mikrokontroler dela na 16 MHz, bo pošiljanje takšnega relativno dolgega sporočila trajalo manj od 350 µs, kar je glede na pogostost spremembe prikaza sporočilo na displeju, popolnoma zanemarljivo (hitrost komunikacije je določena s trajanjem Bascom-AVR ukaza Shiftout, sam MAX7219 dopušča tudi večje hitrosti, vse do 10 MHz).
Ko pošlje celotno sporočilo, mikrokontroler generira kratkotrajni pozitivni impulz na CS liniji; MAX7219 čipi na modulih bodo v tem trenutku sprejeli in obdelali svoj del sporočila. Če uporabljamo dvovrstični displej, mora spodnja vrstica imeti lastno 3-bitno vodilo. DIN in CLK liniji tega vodila so vezane na iste pine mikrokontrolerja, kot istoimenske linije iz “gornjega” vodila, CS linija pa se mora spojiti na novi pin mikrokontrolerja (v testnem okolju smo uporabili PD4 oziroma Arduino priključek 4). S tem smo omogočili mikrokontrolerju to, da neodvisno naslavlja gornjo ali spodnjo vrsto displeja in jima pošilja različna sporočila.
Tekstualni način dela
V tekstualnem načinu dela lahko izpišemo sporočila dolžine do 40 znakov v zgornji in spodnji vrstici displeja, z levim ali desnim poravnanjem ali pač z začetkom od katerega koli stolpca. Sporočilo, ki ga želimo prikazati na displeju, vpisujemo v string spremenljivko Max7219$text, ki je definirana znotraj knjižnice MAX7219$SE.sub in nato izberemo font, način izpisa in naslov od katerega jo želimo izpisati. Na razpolago so nam fiksni font (vsi znaki so definirani v matrici 8×5 pikslov) in proporcionalni font (odvisno od širine, so znaki definirani v matricah 8×1 do 8×5 pikslov). Po vsakem znaku se bo izpisal razmak širine enega stolpca.
Če uporabljamo levo poravnavo, se bo izpis sporočila pričel od prvega stolpca v izbrani vrsti. Če je sporočilo krajše od širine displeja, se bo preostali prostor izbrisal. Če je sporočilo daljše od širine displeja, bo konec sporočila odrezan.
Če uporabljamo desno poravnavo, se bo izpis sporočila pričel od zadnjega stolpca v izbrani vrsti. Če je sporočilo krajše od širine displeja, se bo preostali prostor izbrisal. Če je sporočilo daljše od širine displeja, bo začetek sporočila odrezan.
Če uporabljamo prikaz od adresirane lokacije, se predhodna vsebina displeja ne bo izbrisala. Če je sporočilo daljše od širine displeja, bo konec sporočila odrezan.
Sporočila, ki so daljša od širine displeja lahko prikažemo v celoti v potujočem prikazu (scroll) s pomikom v levo ali v desno in z izbrano hitrostjo pomika.
Naslavljanje displeja v tekstualnem načinu dela je prikazano na sliki 6. Zgornja vrsta displeja ima naslov 0 (ROW 0), spodnja pa 1 (ROW 1). Numeriranje kolon se prav tako prične od naslova 0 (COL 0), naslov zadnje kolone je odvisen od števila modulov v vrsti (COL 127 je zadnja kolona kadar je v vrsti 16 modulov). Primeri na sliki kažejo kateri naslov bo postavil ukaze Max7219$cls, Max7219$home in Max7219$locate v primeru enovrstičnega in dvovrstičnega displeja. Enkrat naslovljena vrstica bo ostala aktivna in vsi ukazi za izpis teksta se bodo nanašali na njo, dokler se to ne spremeni z novim naslovnim ukazom.
Vsi poskusi naslavljanja izven razpoložljivega naslovnega prostora (npr., naslavljanje druge vrste reda v enovrstičnem displeju) bo neuspešno in postavil se bo Err bit. Izjemoma bo ukaze Max7219$home_v in Max7219$home_l v enovrstičnem displeju naslavljal začetek te edine vrstice, ker je pri takem displeju gornja vrstica enaka spodnji.
Program Max7219_test1.bas
Namen programa je preverjanje ukazov za prikaz tekstualnih sporočil iz knjižnice MAX7219$SE.sub. Sporočilo, ki ga želimo izpisati, tipkamo v Terminal emulatorju osebnega računalnika, program ga bo prikazal, ko pritisnemo tipko ENTER. Način prikaza je odvisen od stanja stikal SW0-SW3:
S stikalom SW0 izberemo fiksni (zaprto stikalo) ali proporcionalni font (odprto stikalo).
S stikalom SW1 izberemo mirujoči (zaprto stikalo) ali potujoči prikaz – scroll (odprto stikalo).
S stikalom SW2 izberemo poravnavo: zaprto stikalo = levo poravnavo v mirujočem prikazu, pomik v levo v potujočem prikazu; odprto stikalo = desno poravnavo v mirnem prikazu, pomik v desno v potujočem prikazu.
S stikalom SW3 izberemo prikaz v gornji (zaprto stikalo) ali spodnji vrsti displeja (odprto stikalo).
Na samem začetku programa moramo konfigurirati displej, kar dosežemo z definiranjem vrednosti štirih konstant.
S konstanto Max7219_module izberemo tip displeja: 1 = generični modul, 2 = FC-16 modul.
S konstanto Max7219_rows definiramo število vrst (dovoljene vrednosti so 1 ali 2).
S konstanto Max7219_in_row definiramo število modulov v vsaki vrstici (1 do 16).
S konstanto Max7219_cs_pulse definiramo želeno trajanje CS impulza v mikrosekundah (10 µs bo optimalen izbor v večini primerov).
Dodeljevanje vrednosti izven dovoljenih mej bo povzročilo napako pri prevajanju programa. V našem primeru bomo spojili dvovrstični displej s po štirimi FC-16 moduli v vsaki vrstici:
Const Max7219_module = 2
Const Max7219_rows = 2
Const Max7219_in_row = 4
Const Max7219_cs_pulse = 10
Nato bomo definirali pine na katere so vezane posamezne linije vodila:
Max7219_din Alias Portd.7 ‘DIN
Max7219_clk Alias Portd.6 ‘CLK
Max7219_cs0 Alias Portd.5 ‘CS, zgornja
vrsta
Max7219_cs1 Alias Portd.4 ‘CS, spodnja
vrsta
Max7219_cs1 je potrebno definirati samo pri dvovrstičnih displejih. Sedaj lahko preberemo knjižnico:
$include “MAX7219$SE.sub”
Knjižnica bo na tem mestu definirala vse potrebne spremenljivke, konstante in bufferje (polja), katerih velikost bo proporcionalna številu modulov v displeju. Z vključitvijo knjižnice bodo v programu postale dostopne vse njene globalne spremenljivke, konstante in ukazi, vendar pa bodo sestavni del programa postali samo tisti ukazi, ki jih bomo uporabili. V program se bo avtomatično vključil samo inicializacijski podprogram, ki bo zbrisal displej in vse bufferje, postavil srednjo intenziteto osvetlitve (7/32) in na ustrezen način konfiguriral vse MAX7219 čipe.
Opomba: Knjižnica uporablja novi način definiranja podprograma (Config Submode = New) in standardni način adresiranja polja (Config Base = 1), in je to potrebno upoštevati, če se v programu uporabljajo podprogrami iz nekih drugih knjižnic ali lastni podprogrami. Če spremenite z ukazom Config Base = 0 način adresiranja polja, nekateri ukazi iz knjižnice ne bodo pravilno delali ali pa bodo povzročili napako že med prevajanjem programa!
Šele sedaj lahko definiramo uporabniške spremenljivke, v našem programu bomo potrebovali samo en pomožni bajt:
Dim Pom_byte As Byte
Pine na katere so vezana stikala SW0-SW3 bomo definirali kot vhodne,
Config Pinb.0 = Input
Portb.0 = 1
Config Pinb.1 = Input
Portb.1 = 1
Config Pinb.2 = Input
Portb.2 = 1
Config Pinb.3 = Input
Portb.3 = 1
in nato bomo vstopili v glavno zanko, v kateri pričakujemo znake, ki nam prihajajo iz terminal emulatorja:
Do
Pom_byte = Waitkey()
Če pritisnjena tipka ni bila ENTER, bomo dopisali prejeti znak v Max7219$text string in ga vrnili v terminal emulator, da bi se izpisal na zaslonu osebnega računalnika in nato čakamo novi znak:
If Pom_byte <>&H0D Then
Max7219$text = Max7219$text + Chr(Pom_byte)
Print Chr(Pom_byte);
Če je bila pritisnjena tipka ENTER, bomo prejeto sporočilo izpisali na displeju:
Else
Gosub Disp
End If
Loop
Da bi izpis prilagodili želenemu načinu moramo pred samim izpisom preveriti stanje stikal SW0-SW3. S stikalom SW3 izberemo prikaz v gornji ali spodnji vrsti displeja:
Disp:
If Pinb.3 = 0 Then
Max7219$home_v
Else
Max7219$home_l
End If
Preostala tri stikala določajo način izpisa v skladu s postavljeno nalogo. Njihova stanja bomo prebrali v pomožno spremenljivko in nato preverili vsako od osem možnih kombinacij in poklicati ustrezen podprogram.
Pom_byte = Pinb And &B00000111
Select Case Pom_byte
Kombinacije “000” in “100” bodo izpisale sporočilo s fontom fiksne širine in z levim oziroma desnim poravnanjem:
Case &B000:
Max7219$disp_f_text_l
Case &B100:
Max7219$disp_f_text_r
Kombinacije “001” in “101” bodo izpisale sporočilo s proporcionalnim fontom in z levim oziroma desnim poravnanjem:
Case &B001:
Max7219$disp_p_text_l
Case &B101:
Max7219$disp_p_text_r
Kombinacije “010” in “110” bodo izpisale sporočilo s fontom fiksne širine v potujočem prikazu s pomikom v levo oziroma v desno:
Case &B010:
Max7219$scroll_f_text_l 100
Case &B110:
Max7219$scroll_f_text_r 100
Končno kombinacije “011” in “111” bodo izpisale sporočilo s proporcionalnim fontom v potujočem prikazu s pomikom v levo oziroma v desno:
Case &B011:
Max7219$scroll_p_text_l 100
Case &B111:
Max7219$scroll_p_text_r 100
End Select
Pred vrnitvijo iz podprograma se bomo premaknili na začetek nove vrstice v terminal emulatoru in izpraznili spremenljivko Max7219$text, da bi jo pripravili za sprejem novega sporočila:
Print
Max7219$text = “”
Return
Grafični način dela
V grafičnem načinu dela lahko z ukazom Max7219$set_pix adresiramo in hkrati postavimo ali zbrišemo vsak piksel znotraj adresnega prostora displeja. Na sliki 7 zgoraj je prikazana naslovna mapa največjega podprtega displeja: gornji levi piksel ima naslov 0,0, spodnji desni 15,127. Pri manjših displejih bo naslov zgornjega levega piksla ostal 0,0, naslov spodnjega desnega bo odvisen od dimenzij displeja. “x” v ukazu Max7219$set_pix lahko ima vrednost 0 ali 1: 0 izklopi, 1 vklopi adresiran piksel (v invertiranem načinu dela je pomen ničle in enice obrnjen!).
Z ukazom Max7219$set_byte lahko adresiramo in postavimo stanje skupine 8 pikslov (slika 7 spodaj). Princip adresiranja je identičen adresiranju v tekstualnem načinu dela. Vrednost “x” je lahko v razponu &B00000000 do &B11111111, pri čemer bit x.0 ustreza “najvišjemu”, bit x.7 pa “najnižjemu” pikslu adresirane skupine. Vsi poizkusi adresiranja izven razpoložljivega adresnega prostora (npr., adresiranje druge vrste v enovrstičnem displeju) bo neuspešno in postavil se bo Err bit.
V grafičnem načinu dela, “sliko” (bolje rečeno, risbo) pripravimo v grafičnem bufferju z ukazi Max7219$set_pix in Max7219$set_byte, nato pa jo izpisujemo na displeju s pomočjo ukaza Max7219$disp_graph_buffer, oziroma ukazov Max7219$disp_graph_buffer_v ali Max7219$disp_graph_buffer_l če želimo izpisati samo zgornjo ali spodnjo polovico dvovrstičnega displeja.
Pred formiranjem slike lahko grafični buffer zbrišemo z ukazom Max7219$clear_graph_buffer. Naveden ukaz briše vsebino celotnega grafičnega bufferja; pri dvovrstičnih displejih s pomočjo ukazov Max7219$clear_graph_buffer_v in Max7219$clear_graph_buffer_l lahko selektivno zbrišemo samo tisti del grafičnega bufferja, v katerem je shranjena slika zgornje ali spodnje polovice displeja.
Tekstualni in grafični način dela nista strogo razmejena: vsak od ukazov za izpis teksta bo poleg izpisa sporočila na displeju, spremil tudi “pikselizirano” kopijo prikazanega sporočila v grafični buffer. Tako smo dobili možnost da tekstualno sporočilo dodelamo v grafičnih podrobnostih in ga ponovno prikažemo na displeju. To bo predstavljalo problem, če želimo neko sliko iz grafičnega displeja zadržati dalj časa in jo večkrat prikazovati. Takšno sliko moramo kopirati iz grafičnega bufferja Max7219$$graph_buffer() v uporabniško polje dolžine Max7219$$graph_buffer_length bajta, kot tega:
Dim Graph_buffer_copy1(max7219$$graph_
buffer_length) As Byte
Vrednost konstante Max7219$$graph_buffer_length je postavljena znotraj knjižnice v skladu s dimenzijami displeja. Zanka za reševanje vsebine grafičnega bufferja lahko izgleda tako:
Dim ii as byte
For ii = 1 to Max7219$$graph_buffer_length
Graph_buffer_copy1(ii) = Max7219$$graph_buffer(ii)
Next
Zanka za vrnitev vsebine grafičnega displeja lahko izgleda tako:
For ii = 1 to Max7219$$graph_buffer_length
Max7219$$graph_buffer(ii) = Graph_buffer_copy1(ii)
Next
Program Max7219_test2.bas
Namen programa je preverjanje grafičnih ukazov iz knjižnice MAX7219$SE.sub. Program je sestavljen iz dveh nalog: v prvi mora program risati “kačo” ki se premika od gornjega levega piksla po gornji vrsti pikslov, se obrne v zadnjem stolpcu navzdol in tako en za drugim dokler se ne izpolni celoten displej (slika 8).
Ko zapolnimo celoten displej, ga bomo na isti način tudi zbrisali. Konfiguracijski del je enak kot v tekstualnem načinu dela razen tega da bomo v tem primeru uporabljali enovrstični displej:
Const Max7219_module = 2
Const Max7219_rows = 1
Const Max7219_in_row = 4
Const Max7219_cs_pulse = 10
Max7219_din Alias Portd.7
Max7219_clk Alias Portd.6
Max7219_cs0 Alias Portd.5
$include “MAX7219$SE.sub”
Opazili boste, da pri enovrstičnem displeju ni bilo potrebno konfigurirati CS1 pina!
Najprej pokažimo, kako potegniti horizontalno linijo:
Dim Pix As Byte , Col As Byte
Dim Col_od As Byte , Col_do As Byte
For Col = Col_od To Col_do
Max7219$set_pix Pix , Col , 1
Next
Spremenljivki Pix in Col vsebujeta naslov piksla, ki ga bo ukaz Max7219$set_pix vključil, Col_od in Col_do pa določata začetek in konec linije. Ko smo v grafičnem bufferju “narisali linijo”, jo lahko prikažemo na displeju:
Max7219$disp_graph_buffer
Če želimo na displeju narisati linijo “piksel po piksel”, moramo vhodMax7219$disp_graph_buffer vključiti v zanko skupaj z ustrezno zakasnitvijo:
For Col = Col_od To Col_do
Max7219$set_pix Pix , Col , 1
Max7219$disp_graph_buffer
Waitms 25
Next
Da bi rešili zastavljeno nalogo bomo potrebovali izpis v vseh štirih smereh (v desno, dol, v levo, gor) in s spremenljivimi mejami; zaradi tega smo poleg Col_od in Col_do morali dodati še dve mejni spremenljivki: Pix_od in Pix_do. Izpis smo preverili v podprogramu Disp_frame. Najprej bomo povlekli linijo v desno
Disp_frame:
For Col = Col_od To Col_do
Max7219$set_pix Pix_od , Col , Pix01
Max7219$disp_graph_buffer
Waitms 25
Next
nato dol
For Pix = Pix_od To Pix_do
Max7219$set_pix Pix , Col_do , Pix01
Max7219$disp_graph_buffer
Waitms 25
Next
po spodnji vrsti pikslov v levo
For Col = Col_do To Col_od Step -1
Max7219$set_pix Pix_do , Col , Pix01
Max7219$disp_graph_buffer
Waitms 25
Next
in na koncu navzgor:
For Pix = Pix_do To Pix_od Step -1
Max7219$set_pix Pix , Col_od , Pix01
Max7219$disp_graph_buffer
Waitms 25
Next
Return
Da bi vse delalo kakor je zamišljeno bomo v glavnem programu v zanki nastavljali mejne vrednosti in nato poklicali Disp_frame:
Do
Col_od = 0
Col_do = Max7219$$disp_buffer_length – 1
Pix01 = 1
For Pix_od = 0 To 3
Pix_do = Max_pix – Pix_od
Gosub Disp_frame
Incr Col_od
Decr Col_do
Next
Če v spremenljivko Pix01 vpišemo 0, bomo na isti način tudi zbrisali displej. Po brisanju kače bomo program malo “začinili”: v trajanju 10 sekund bomo naključno vklapljali in izklapljali piksle in tako dobili efekt “zvezdnega neba”. Naslov piksla bomo definirali s pomočjo funkcije Rnd():
Dim Rand_num As Word , Rand_cnt As Word
For Rand_cnt = 1 To 1000
Rand_num = Rnd(9999)
Col = Rand_num And &B00011111
Rand_num = Rnd(9999)
Pix = Rand_num And &B00000111
Vrednost piksla bomo tudi vzeli iz naključno generiranega števila
Pix01 = Rand_num.3
nato bomo postavili ali zbrisali adresirani piksel in se zavrteli v zanki:
Max7219$set_pix Pix , Col , Pix01
Max7219$disp_graph_buffer
Waitms 10
Next
Po 1000 izvršitvah bomo zbrisali grafični buffer da bi lahko ponovno pričeli izpisovati kačo:
Max7219$clear_graph_buffer
Loop
Kombinirani način dela – program Max7219_test3.bas
Na koncu bomo pokazali kako lahko kombiniramo tekstualni in grafični način dela. Na enovrstičnem displeju želimo prikazati sporočilo kot to:
Za njo nam bo dovolj enovrstični displej s štirimi MAX7219 moduli, kot smo uporabili v predhodnem primeru, zato ga bomo tudi konfigurirali na isti način:
Const Max7219_module = 2
Const Max7219_rows = 1
Const Max7219_in_row = 4
Const Max7219_cs_pulse = 10
Max7219_din Alias Portd.7
Max7219_clk Alias Portd.6
Max7219_cs0 Alias Portd.5
$include “MAX7219$SE.sub”
Smejka bomo definirali v matrici velikosti 8×8 pikslov, v kateri ne bo lahko biti ravno kreativen (slika 9 zgoraj). Zato sta tudi predvidena dva, eden z odprtimi in drugi z zaprtimi očmi, in bomo grob izgled lahko poboljšali z animacijo, v kateri nam Smejko mežika.
Obe definiciji bomo shranili v tabele na koncu programa; v prvi so oči odprte
Smiley_8x8:
Data &B00111110
Data &B01000001
Data &B10010101
Data &B10100001
Data &B10100001
Data &B10010101
Data &B01000001
Data &B00111110
v drugi so “oči” v tretji in šesti vrstici zaprte
Smiley_8x8_wink:
Data &B00111110
Data &B01000001
Data &B10010001
Data &B10100001
Data &B10100001
Data &B10010001
Data &B01000001
Data &B00111110
Formiranje slike naredimo v podprogramu Disp_8x8_sketch tako da ukaza Read in Max7219$set_byte izmenično, byte po byte, prejemamo “risbo” iz tabele in jo prenašamo v grafični buffer. Za adresiranje uporabljamo spremenljivke Max7219$$row in Max7219$$col iz knjižnice:
Disp_8x8_sketch:
Dim I_8x8 As Byte , 8pix As Byte
For I_8x8 = 0 To 7
Read 8pix
Max7219$set_byte Max7219$$row , Max7219$$col , 8pix
Incr Max7219$$col
Next
Return
Vrnimo se v glavni program! Najprej bomo zbrisali tekst buffer in namestili tekst “SE” točno v sredino, od kolone 11:
Max7219$clear_text_buffer
Max7219$locate 0 , 11
Max7219$text = “SE”
Max7219$disp_p_text
Wait 1
Nato bomo adresirali začetek displeja, kjer želimo prikazati levega Smejka
Max7219$locate 0 , 0
pozicionirali na tabelo v kateri je Smejko definiran in poklicali prej opisani podprogram za formiranje slike:
Restore Smiley_8x8
Gosub Disp_8x8_sketch
Končno bomo sliko, formirano v grafičnem bufferju, skupaj s tekstom, ki se v obliki pikslov tudi nahaja v istem bufferju, prikazali na displeju:
Max7219$disp_graph_buffer
“Mežikajočega” Smejka bomo prikazali na desnem koncu displeja, tako bomo v zanki izmenično prikazovali risbo z odprtimi in zaprtimi očmi:
Wink_smiley:
Max7219$locate 0 , 24
Restore Smiley_8x8
Gosub Disp_8x8_sketch
Max7219$disp_graph_buffer
Waitms 250
Max7219$locate 0 , 24
Restore Smiley_8x8_wink
Gosub Disp_8x8_sketch
Max7219$disp_graph_buffer
Waitms 250
Goto Wink_smiley
Na sliki 9 spodaj je prikazana risba Smejka v matrici velikosti 16×16 pikslov, primeren za prikaz na dvovrstičnih displejih. Princip prikaza je identičen primeru, ki smo ga analizirali, tabelo Smiley_16x16 in podprogram Disp_16x16_sketch poiščite v programu Max7219_test3.bas.
Opombe
V članku so analizirani samo deli programa ki se nanašajo na ukaze iz knjižnice; za popolno razumevanje dela je potrebno pogledati celotne programe.
Knjižnico TM1638$SE.sub in vse testne programe lahko brezplačno dobite v uredništvu revije Svet elektronike.
Avtor: mag. Vladimir Mitrović
Mitrovic_MAX7219_test