5. decembra, 2021

Izpis posebnih znakov na Nokia 3310 LCD-ju

Slike LOGOTIPI Svet elektronike color 300x92 - Izpis posebnih znakov na Nokia 3310 LCD-juKot omenjeno v članku on Nokia 3310 LCD modulu, je na tem LCD-ju možno izpisovati posebne znake, ki jih je potrebno izpisovati z malce posebno tehniko. V tem članku si bomo pogledali, kako.

AX elektronika d.o.o.
Avtor: Jurij Mikeln
E-pošta: stik@svet-el.si
2021-302-50

Nokia 3310 je cenovno ugoden monokromatski grafični LCD, na katerem lahko prikazujemo marsikaj, kot smo pokazali v članku o LCD modulu. Tokrat se bomo orientirali na prikaz posebnih znakov, kot je prikazano na sliki 1.

Prikaz posebnih znakov, kot je narisan simbol ključavnice na skrajni desni, zapišemo v subrutini, ki jo kličemo iz glavnega programa.

Subrutina za simbol zaklenjene ključavnice izgleda takole:

Lockicon:
Glcdcmd 32 ‘normalen ukaz
Glcdcmd 207 ‘x pointer (128+stolpec) kjer
je stolpec=0-83
Glcdcmd 69 ‘ypointer (64+vrstica) kjer je
vrstica=0-5
Glcddata 126 ‘8-bit vertikalni stolpec
podatkov za simbol
Glcddata 121
Glcddata 73
Glcddata 121
Glcddata 126
Glcddata 0
Return

S prvim ukazom nastavimo direktni način izpisa na zaslon. Ker imamo 84 stolpcev po x-osi označenih od 0-83, se številka, kjer bi želeli narisati nek simbol, prišteje številki 128, kot je napisano pri komentarju drugega ukaza.
Če bi šteli pikice (verjamem, da jih ne boste) od leve proti desni, bi prvi stolpec simbola za zaklenjeno ključavnico bil ravno na 79-tem mestu. Lahko pa preštejete stolpce od desne proti levi, pa boste videli, da se simbol prične ravno na 79. mestu.

Torej s prvim ukazom določimo X koordinato, kjer bomo pisali na zaslon. Z naslednjimi ukazi bomo določili, kaj naj se izpisuje v 8-bitih na lokacijah od 79 naprej.

Pojdimo lepo po vrsti. Na prvi lokaciji na sliki vidite, da je prvi kvadratek prazen, nato je 6 kvadratkov počrnjenih in zadnji kvadratek je spet prazen. To tudi lepo ustreza binarni vrednosti številke 126: 0111 1110.

Če še ni jasno, poglejmo drugi ukaz Glcddata 121: binarna vrednost številke 121= 0111 1001. Vidite, da je prvi kvadratek prazen, nato sledijo štirje polni, dva prazna in en poln. Opazili boste tudi to, da je zadnji – polni kvadratek na vrhu – mogoče je kdo mislil, da je najvišji bit (MSB) tudi na vrhu znaka, pa ni tako.

Če še ni jasno, kako izpisujemo znak, si poglejmo naslednji ukaz: Glcddata 73

Tudi tukaj moramo pretvoriti 73 v binarno vrednost: 0100 1001. Vidimo, da je »luknja za ključavnico« v 5. in 6. bitu, ki sta vrednosti 0. Da ne bomo predolgi: skratka MSB bit v Y koordinatni osi se nahaja spodaj, LSB bit pa se nahaja zgoraj v vrstici zaslona.

Na ta način lahko izrišemo kateri koli simbol, ki je lahko poljubno dolg v desno stran zaslona. Tako boste na sliki 1 videli znak ∆ f. Iz programa vidimo, da znak zavzema kar 12 mest:

riticon:
glcdcmd 32 ‘normal command
glcdcmd 183 ‘x pointer (128+column) where
column=0-83
glcdcmd 68 ‘ypointer (64+row) where
row=0-5
glcddata 64 ‘8-bit vertical column
symbol data
glcddata 112
glcddata 124
glcddata 127
glcddata 124
glcddata 112
glcddata 64
glcddata 8
glcddata 126
glcddata 9
glcddata 2
glcddata 0
Return

Kaj še lahko prikazujemo?
Glede na povedano, da lahko prikazujemo praktično neomejeno dolg znak v desno (ali levo, kakor gledamo), si poglejmo primer »Bargraf« prikaza. Namreč zamislimo si primer prikaza recimo napetosti. Višja, kot je napetost, daljši bo bargraf prikaz (in seveda obratno). Na našem Nokia 3310 LCD modulu bomo napetost »simulirali« z vrtenjem enkoderja v levo/desno in zmanjševali/večali neko spremenljivko, katere vrednost bomo prikazali v bargraf vrsti prikaza.

To bomo prikazovali v subrutini Signal:

Glcdcmd 32 ‘normal command
Glcdcmd 134 ‘x pointer (128+column) where
column=0-83
Glcdcmd 69 ‘ypointer (64+row) where
row=0-5
For Temp = 1 To Pulses
Glcddata 112
Next

Na »prvo žogo« je prikaz takšen, kot smo ga prikazali. Spremenljivka z imenom Pulses se spreminja od 0 do 255 (vrste Byte). S prvimi tremi ukazi določimo, od kje do kje se bo prikazoval bargraf. Z ukazom Glcdcmd 134 določimo, da se bo bargraf pričel prikazovati od 6. stolpca naprej. Z ukazom Glcdcmd 69 pa določimo, da se bo bargraf prikazoval v zadnji – 6 vrstici na LCD-ju.

Če boste za prikaz svojega bragraf prikaza uporabili zgornjih nekaj vrstic programa, boste hitro ugotovili, da nekaj manjka. Bargraf se bo lepo izrisoval, ko bomo povečevali vrednost spremenljivke Pulses, nič pa se ne bo zgodilo, ko bomo spremenljivko pričeli zmanjševati. Opazili boste, da se bargraf ne zmanjšuje, ampak ostaja na istem mestu. Zato je potrebno dodati še nekaj vrstic programa, ki bo ustrezno »brisal« bargraf, ko se vrednost spremenljivke Pulses zmanjšuje. To naredimo z naslednjimi ukazi znotraj iste subrutine:

If Pulses < 70 Then
For Temp = Pulses To 70
Glcddata 0
Next
End If

Zdaj se bo bargraf tudi zmanjševal ob zmanjševanju spremenljivke Pulses. Na sliki 2 vidimo izgled bargraf izpisa spodaj na LCD-ju.

No seveda pa bi si želeli več od bargraf izpisa – recimo vsaj to, da na deseticah vrednosti spremenljivke narišemo malce višjo črtico, da bomo vedeli, kje je njena vrednost 10, 20, 30 itd.. S tem izpisom se bo potrebno malce »poigrati«, saj potrebno poskrbeti za to, da se prikaže samo ena črtica pri 10, 20 itd, ne pa, da imamo od 10 naprej prikazan debelejši bargraf.

To naredimo z naslednjim programskim izsekom:

For Temp = 1 To Pulses
Glcddata 112
Select Case Temp ‘prikaz desetic z visjo crtico
Case 10 : Glcddata 127
Case 20 : Glcddata 127
Case 30 : Glcddata 127
Case 40 : Glcddata 127
Case 50 : Glcddata 127
Case 60 : Glcddata 127
End Select
Next

S pomočjo Select Case ukazov zdaj določimo, kje se bo prikazala tanka črta preko cele vrstice. Tam, kjer pa ne želimo visoke črte se pač prikazuje bargraf enake višine, to je 3 piksle, kot to določa ukaz Glcddata 112 (112= 0111 0000).

Prikaz takega izpisa vidimo na sliki 3.

Seveda bargraf prikaz s tem še ni popoln. Želeli bi si tudi izpis številk vrednosti, ki se nam izpisujejo. To naredimo z dodatnim ukazom Select Casev Do-Loop zanki, kjer dodamo ta del programa:

Setfont Font5x5
Select Case Pulses
Case 1 To 9 : Lcdat 5 , 1 , “” , C0
Case 10 To 19 : Lcdat 5 , 1 , ” 10 ” , C0
Case 20 To 29 : Lcdat 5 , 1 , ” 10 20 ” , C0
Case 30 To 39 : Lcdat 5 , 1 , ” 10 20 30 ” , C0
End Select

Tako, zdaj smo praktično dosegli to, kar smo želeli. Izpis sicer še ima svoje pomanjkljivosti. Na sliki 4 vidite, da so številke 10, 20 preveč zamaknjene; 10 se ne nahaja točno nad črtico, 20 je že bližje nad črtico itd.. Jih pač prikazujemo z ukazom Lcdat, ki nima možnosti premikati prikaza karakterjev poljubno po zaslonu. V tem primeru bi bilo potrebno številke izpisovati kot znake, kot smo to opisovali v tem članku, vendar to presega okvir tega članka. Samo za zgled sem prikazal izpis številke 50, ki ga vidite na sliki 5 zgoraj levo. Tako narejene številke lahko postavimo na točno določeno mesto na zaslonu brez prevelikega razmaka med številkami.

Primer programa za izpis številk 5 in 0 je spodaj:

Stev_5:
Glcdcmd 32 ‘normalen ukaz
Glcdcmd 130 ‘x pointer (128+stolpec) kjer
je stolpec=0-83
Glcdcmd 64 ‘ypointer (64+vrstica) kjer je
vrstica=0-5
Glcddata &B01011100
Glcddata &B01010100
Glcddata &B01010100
Glcddata &B01110100
Return

Stev_0:
Glcdcmd 32 ‘normalen ukaz
Glcdcmd 135 ‘x pointer (128+stolpec) kjer
je stolpec=0-83
Glcdcmd 64 ‘ypointer (64+vrstica) kjer je
vrstica=0-5
Glcddata &B00111000
Glcddata &B01000100
Glcddata &B01000100
Glcddata &B00111000
Return

Kar je še potrebno dodati programu, sta v Do-loop zanki dodana dva klica subrutin 5 in 0:

Gosub Stev_5
Gosub Stev_0

Zaključek
Tako, izpis na Nokia 3310 LCD-ju je lahko prav zabaven. Lahko izpisujemo različno velike črke, številke, tudi grafiko (kar smo pokazali v preteklih člankih), lahko pa izpisujemo tudi posebne znake, ki jih ni v naboru neke abecede. Lahko si narišemo nek svoj znak za neko našo aplikacijo. Skratka možnosti je veliko. Želim vam uspešno prikazovanje na Nokia 3310 LCD zaslonu.

https://svet-el.si