Finalmente, dopo tanto gingillarmi con il primo display grafico 128x64 in mio possesso (lo so, altri sono già agli OLED e oltre), mi sono deciso a farne qualcosa di serio perche avevo bisogno di un display con interfaccia seriale.
La libreria, e i programmi di prova, sono interamente scritti in Assembler per i micro della famiglia PIC18 di Microchip.
Per mia (s)comodità ho voluto separare in 2 moduli la libreria, con alcuni file ausiliari a corredo:
Il modulo MFB contiene le routine 'private' di utilità, quali le funzioni di conversione binario->decimale e binario->esadecimale, oltre alla tabella
del font standard 5x7.
Il modulo MIC incorpora alcune funzioni di supporto diagnostico (es. dump memoria e comandi al PC).
Il file esterno GLCD.h descrive l'assegnazione dei pin utilizzati dalla libreria.
MFB espone, in questa versione, 19 funzioni base e 11 parametri di comunicazione dati dal modulo MIC.
I comandi seriali dal PC sono composti da 1 o 2 lettere identificative della funzione e da 0 a 4 parametri [valore da 0 a 255]
separati da virgole. Es. 'BF5,5,20,30'.
Le lettere dei comandi possono essere minuscole o maiuscole; non devono esserci spazi nella stringa.
La stringa deve essere terminata da un carattere 'CR' (decimale=13, esadecimale=0D), senza 'LF' .
| Comando | Descrizione | Esempio |
| A |
AT Posiziona il cursore di testo alle coordinate dei primi 2 parametri |
A5,10 |
| B BF |
BOX disegna un rettangolo alle coordinate X0,Y0,X1,Y1 contenute nell'ordine nei 4 parametri forniti BOXFILL come sopra, con riempimento |
B10,11,12,13 BF10,11,12,13 |
| C CI |
CLEAR Cancella il display col colore di sfondo CLEAR INV Cancella il display col colore di disegno |
C CI |
| D |
DOWNLOAD Scarica un'immagine di sfondo da PC (1024 bytes) |
D |
| F |
FILL Carica un'immagine di sfondo esistente in memoria ROM (1024 bytes) |
F |
| H HC |
HOME Muove il cursore all'inizio riga specificata nel primo parametro (1..8) HOME CLEAR Come sopra, ma cancella inoltre la riga usando il 2° parametro fornito |
H5 H3,127 |
| L |
LINE Disegna una linea dal punto X0,Y0 al punto X1,Y2 (*) |
L10,15,50,20 |
| M |
MODE Predispone il modo di disegno normale (0), Negativo (1), Inverso (2) o entrambi (3) |
M3 |
| P PG |
POINT Disegna un punto alle coordinate X0,Y0 POINT GET Ritorna nel parametro comune gPixel lo stato spento acceso (0/1) del punto |
P15,30 PG40,10 |
| TM |
TEST Test di funzionamento che disegna alcuni elementi sul display |
T |
| W |
WRITE MSG Scrive uno degli 8 (1..8) messaggi configurati in ROM (lunghezza max 20 car) |
W4 |
| " |
FREE TEXT Scrive i caratteri inviati dalla seriale compresi tra una coppia di virgolette Gestisce i 'ritorni a capo'. |
"pippo" |
(*) Il sw riconosce se la linea è orizzontale o verticale, nel qual caso esegue un codice diverso e più veloce, altrimenti utilizza l'algoritmo Breshenam per linee con altre inclinazioni. NOTA: l'attuale implementazione è 'bacata' e con certi parametri va in tilt.
| Funzione | Descrizione |
| GLinit | Inizializza la libreria e il display grafico. Obbligatoria, deve essere la prima funzione chiamata. |
| GLout | Inserisce il valore contenuto dell'accumulatore WREG alla RAM del display (**). Non modifica il valore di WREG |
| GLcmdout | Invia il comando contenuto dell'accumulatore WREG al display. Non modifica il valore di WREG |
| GLin | Recupera dalla RAM del display il contenuto della locazione corrente (**). Il valore letto è posto nella variabile locale lByteRead e contentenuto in WREG al ritorno |
| GLclear | Cancella l'intero display usando il valore contenuto nella variabile globale gPad |
| GLmode | Predispone il modo di rappresentazione grafica in base al valore della variabile globale gMode |
| Funzione | Descrizione |
| GLhome | Porta il cursore di testo a inizio pagine (alto-sinistra), senza cancellare il contenuto |
| GLsetcursor | Predispone la posizione del cursore di testo alle locazioni globali gTextX e gTextY [1..20, 1..8] |
| GLlinehome | Porta il cursore di testo all'inizio della riga contenuta in WREG |
| GLlineclear | Cancella, usando il valore di gPad, la riga contenuta in WREG e porta il cursore a inizio riga |
| GLwrite | Scrive il carattere contenuto in WREG |
| GLstring | Scrive una stringa di testo contenuta nella ROM; l'indice dele messaggio [1..8] è contenuto nella variabile gMsg |
| Funzione | Descrizione |
| GLdrawpixel | Disegna un punto alle coordinate contenute in gPixX e gPixY, secondo le modalità impostate con gMode |
| GLgetpixel | Recupera il valore di un pixel alle coordinate contenute in gPixX e gPixY. Il valore letto è posto in gPixel [0=spento, 1=acceso] |
| GLline | Disegna un linea tra i punti P0 [gPixX,gPixY] e P1 [gPixX2,gPixY2]. La procedura analizza i valori dei 4 parametri e determina se utilizzare l'algoritmo generico di disegno (Breshenam) oppure le routine specializzate Hline e Vline, precise e molto più veloci. |
| GLbox | Disegna un rettangolo vuoto tra i punti P0 [gPixX,gPixY] e P1 [gPixX2,gPixY2]. |
| GLboxfill | Disegna un rettangolo pieno tra i punti P0 gPixX,gPixY] e P1 [gPixX2,gPixY2]. |
| GLdownload | Riceve dall'interfaccia seriale un'immagine di sfondo (1024 bytes) |
| GLload | Carica dalla memoria ROM un'immagine compilata |
(**) il controller grafico avanza automaticamente la locazione corrente dopo ogni scrittura o lettura della RAM.
Questo costringe ogni volta a ripredisporre la locazione attuale nei casi di lettura-modifica-scrittura.
| Funzione | Descrizione |
| gTextX | Coordinata orizzontale del cursore di testo [1..20] |
| gTextY | Coordinata verticale del cursore di testo [1..8] |
| gPixX | Coordinata orizzontale del cursore grafico P0 [0..127] |
| gPixY | Coordinata verticale del cursore grafico P0 [0..63] |
| gPixX2 | Coordinata orizzontale del cursore grafico P1 [0..127] |
| gPixY2 | Coordinata verticale del cursore grafico P1 [0..63] |
| gPixel | Ritorna il valore letto dalla memorai RAM del display alle coordinate correnti [0=spento, 1=acceso] |
| gPad | Valore utilizzato per il riempimento durante la cancellazione. Default =0. Se gPad=255 il display viene cancellato in negativo. Altri valori danno risultati particolari |
| gMode | Modalità di rappresentazione (testo e grafica): 0=normale, 1=negativo,2=invertito, 3=negativo+invertito |
| gMsg | Indice del messaggio di testo memeorizzato in ROM {1..8} |
| gSignal | 8 bit di segnalazione (flags) per comunicazioni aggiuntive tra MIC e MFB (al momento usato il 1° bit per comunicare l'inizio di un Download. |
Le funzionalità che mi piacerebbe implementare, tempo e capacità permettendo: