Le informazioni ricevute sono state visualizzate su 8 display
a 7 segmenti a catodo comune, collegati con la tecnica di multiplazione delle
linee.
Il display è un componente discreto che permette di
visualizzare in forma numerica e letterale i dati disponibili in binario. Ce ne
sono di vari tipi, quelli attualmente più diffusi sono quelli a LED (Light
Emitting Diode) e quelli a cristalli liquidi (LCD).
Le differenze sostanziali si possono riassumere in: maggior
visibilità ma elevati consumi del LED, minore consumo ma allo stesso tempo
maggiore complessità nel pilotaggio del LCD.
La struttura più economica e diffusa di un display è quella
a sette segmenti, con i quali (denominati con le lettere a, b, c, d, e, f, g) si
possono visualizzare tutte le cifre numeriche (0 ¸ 9) ed alfanumeriche
adoperate per la codifica in esadecimale (A, b, C, d, E, F). La visualizzazione
delle cifre esadecimali "B"e "D" è in minuscolo per non
confonderle con le cifre numeriche "8" e "0". E' inoltre
presente un punto decimale in basso a destra, che è in grado di soddisfare
particolari esigenze.
Un'ulteriore distinzione dei display a LED viene effettuata
in base al collegamento interno dei vari LED, e si possono allora display ad
anodo comune o a catodo comune. Se è l'anodo collegato comunemente a tutti i
LED, il display avrà gli ingressi attivi allo stato logico basso, mentre se è
il catodo comune, gli ingressi saranno attivi alti.
Un modo per poter collegare un display a un microcontrollore
potrebbe essere quello di affidare i 7 segmenti a 7 pin di una porta del mC,
e collegare il catodo comune a massa.
Questa soluzione va bene se si deve collegare al massimo un
paio di display al mC, mentre se il numero di display
è più elevato si ricorre alla tecnica di multiplazione, che prevede il
collegamento di tutti i piedini dei segmenti uguali ad un singolo pin di una
porta, con l'utilizzo quindi di 7 pin + 1 pin se si vuole collegare anche il
decimal point, e i vari catodi dei display comandati da altrettanti pin del mC.
Sfruttando la permanenza dell'immagine dentro la retina di un occhio umano si
possono far vedere i display sempre accesi, nonostante il continuo accendi -
spegni, fatto ad una frequenza sufficientemente alta.
Il tempo di permanenza di un display acceso è stato messo a
12 ms; la frequenza quindi risulta
.
Tale routine viene svolta dalla seguente parte di software
(il DPTR è stato caricato con l'indirizzo di memoria della tabella di
conversione): visual_disp: mov r7,#8 ; Serve per fare 8 volte la spazzolata di P0
mov P0,#10000000b ; Inizializza P0
mov r0, #060H ; Metti in R0 il valore 51, l'ind. di memoria del primo display
vai: mov a, @r0 ; Metti in A il valore del display
movc a,@a+dptr ; Converti in valore da BCD a 7seg
mov p1,a ; Carica la porta P1 con il valore 7seg
acall att ; Attendi 12 ms
mov a,p0 ; Shifta P0 a destra
rr a
mov p0,a
inc r0 ; Incrementa l'indirizzo del valore del display
djnz r7, vai ; Ho fatto 8 volte la spazzolata di P0?
mov p1,#000h ; Spegni i display
ret
La funzione "att", invocata per l'attesa di 12ms è
la seguente:
att: mov r3,#01h ; Attende 12 ms
mov r2,#015h
mov r1,#00fh
ciclo0: Nop
djnz r1,ciclo0
mov r1,#00fh
djnz r2,ciclo0
mov r2, #01h
djnz r3,ciclo0
ret
La conversione da numero binario a numero per il display a 7
segmenti, è stata fatta con l'utilizzo di una tabella di conversione, posta in
memoria dopo programma principale e routine varie.
tabella: db 063 ; 0
db 006 ; 1
db 091 ; 2
db 079 ; 3
db 102 ; 4
db 109 ; 5
db 125 ; 6
db 007 ; 7
db 127 ; 8
db 111 ; 9
db 119 ; A=10
db 124 ; b=11
db 088 ; c=12
db 094 ; D=13
db 121 ; E=14
db 113 ; F=15
db 057 ; C=16
db 056 ; L=17
db 062 ; U=18
db 118 ; H=20
db 00 ; spegnimento disp
Ritorna all'inizio
|