ESERCITAZIONE # 12b
I file:
- LCDuni_comset.def
- LCDuni_macros.asm
- LCDuni8s_18F.asm
- LCDcharlib18.def
non richiedono modifiche e possono essere lasciati nella cartella originale
del package: basta che nel sorgente siano indicati i corretti path di accesso.
LCDuni_comset.def contiene le definizioni dei
comandi standard dei controller HD44780 compatibili. Questo file non va
modificato.
Non va modificato anche il file LCDuni_macros.asm
, che contiene le macro utilizzate dal driver. Sono
disponibili varie macro per facilitare l' uso dei comandi del controller.
Macro |
Funzione |
SETTABLE xxx |
Setta i pointer TBLPTR per l' accesso alla tabella xxx |
LCDCHAR 'x' |
Invia al display il carattere 'x' |
LCDCMD xxx |
Invia al display il comando x |
LCDDDAdr xxx |
Punta l' indirizzo xxx in DDRAM |
LCDCGAdr xx |
Punta l' indirizzo xx in CGRAM |
LCDCLR |
Cancella il display senza spostare il cursore |
LCDHOME |
Cancella il display e porta il cursore all' home |
LCDCURRIGHT |
Sposta il cursore di una posizione a destra |
LCDCURLEFT |
Sposta il cursore di una posizione a sinistra |
LCDCUROFF |
Rende il cursore invisibile |
LCDCURON |
Rende visibile il cursore |
LCDCURONB |
Rende visibile il cursore in modo lampeggiante |
LCDBCKSP |
Un backspace (una posizione a sinistra e cancella) |
LCDLINE x |
Porta il cursore all' inizio della linea x |
LCDLPOS x, yy macro |
Porta il cursore alla posizione yy della riga x |
**LCDCGRAMCHAR aa, ccc |
Invia alla locazione aa
di CGRAM il carattere della tabella ccc.
Ogni
carattere è composto da 8 bytes |
**LCDOutsrt
xxx,tt |
Invia una stringa xxx al display, La stringa è
chiusa da 0x00.
La stringa si trova in una qualunque posizione in memoria
programma.
Il valore tt stabilisce una cadenza tra carattere e carattere. Se
0 non c'è
ritardo.
Es.: LCDOutsrt
STRNG_1, 50 invia
al display la stringa STRNG_1 con
cadenza 50*5ms tra i caratteri |
**LCDstring
'sting',ee,tt |
Invia una stringa ‘string’ al display.
La stringa fa parte della dichiarazione della macro.
Il valore ee indica la lunghezza della stringa di caratteri che
verranno inviati al display.
Il valore tt stabilisce una cadenza tra carattere e carattere
pari a tt x 5 ms.
Se 0 non c'è ritardo.
Es.: LCDstring 'Messaggio', 9, 0 invia al display la stringa in
oggetto, di 9 caratteri, senza temporizzazioni
|
** indica macro che saranno compilate solo per LCDSHORTDRIVE = 0
.
Le macro, una volta dichiarate, saranno richiamabili a piacere durante lo
svolgimento del programma che fa uso di questo driver. Si ricorda che le macro vengono compilate dall' Assembler, ma
non occupano
spazio in memoria programma fino a che non sono richiamate.
Può essere interessante considerare il fatto che alcune macro determinano
un messaggio di errore se i parametri passati sono al di fuori del range
previsto. Ad esempio. la macro che sposta il cursore all' inizio di una
specifica linea, determina un errore se il numero di linea indicato supera
quelli stabiliti dal modello locale per quel determinato modulo LCD.
;*************************************************************
; LCDLINE - Call a specified beginning of line
; Es.: LCDLINE 3 move cursor to the beginning of line 3
;*************************************************************
LCDLINE macro line_num
#if (line_num == 1)
LCDDDADR LCDL1
; first line
#else
#if (line_num == 2)
LCDDDADR LCDL2
; second line
#else
#if (line_num == 3)
LCDDDADR LCDL3
; third line
#else
#if (line_num == 4)
LCDDDADR LCDL4
; fourth line
#else
ERROR "Wrong line number specified in
LCDLINE"
#endif
#endif
#endif
#endif
endm |
Analoga funzione presentano la macro LCDLPOS e
le macro di indirizzamento in DDRAM e CGRAM, LCDDDAdr
e LCDCGAdr .Ad esempio:
;*************************************************************
; LCDDDADR - Call a specified DDRam address
; Use : LCDDDADR xx with xx any valid DDRam address
; if out of range, error
;*************************************************************
LCDDDADR macro DDRamAdr
Local value = DDRamAdr | b'10000000'
; mask command
#if ((DDRamAdr > 0x67 && LCDTYPE ==
0x0) || (DDRamAdr > 0x73 && LCDTYPE ==
0x1))
ERROR "DDRAM Address over range in LCDDDadr"
#else
movlw value
call LCDWrCmd
#endif
endm |
Le macro LCDOutsrt
e LCDstring vengono
compilate solamente se si è scelta la versione estesa del driver. La
motivazione è che queste necessitano di una locazione RAM in più rispetto al
resto del driver
|