Istituto Professionale di Stato per
l’Industria e l’Artigianato
MORETTO
Interfaccia display LCD da
porta parallela.
Giuseppe Raciti
Classe 5 SZ-SERALE
Anno scolastico 2005/2006
INDICE:
GENERALITA’...………………………………………………………...3
LA PORTA PARALLELA………………………………………………4
SEGNALI FONDAMENTALI DELL’ INTERFACCIA
PARALLELA…………………………………………………………….5
TEMPORIZZAZIONE DEI SEGNALI NEL CASO
DI INTERFACCIA PARALLELA……………………………………...7
I TIPI DI PORTA PARALLELA……………………………………….8
I REGISTRI………………………………………………………………9
I DISPLAY LCD………………………………………………………..13
PRINCIPIO DI FUNZIONAMENTO…………………………………15
I DISPLAY A MATRICE PASSIVA………………………...………..17
I DISPLAY A MATRICE ATTIVA TFT……………………………..18
GLI SCHERMI AL PLASMA…………………………………….…...19
VANTAGGI E SVANTAGGI……………………………………….…21
IL PROGETTO…………………………………………………………22
PIEDINATURA DELLE PORTE USB………………………….…….24
IL CHIP HD44780………………………………………………………24
IL PROGRAMMA IN DELPHI……………………………………….26
2
Generalità
I sistemi di interfacciamento vengono utilizzati nei PC per connettere il sistema di
elaborazione dati con i dispositivi periferici esterni (tastiera, mouse, video,
stampante, plotter, unità HD, FD, CDROM, modem, etc). Alcuni sistemi di
interfacciamento sono essenziali per il funzionamento del sistema stesso (interfaccia
video, interfaccia tastiera), altri sono opzionali. Fra le modalità di trasferimento dati
distinguiamo la “modalità parallelo” attuata ad esempio nel caso dell’interfaccia di
una stampante e interfacciamento seriale (verso un modem o un plotter o una
stampante seriale). Nel caso di interfaccia parallela, il dato a 8 bit che deve essere
trasferito fra sistema di elaborazione dati (PC) e periferica esterna transita su otto
conduttori distinti che costituiscono un “bus” (veicolo di trasmissione dei dati). Il
dato in questo caso viene trasmesso in un unico ciclo contemporaneamente sugli otto
conduttori distinti che costituiscono il “bus”.
3
La porta parallela
La porta parallela è nata per garantire il collegamento con una stampante ma visto la
sua versatilità è spesso utilizzata per gestire anche altri dispositivi quali scanner e
memorie di massa esterne.
Grazie alla sua facile programmazione con programmi ad alto livello come il C il
Basic e l’Assembler anche un utente poco esperto può realizzare in breve tempo
programmi che gli permettano di comandare qualsiasi periferica.
Fisicamente si tratta di una vaschetta con 25 piedini per la porta maschio e 25
forellini per la porta femmina, disposti su due file: quella superiore di 12 e quella
inferiore di 13, essa può essere intesa come un gruppo di porte logiche con le quali
trasmettere o ricevere informazioni binarie.
Solo 17 dei 25 piedini sono usati per trasportare informazioni: dodici sono linee
d’uscita e cinque sono linee d’ingresso. Si noti che queste linee non sono adatte ad
erogare corrente (massimo 2 o 3 mA).
La lunghezza del cavo che connette un PC ad una stampante parallela non deve
superare la lunghezza di 2 m. In caso contrario si può verificare che la stampante
stampi un carattere diverso da quello collocato dal PC sul Bus Dati. I motivi per cui
ciò avviene sono diversi:
1) innanzitutto i parametri del circuito equivalente associato alle varie uscite D0D7 non sono mai uguali; il carico resistivo e capacitivo delle varie linee dati
risulta diverso da linea a linea il che significa ritardi diversi fra linea e linea;
2) sulle varie linee i ripidi fronti generati dai dati in rapida successione danno
origine a fenomeni di oscillazione smorzata (circuito RLC in regime
transitorio) che provocano perturbazioni nei dati ricevuti dalla stampante.
3) un fronte ripido che si manifesta su una linea dati può produrre un disturbo su
una linea dati fisicamente vicina per due motivi:
4
a) un gradino di tensione può essere accompagnato da un gradino di corrente
per cui, per induzione elettromagnetica, si avrà una f.e.m. di disturbo
indotta nella linea fisicamente vicina a quella che genera la variazione di
flusso (elevata nel caso di brusche variazione di corrente);
b) un gradino di tensione può non essere accompagnato da un gradino di
corrente ma può interessare la capacità parassita esistente fra due
conduttori dati e propagare perciò un disturbo di natura elettrostatica.
Segnali fondamentali dell’interfaccia parallela
La connessione parallela fra PC e stampante (LPT) è effettuata attraverso i seguenti
segnali:
a) otto linee dati da D0 a D7, TTL compatibili che connettono il PC alla
stampante; su queste linee viaggiano i dati (caratteri in codice ASCII) o i
comandi (ASCII) che vengono generati dal PC e sono diretti alla stampante.
b) una linea di controllo denominata DATA STROBE, attiva a livello logico basso,
attraverso la quale il PC comunica alla stampante che il dato è da ritenersi
valido. Il segnale DATA STROBE, normalmente a livello alto, passa a livello
basso dopo che il PC ha emesso il dato sulle otto linee D0-D7. La durata del
5
segnale di “STROBE” si aggira attorno ad 1 µs; esso viene generato con un
ritardo di 0.5 - 1 µs rispetto alla collocazione del dato sul Data Bus.
c) Una linea di controllo denominata BUSY diretta dalla stampante LPT verso il
PC, attraverso la quale la stampante comunica al PC di essere occupata
(BUSY=1) e quindi di non essere in grado di accettare altri dati, oppure di
essere libera e perciò in grado di ricevere altri dati (BUSY=0).
d) Una linea di controllo denominata DATA ACK attiva a livello logico basso e
diretta dalla stampante LPT verso il PC, attraverso la quale la stampante
comunica al PC di avere acquisito ed elaborato correttamente l’ultimo dato
ricevuto. Il segnale DATA ACK, normalmente a livello alto, passa a livello
basso dopo che la stampante ha completato il processo di acquisizione dati.
Connettore standard dell’interfaccia parallela (DB25F lato PC)
6
Temporizzazione dei segnali nel caso di interfaccia parallela
Nella figura è mostrato il comportamento dei segnali nel tempo.
Una volta partito il segnale, con un brevissimo ritardo di approssimativamente di 0.5
µs, parte il segnale di strobe indicante che la stampante è attiva; il ritardo permette ai
dati di arrivare tutti contemporaneamente. All’interno della stampante c’è un buffer
(che corrisponde ad una riga) che richiede tempo per riempirsi e viene svuotato
quando è pieno.
L’operazione
consecutiva
al
comando
di
strobe
è
la
segnalazione
di
ACKNOWLEDGE (ACK), un segnale che normalmente è attivo a 1 (nel momento in
cui vengono inviati il dato e lo strobe) e va a livello 0 quando la stampante ha finito
di stampare il dato (buffer vuoto), quindi è pronta a ricevere altri dati; l’impulso dura
circa 0.5 µs. Un altra linea di controllo è il BUSY, un segnale che normalmente è a
livello 0 (prima del dato) e poi quando arriva il dato passa a livello attivo 1, questo
impulso indica che la stampante non è in grado di ricevere dati.
7
I tipi di porta parallela
Nel tempo la porta parallela montata nel PC si è evoluta anche se, con qualche
eccezione, si è mantenuta la compatibilità con i primi modelli: questo significa che
tutti i circuiti progettati per essere collegati alla porta parallela del primo PC-XT IBM
possono, almeno in teoria, funzionare anche con un moderno P4. Molti costruttori
hanno in passato apportato modifiche e miglioramenti allo standard SPP originario,
purtroppo senza porre attenzione alla compatibilità con i modelli di altri produttori.
Ciò ha reso inutilizzabili sulla maggior parte dei PC le caratteristiche avanzate
disponibili solo per alcune porte parallele.
Le categorie che comprendono le porte attuali sono sostanzialmente tre:
•
La Standard Parallel Port (SPP). Chiamata con il nome del suo inventore,
Centronics, è il modello originario di porta parallela, installato sul primo PC
XT. Pensata originariamente solo per la connessione alle stampanti, con
qualche accorgimento permette anche altri usi. Tutti gli altri tipi di porta
parallela sono compatibili con questo e quindi il software e l'hardware
sviluppati per questa porta sono praticamente universali.
•
La Enhanced Parallel Port (EPP). Permette lo scambio bidirezionale dei dati
fornendo un supporto hardware per l'handshaking. E' possibile raggiungere alte
velocità di trasferimento, in alcune applicazioni anche 10 volte maggiori della
SPP.
•
La Extended Capabilities Port (ECP). Permette la maggiore flessibilità di
utilizzo, ha il supporto del DMA ed una grande varietà di modalità di
8
funzionamento. Come contropartita è piuttosto difficile progettare hardware
che sia in grado di utilizzarla.
Tutti queste categorie rientrano nello standard IEEE 1284 del 1994, accanto al Nibble
Mode ed al Byte mode.
I registri
Complessivamente sono disponibili sul connettore della porta parallela 12 bit per
l'output e 5 per l'input. Gli ingressi e le uscite sono TTL compatibili (alcuni possono
essere a collettore aperto, in genere con resistore di pull-up integrato all'interno del
PC) anche se le tensioni e le correnti effettivamente disponibili sono piuttosto
variabili in funzione delle tecnologie impiegate per la costruzione della porta. Su
molti PC un uno logico appare come una tensione molto vicina ai 5V, uno zero come
0V (a vuoto). Le correnti disponibili sono in genere di almeno 5 mA, sia di sink che
di source, ma spesso molto di più (anche 50 mA e più). Non si tratta però di una
regola: in genere deve essere interpretato come uno logico qualunque tensione
superiore ai 2V e come zero logico qualunque tensione inferiore a 0.8V. Inoltre si
potrebbe ritenere che la corrente assorbita da un’uscita (Isink) sia maggiore, anche di
molto, rispetto a quella erogata (Isource). È meglio quindi progettare circuiti che
riescano a gestire correttamente segnali che rappresentano l'uno logico sia con i 2V
sia con i 5V (quali per esempio i TTL). È anche opportuno evitare correnti in
ingresso o uscita superiori a qualche mA. Di solito sulla scheda madre di un computer
è presente solo una porta parallela ma è possibile aggiungerne ancora tre attraverso
slot esterni.
9
Le moderne porte parallele (EPP/ECP) hanno rispettivamente otto e sei registri anche
se normalmente ne vengono utilizzati solo tre, quelli appartenenti alla SPP. Dato che
la porta parallela su scheda video non esiste più possiamo considerare come indirizzo
base 0378H per la porta LPT1 e 0278H per la porta LPT2, vedendo così i tre registri
standard SPP:
Il primo registro della porta parallela SPP è una porta di uscita dei dati ad 8 bit:
Questo registro viene usato per l’invio dei dati dal computer verso la stampante, ed i
dati inviati restano invariati fino ad una successiva istruzione di invio. La variante
IBM PS/2 rende questo registro disponibile anche come porta di input, consentendo
la lettura di otto bit direttamente dal connettore
10
Il secondo registro della porta parallela SPP è una porta di ingresso di 5 bit perchè sul
connettore abbiamo a disposizione solo 5 degli 8 pin:
Il bit 7 è negato, ciò significa che subisce un’inversione logica durante la lettura, se in
ingresso ho un livello logico alto (in tecnologia TTL: 1 = livello di tensione compreso
fra +2.4V e +5V ), quando leggo il bit eseguendo un istruzione di “in” vedo un livello
logico basso (in tecnologia TTL: 0 = livello di tensione compreso fra 0V e +0.8V).
Questo registro, essendo un registro di solo ingresso, viene usato dal computer per
monitorare lo stato della stampante.
11
Il terzo registro della porta parallela SPP è una porta d’uscita a 4 bit perché sul
connettore abbiamo disponibili solo 4 degli 8 bit:
In questo registro i bit 0,1,3 subiscono un’inversione logica in uscita, viene usato dal
sistema per inviare i segnali di controllo alla stampante.
I bit 4 e 5 non sono presenti sul connettore ma importanti per la gestione di una porta
parallela:
- il bit 4 è utilizzato per abilitare un’eventuale richiesta di interruzioni; se è stato
programmato a 1, il dispositivo esterno è autorizzato a interrompere la cpu dando un
breve impulso basso sul pin 10 del connettore dopo ogni reset della porta.
- il bit 5 è inutilizzato nelle SPP, ma nei computer della serie IBM PS/2 è invece
molto importante perché controlla la possibilità di rendere bidirezionale la porta dati;
nel funzionamento monodirezionale il bit 5 deve essere a 0.
12
I Display LCD
I Display o visualizzatori LCD a matrice di punti sono chiamati così perché
l’informazione è affidata allo stato (acceso o spento 1/0) di numerosi piccoli punti
chiamati pixel organizzati su righe e colonne (matrice) successive. Il visualizzatore
può essere:
• Alfanumerico: in questo caso i punti sono predisposti in gruppi di 5x10 o 5x8
pixel, quindi, accendendo opportunamente i puntini, ogni gruppo può assumere
l’aspetto di un carattere; di solito questi visualizzatori mostrano una o più righe
di caratteri, fino a 40 caratteri per riga.
Esempio di un display alfanumerico 20x4 con 5x10 gruppi di pixel :
13
• Grafico: su questi display non si distinguono le righe di caratteri tipiche degli
alfanumerici: l’area dei pixel è organizzata in modo omogeneo e continuo,
riuscendo così a realizzare un’immagine più o meno grande, a seconda della
risoluzione del display.
Si pensi, per esempio, ai piccoli display dei cellulari oppure agli schermi dei
computer con risoluzioni ormai superiori a 1024x768, dove i pixel sono
indistinguibili.
Esempio di un display grafico con risoluzione di 128x64 pixel:
14
Principio di funzionamento
Un cristallo liquido è un materiale le cui molecole non sono più allo stato solido ma
non sono ancora allo stato liquido e mantengono un comportamento fisico ordinato,
modificabile e controllabile attraverso l’applicazione di stimoli elettrici. Il range di
temperatura nell’ambito del quale un determinato elemento si trova allo stato di
cristallo liquido, corrisponde anche al range termico entro cui un monitor LCD può
funzionare. La differenza principale tra uno schermo al plasma e la tecnologia LCD
sta nel fatto che i pixel LCD non emettono alcuna luce. Un pixel LCD è costituito da
tre sotto-pixel dei tre colori primari. Un LCD non emette alcuna luce ma funziona
come selettore, per questo motivo questi schermi sono retro-illuminati. La luce
emessa dalla retro-illuminazione passa attraverso il cristallo liquido e viene
successivamente colorata dal filtro. Ogni sotto-pixel ha lo stesso principio di
funzionamento cambia solo il colore del filtro in base al suo utilizzo finale. Il cristallo
di ogni sotto-pixel può essere controllato elettronicamente come una valvola in modo
da lasciar passare più o meno luce in base a quanto rosso, verde e blu il pixel deve
emettere.
La retro-illuminazione emette una luce bianca naturale non polarizzata: la sua
polarizzazione viene determinata dall’orientamento del vettore del suo campo
elettrico.
15
Quando la luce passa attraverso un polarizzatore, esce dall’altra parte con il vettore
del campo elettrico orientato nella direzione stabilita dal polarizzatore (verticale in
questo caso). Se, successivamente, la luce viene fatta passare attraverso un secondo
polarizzatore perpendicolare al primo (orizzontalmente quindi in questo caso), non
esce nessuna luce. Ma se si inserisce tra i due polarizzatori un cristallo liquido, il
cristallo altera il piano di polarizzazione per allinearlo con il secondo polarizzatore,
dando cosi il via libera al passaggio della luce.
Quindi se si introduce della corrente ad ogni estremità del cristallo liquido, il cristallo
si orienta tramite la differenza di potenziale creata. In questo modo prevenendo la
rotazione del piano di polarizzazione, i cristalli non permettono il passaggio della
luce attraverso il polarizzatore orizzontale, in quanto rimane polarizzato
verticalmente. Il raggio di luce viene cosi interrotto.
16
I monitor LCD possono essere a matrice passiva, che è la tecnologia più vecchia e
meno costosa (quasi tutti i dispositivi elettronici - orologi digitali, calcolatrici, etc. usano questa tecnica per accendere i pixel) o a matrice attiva, cioè i monitor
generalmente conosciuti come TFT: Thin Film Transistor.
I display a matrice passiva
Nella tecnologia a matrice passiva un campo elettrico attiva le celle attraversandole
per linee orizzontali. Il problema sta nel fatto che i cristalli di ogni cella vengono
attivati per un tempo pari a (1/risoluzione) della durata totale dell’immagine dello
schermo. Per il resto del tempo la cella rimane senza campo elettrico e il cristallo
deve mantenere il proprio stato pur in assenza di voltaggio. La stabilità
dell’immagine dipende quindi dalle caratteristiche chimiche dei cristalli. Questo
implica che i display a matrice passiva possono dare problemi di basso contrasto e
sfarfallio elevato, dovuto al progressivo ritorno allo stato di quiete dei cristalli liquidi
prima che il successivo impulso elettrico li abbia riattivati. Inoltre, per mantenere i
cristalli in posizione il più a lungo possibile, questi devono essere “lenti”, ma ciò va a
discapito della corretta visualizzazione delle immagini in movimento, che soffrono
17
problemi di shadow, con delle vere e proprie scie che l’oggetto visualizzato lascia
sullo schermo man mano che si sposta.
Un altro problema dei display a matrice passiva è quello definito cross-talk: le celle
vengono attivate dall’impulso elettrico a loro indirizzato, ma vengono influenzate
anche dal campo elettrico dell’impulso indirizzato alle celle adiacenti, con
conseguenti aloni, sbavature di luminosità, bassa fedeltà dei colori, cattiva
definizione dell’immagine.
Con il Dual Scan si è cercato di ovviare a parte dei problemi classici dei monitor a
matrice passiva: due circuiti elettrici indipendenti ma coordinati attivano le varie
celle, dimezzando quindi il tempo durante il quale i cristalli restano senza impulso.
Questo sistema migliora si la resa complessiva dell’immagine ma non elimina del
tutto lo sfarfallio e soffre comunque del cross-talk tra le celle.
I display a matrice attiva TFT
Gli schermi a matrice passiva stanno progressivamente lasciando il posto ai display a
matrice attiva, che sono caratterizzati da una resa qualitativa nettamente superiore.
In questa tecnologia rispetto agli schermi a matrice passiva è stato aggiunto un
transistor ad ogni pixel che lavora come un selettore. Quando il selettore è chiuso
(ON), i dati vengono scritti in un condensatore che ha lo scopo di immagazzinare il
segnale. Quando il selettore è aperto (OFF), i dati rimangono all’interno del
condensatore che funziona quindi come una memoria, quindi il cristallo liquido
continuerà ad avere un voltaggio sui suoi terminali e le linee potranno indirizzare un
altro pixel. Con questo si evita il ritorno allo stato precedente del pixel mentre se ne
indirizza un altro.
I tempi di scrittura del condensatore sono inferiori rispetto ai tempi di rotazione dei
cristalli, quindi è possibile scrivere un dato ed indirizzare subito un altro pixel senza
tempi di attesa.
18
Questa tecnologia, conosciuta come TFT dal sottile strato di transistor che usa, si è
diffusa solo recentemente perché il suo nome viene associato a tutti i monitor LCD.
I voltaggi che usa sono molto inferiori rispetto quelli di uno schermo al plasma, per
fare funzionare un pixel TFT si ha bisogno di una tensione compresa tra -5V e +20V,
che non è paragonabile alle centinaia di volt che vengono utilizzati per farne
funzionare uno al plasma.
Gli schermi al plasma
Il plasma non è una tecnologia recente, anche se impiegata industrialmente solo dagli
inizi degli anni ’90 infatti, le ricerche sugli schermi al plasma iniziarono negli Stati
Uniti già a partire dal 1960.
Ogni sotto-pixel di uno schermo al plasma è una lampadina fluorescente
microscopica che emette un colore primario rosso, verde o blu, e, modificando
l’intensità della luce che invia ogni sotto-pixel, è possibile visualizzare un’infinità di
colori.
19
Ogni pixel è costituito da tre identiche cavità microscopiche contenenti un gas
rarefatto (generalmente una miscela di Neon e Xenon) ed aventi due elettrodi, uno
frontale e uno posteriore. Applicando una forte corrente alternata agli elettrodi, il
plasma contenuto nelle cavità viene messo in moto, emettendo raggi UV che
colpiscono lo scintillatore; questi scintillatori sono scelti in modo da emettere
ciascuno un diverso colore primario. La luce colorata passa quindi attraverso il vetro
per essere vista dall’utente.
20
Vantaggi e svantaggi
La tecnologia al plasma ha innumerevoli vantaggi rispetto a quelle degli schermi
LCD e CRT (tubo catodico).
Gli scintillatori utilizzati nei televisori al plasma permettono infatti di ottenere una
gamma cromatica più ampia di qualsiasi monitor CRT e caratterizzata da colori più
brillanti.
Inoltre le angolazioni della visuale sono molto più ampie, soprattutto se confrontate
con quelle degli LCD, perché, diversamente dalla tecnologia LCD, la luce viene
generata dai pixel stessi e non c’è bisogno di polarizzatori.
Infine, per quanto riguarda il contrasto, la qualità dei toni neri è equivalente a quella
dei migliori schermi CRT, al contrario degli schermi LCD, nei quali un pixel spento
non emette alcuna luce.
Lo svantaggio più grande degli schermi al plasma è la dimensione dei pixel, infatti,
finora, non è stato possibile possibile le dimensioni dei pixel al di sotto dei 0.5/0.6
mm. Di conseguenza, non esistono televisori al plasma con diagonali inferiori ai 32
pollici, producendo così sul mercato solo schermi che vanno dai 32 ai 50 pollici, a
differenza degli schermi LCD che partono dalla dimensione minima di 2 pollici.
Un altro svantaggio è il fattore economico: gli schermi al plasma sono costosi perché
l’elettronica di controllo dello schermo richiede specifici semiconduttori ad alte
prestazioni, perché le linee di controllo degli elettrodi devono trasportare centinaia di
volt ad alte frequenze. La conseguenza maggiore di questa gestione è l’alto consumo
energetico, che è di gran lunga superiore agli schermi LCD.
21
Il progetto
Come progetto per la tesi ho pensato di interfacciare alla porta parallela un display
LCD alfanumerico 4x20 retro-illuminato; ho pensato di realizzare questo circuito per
capire il funzionamento dei display, ormai molto diffusi nei centri commerciali e
nelle macchinette come display informativi. Questo display è basato sul chip
HD44780 alimentato a 5 volt, può visualizzare fino ad un massimo di 20 caratteri per
riga per un totale di 4 righe ed è collegato alla porta parallela secondo il seguente
schema elettrico:
22
I componenti utilizzati sono due trimmer, uno da 10kΩ che serve per la regolazione
del contrasto del display, ed uno da 100kΩ che serve per la regolazione della
luminosità dello schermo. Questa tabella descrive brevemente i segnali dei 16 pin del
display:
Si noti la presenza del bus dei dati bidirezionale da DB0 a DB7, l’ingresso R/W
attraverso cui si specifica la direzione del flusso dei dati: da PC verso l’LCD se R/W
è a livello logico basso (0), dall’LCD verso il PC se R/W è a livello logico alto (1).
L’Ingresso E (enable) che, se posto a livello alto, abilita il Data Bus e con esso il
23
flusso di dei dati, l’ingresso RS che specifica se in un certo istante la transazione fra
PC e LCD riguarda dati o piuttosto comandi inviati al modulo LCD.
Come alimentazione il circuito necessita di 5V: potevo quindi alimentare il circuito
utilizzando un alimentatore, ma ho preferito utilizzare l’alimentazione che la porta
USB di ogni computer fornisce per non dover utilizzare un alimentazione esterna.
Piedinatura delle porte USB
Le porte USB sono composte da quattro pin, due dei quali sono dedicati alla tensione
di alimentazione (+5V e massa). I restanti due piedini sono il segnale che la periferica
trasmette al sistema.
Il chip HD44780
Il componente HD44780 è nato per costituire l’interfaccia con qualunque
microprocessore o controllore di processo in grado di fornire i due segnali R/W e RS
che regolano il traffico di informazioni del suo bus dati a 8 bit.
Questa gestione è possibile anche da porta parallela da me utilizzata.
24
Le istruzioni (bytes di comando) necessarie per controllare il modulo LCD sono
raccolte in questa tabella:
Ora viene rappresentato il grafico delle temporizzazioni necessarie al componente per
interpretare ed eseguire le sue istruzioni in fase di scrittura verso il controller
HD44780:
25
Ora la tabella della fase di lettura dal controller HD44780:
L’HD44780 è anche un generatore di caratteri ROM (memoria di sola lettura) e serve
per generare 208 5x8 caratteri e 32 5x10 caratteri, per un totale di 240 differenti
caratteri. La bassa alimentazione che richiede questo componente (da 2.7V a 5.5V) lo
rende compatibile con batterie portatili ed ha una bassa dissipazione di potenza.
Il programma in delphi
Per la realizzazione del programma di interfacciamento del display ho utilizzato
delphi 6, anche se su internet si trovano decine di programmi già pronti per il
26
pilotaggio di questi display, non ho voluto utilizzarli perché, altrimenti, il lavoro
sarebbe risultato poco interessante.
Questo programma è stato realizzato interamente da me e con il grandissimo aiuto del
professor Azzani (colgo l’occasione per ringraziarlo) che è sempre disponibile e
molto gentile con noi alunni.
unit Unit1;
private
{ Private declarations }
public
{ Public declarations }
end;
const dati = $378; // porta dei dati
controllo = $37A; // porta controllo
var
Form1: TForm1;
implementation
{$R *.dfm}
uses ZLPOrtIO;
//
function portreadb( const Port:dword ):byte;
// procedure portwriteb( const Port:Dword;const Data:byte );
procedure clock;
var x : byte;
begin
x := PortReadB(controllo);
x := X OR $01; //porto a 1 solo il bit CO
PortWriteB(controllo,x);
x := x AND $FE; // porto a 0 solo il bit C0
PortWriteB(controllo,x);
x := X OR $01; //porto a 1 solo il bit CO
PortWriteB(controllo,x);
end;
procedure RSdato;
var x : byte;
begin
x := PortReadB(controllo);
x := X OR $04; //porto a 1 solo il bit C2
PortWriteB(controllo,x);
end;
procedure RScomando;
var x : byte;
begin
27
x := PortReadB(controllo);
x := X AND $FB; //porto a 0 solo il bit C2
PortWriteB(controllo,x);
end;
Procedure LCD_car(car : Byte); { invio di
caratteri all' LCD }
Begin
RSDato;
PortWriteB(dati,car);
Clock;
Sleep(3);
End;
Procedure LCD_cmd(Ins : Byte); { invio di un
Begin
RSComando;
PortWriteB(dati,ins);
Clock;
Sleep(3);
End;
Procedure LCD_Char(Ch : char); { invio di un
Begin
RSDato;
PortWriteB(dati,Ord(Ch));
Clock;
Sleep(1);
End;
Procedure Clear; { Cancella tutto il display
posizione home (indirizzo 0) }
Begin
LCD_cmd($01);
sleep(10);
End;
Procedure Home;
Begin
LCD_cmd($02);
sleep(10);
End;
Procedure LCD_str(str:string);
var i,ls : integer;
Begin
ls := length(str);
If ls > 20 Then ls := 20;
for i := 1 To ls Do LCD_Char(Str[i]);
End;
Procedure LCD_left;
var I:byte;
Begin
Clear;
For I := 1 To 39 do Lcd_char(char(32));
LCD_cmd($04);
LCD_str(' -IPSIA MORETTO-');
End;
Procedure LCD_right;
Begin
clear;
LCD_cmd($1C);
LCD_str('-Raciti Giuseppe-');
un carattere generatore di
comando all' LCD }
carattere all' LCD }
e porta il cursore in
28
LCD_str('
ipsia moretto ');
End;
Procedure Init_LCD;
Begin
LCD_cmd($38); { 8 bit + 4 linea + 5 x 7 dots }
LCD_cmd($38);
LCD_cmd($38);
LCD_cmd($08);
LCD_cmd($0E);
//0E cursore acceso basso-0D lampeggia-0Cspento
LCD_cmd($01);
End;
procedure TForm1.FormCreate(Sender: TObject);
begin
zliosetiopm(true);
Init_LCD;
Home;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
LCD_right;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
LCD_left;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
clear;
home;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
LCD_str(Edit1.text);
Home;
End;
procedure TForm1.Button6Click(Sender: TObject);
begin
LCD_cmd($C0);
LCD_str(Edit2.text);
Home;
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
LCD_cmd($94);
LCD_str(Edit3.text);
Home;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
LCD_cmd($D4);
LCD_str(Edit4.text);
end;
procedure TForm1.Button8Click(Sender: TObject);
begin
LCD_cmd($18);
end;
procedure TForm1.Button9Click(Sender: TObject);
29
begin
LCD_cmd($1C);
end;
procedure TForm1.Button10Click(Sender: TObject);
var i:integer;
begin
for i := 1 to 10 do
begin
clear;
LCD_cmd($0C);
LCD_cmd($06);
LCD_str(Edit5.text);
sleep(1000);
clear;
sleep(1000);
end;
end;
procedure TForm1.Button11Click(Sender: TObject);
begin
LCD_str('ipsia moretto
LCD_str('ipsia moretto
LCD_str('ipsia moretto
LCD_str('ipsia moretto
end;
procedure TForm1.Button12Click(Sender: TObject);
begin
LCD_cmd($10);
end;
procedure TForm1.Button13Click(Sender: TObject);
begin
LCD_cmd($14);
end;
procedure TForm1.Button14Click(Sender: TObject);
begin
LCD_str(Edit6.Text);
end;
procedure TForm1.Button15Click(Sender: TObject);
var tempo:TDateTime;
begin
clear;
tempo := now;
LCD_cmd($85);
LCD_str(DateToStr(Tempo));
LCD_cmd($C6);
LCD_str(TimeToStr(Tempo));
end;
procedure TForm1.Button16Click(Sender: TObject);
var i,x :integer;
begin
clear;
LCD_cmd($97);
//locazione schermo
LCD_str('barra grafica');
LCD_cmd($C0);
//locazione su schermo
LCD_car($2D); //simbolo meno
LCD_cmd($D3);
//locazione schermo
LCD_car($2B);
//simbolo più
LCD_cmd($80);
//locazione schermo
');
');
');
');
30
for i := 1 to 20 do
begin
LCD_car($FF);
//carattere quadrato pieno
Sleep(150);
end;
LCD_cmd($04);
// comando inserimnto carattere inverso
for x := 1 to 21 do
begin
LCD_car($20); // carattere vuoto
Sleep(150);
end;
clear;
end;
end.
31
Scarica

Interfaccia display LCD da porta parallela.