' ********************************************************************** ' * File: Corso_BASCOMAVR_099.BAS * ' * Versione: 1.1 * ' * Data: 17.06.12 * ' * Ambiente sviluppo: Bascom-AVR Demo Ver. 1.11.9.1 + * ' * + AVR bootloader grifo(r) Ver. 1.2 * ' * Schede: GMM AM08 + GMM TST3 * ' * Sviluppato da: GRIFO(r) Italian Technology * ' * via Dell'Artigiano 8/6 * ' * 40016 S. Giorgio di Piano (BO) * ' * Tel. +39 051 892052 Fax. +39 051 893661 * ' * http://www.grifo.com http://www.grifo.it * ' * Autore: Gianluca Angelini * ' ********************************************************************** ' Programma di esempio 099 del corso BASCOM AVR. ' Rappresentazione chr premuti della tastiera PC su 4 display a LED da 7 ' segmenti, con scroll orrizontale da destra verso sinistra. ' I display sono collegati in parallelo ad 8 linee di uscita del Mini Modulo, ' che comandano lo stato dei 7 segmenti e del punto decimale, presenti su ogni ' display. Quattro ulteriori linee di uscita sono collegate ai comuni dei display ' e vengono usate per selezionare quello da attivare. ' I dettagli sul collegamento sono riportati nello schema elettrico e sono già ' effettuati dalla sezione 2 della scheda didattica DEB 01. ' Usando quest'ultima è sufficiente collegare il suo connettore CN4 al connettore ' CN4 della GMM TST3 che ospita il Mini Modulo, tramite un flat a 20 vie, ed ' un filo aggiunto sullo stampato. ' Il programma si presenta su una console seriale dotata di monitor e tastiera, ' con un protocollo fisico costante a 19200 Baud, 8 Bit x chr, 1 Stop bit, ' Nessuna parità. Sucessivamente verifica ciclicamente se sulla tastiera PC è ' premuto un tasto ed in caso affermativo rappresenta il corrispondente carattere ' alfanumerico sull'ultimo display DG4 e sposta le cifre già rappresentate di una ' posizione a sinistra. In questo modo sui display saranno sempre presenti gli ' ultimi 4 tasti premuti. ' La console può coincidere con un sistema in grado di gestire una ' comunicazione seriale in RS 232. Al fine di semplificarne l'uso si può ' usare un PC dotato di una linea COMx, che esegue un programma di emulazione ' terminale come HYPERTERMINAL o l'omonima modalità offerta dal BASCOM AVR ' (vedere Configurazioni IDE). ' Il programma funziona solo se la GMM AM08 è montata sullo zoccolo Z2 della ' GMM TST3!! ' Nel programma i nomi che identificano i segnali usati sono riferiti allo ' schema elettrico ed ai manuali tecnici della GMM TST3 e DEB 01!! ' ' Aggiunte: Nessuna. ' ' 17/06/12: Corso_BASCOMAVR_99.BAS - Ver 1.1 - By G.A. ' Prima versione. ' ' '*************************** Configurazioni IDE ******************************** ' NOTE: per usare correttamente questo programma demo, eseguire i seguenti ' punti: ' 1) Controllare la presenza del file M8DEF.DAT nella directory di ' installazione del BASCOM-AVR e se non disponibile copiarlo e dopo ' rilanciare l'IDE. ' 2) Nella finestra "Options | Compiler | Chip" impostare: ' Chip: m8def.dat ' XRAM: None ' HW Stack: 64 ' Soft Stack: 32 ' Framesize: 64 ' XRAM waitstate: disattivo ' External Access Enable: disattivo ' 3) Nella finestra "Options | Communication" settare: ' COM port = la linea del PC collegata alla GMM AM08, tramite la GMM TST3 ' Baudrate = 19200 ' Parity = None ' Databits = 8 ' Stopbit = 1 ' Handshake = None ' Emulation = TTY ' Font = Terminal, Normale, 12 punti, colore bianco ' Backcolor = Navy ' 4) Al termine della compilazione, della programmazione del codice nella ' GMM AM08, aprire la finestra di emulazione terminale del BASCOM AVR con ' l'opzione: Tools | Terminal emulator (Ctrl+T) ed a questo punto resettare ' o riaccendere il Mini Modulo. '********************** Direttive del compilatore ****************************** $regfile "M8DEF.DAT" ' File di definizione microcontrollore usato $romstart = &H0 ' Indirizzo inizio codice in FLASH $crystal = 7372800 ' Frequenza quarzo del microcontrollore $hwstack = 64 ' Spazio per stack hardware $swstack = 32 ' Spazio per stack software $framesize = 64 ' Spazio per frame $map ' Genera informazioni di debug $baud = 19200 ' Velocità comunicazione seriale: 19200 Baud ' Altri parametri sono fissi a: 8 bit x chr ' 1 Stop bit ' No parity '******************************* Definizioni *********************************** ' Le risorse usate dal programma sono collegate come illustrato nella seguenti ' tabelle: ' !!! N.B. Sulla GMM TST3 i jumper devono essere posizionati come segue: ' J1 in 2-3 ; J2 in 1-2 ; J3 in 1-2 ; J5 in 2-3 ; J7 in 2-3 ; J8 in 2-3 ' J9 in 2-3 !!! ' ' Risorsa Risorsa pin Z2 pin Segnale Segnale uP ' DEB 01 GMM TST3 GMM TST3 GMM AM08 GMM AM08 usato ' Segmento A CN4.2 33 * 12 PB5 SCK PB5 ' Segmento B CN4.1 32 26 PCO ADC0 PC0 ' Segmento C CN4.4 31 25 PC1 ADC1 PC1 ' Segmento D CN4.3 30 24 PB1 OC1A PB1 ' Segmento E CN4.6 29 23 PB0 ICP PB0 ' Segmento F CN4.5 28 22 PB2 OC1B /SS PB2 ' Segmento G CN4.8 27 21 PD6 AIN0 PD6 ' P.Decimale CN4.7 26 20 PD7 AIN1 PD7 ' Comune DG1 CN4.11 21 15 PC2 ADC2 PC2 ' Comune DG2 CN4.12 19 13 PC3 ADC3 PC3 ' Comune DG3 CN4.9 14 8 PB3 MOSI OC2 PB3 ' Comune DG4 CN4.10 15 9 PB4 MISO PB4 ' +5Vdc CN4.18 34 28 +5 Vdc - ' GND CN4.17 20 14 GND - ' * Filo su GMM TST3 che collega CN4.2 a CN3.13! ' ' Segnale pin COMx pin CN5 pin Z2 pin Segnale Segnale uP ' PC DB9 GMM TST3 GMM TST3 GMM AM08 GMM AM08 usato ' TX 3 3 9 3 RxD RS232 PD0 ' RX 2 2 10 4 TxD RS232 PD1 ' GND 5 5 20 14 GND - ' Da questa tabella si ricava che il cavo di collegamento tra la COM del PC ed ' il CN5 della GMM TST3 è un normale cavo dritto o prolunga. Volendolo ' richiedere alla grifo(r) si deve specificare il codice CCR 9+9E. Comdg1 Alias Portc.2 ' Segnale d'uscita collegato al comune del display a 7 segmenti DG1 Comdg2 Alias Portc.3 ' Segnale d'uscita collegato al comune del display a 7 segmenti DG2 Comdg3 Alias Portb.3 ' Segnale d'uscita collegato al comune del display a 7 segmenti DG3 Comdg4 Alias Portb.4 ' Segnale d'uscita collegato al comune del display a 7 segmenti DG4 Pinrx Alias Ddrd.0 ' Bit con direzione segnale collegato a RxD GMM AM08 Pintx Alias Ddrd.1 ' Bit con direzione segnale collegato a TxD GMM AM08 '************************ Dichiarazioni costanti ******************************* Const Cret = &H0D ' Codice ASCII Carriage Return Const Offpatt = 31 ' Offset tra codici ASCII dei chr ed indici del vettore con pattern di rappresentazione Const Numdisp = 4 ' Numero display a 7 segmenti gestiti Const Dtcycle = 5 ' Tempo di ciclo del programma Const Noshw = &HFF ' Valore per indicare carattere non rappresentabile '************************ Dichiarazioni variabili ****************************** Dim Dirio As Byte ' Variabile con direzione I/O digitali Dim Iod As Byte ' Variabile con stato I/O digitali Dim Hlpb As Byte ' Variabile di aiuto ad uso generico Dim Curdisp As Byte ' Variabile con display attuale Dim Idxdisp As Byte ' Variabile con indice display Dim Patdis(64) As Byte ' Vettore con pattern caratteri da rappresentare su display Dim Chrshwdis(numdisp) As Byte ' Vettore con pattern dei caratteri rappresentati sui display Dim Key As Byte ' Codice tasto premuto su tastiera di console del PC '************************ Dichiarazioni procedure ****************************** Declare Sub Ini_pa_full(byval Dirio As Byte) ' Inizializza Port A GMM TST3 completo Declare Sub Set_pa_full(byval Iod As Byte) ' Setta Port A GMM TST3 completo Declare Sub Ini_pc(byval Dirio As Byte) ' Inizializza Port C GMM TST3 Declare Sub Set_pc(byval Iod As Byte) ' Setta Port C GMM TST3 Declare Sub Ini_disp7seg() ' Inizializza gestione display 7 segmenti Declare Sub Shw_dispx(byval Curdisp As Byte) ' Rappresenta carattere su display 7 segmenti passato '************************** Programma principale ******************************* Main: Pinrx = 0 ' Inizializza segnali per comunicazione seriale Pintx = 0 ' come ingressi digitali Call Ini_disp7seg() ' Inizializza gestione display 7 segmenti Print ' Separa da precedenti indicazioni, andando su nuova riga Print Print "Rappresenta tasto premuto su PC su ultimo display a 7 segmenti della" Print " DEB 01 e sposta rappresentazione altri display di una posizione a sinistra." Print "Montare Mini Modulo su Z2 della GMM TST3 e collegare CN4 a CN4 della DEB 01." Print "Premendo i tasti della tastiera PC, gli ultimi 4 vengono rappresentati" Print " sui 4 display, con scroll da destra a sinistra." Print "Esecuzione in corso." ' Il ciclo infinito presente nel programma principale ad ogni esecuzione si ' occupa di scansionare la tastiera di console per riconoscere i tasti premuti ' e di attivare in sequenza i display a 7 segmenti. Al fine di ottenere un ' funzionamento corretto (nessun tasto perso e display regolarmente visibili) ' la durata complessiva di questo ciclo dovrà essere dell'ordine di pochi ' millisecondi, attualmente impostata nella costante Dtcycle. Curdisp = 1 ' Attuale display rappresentato = primo Do ' Inizio ciclo infinito Key = Inkey() ' Verifica se tasto premuto su tastiera di console del PC If Key > 0 Then If Key >= "a" Then ' Se tasto minuscolo Key = Key And &HDF ' Lo converte in in maiuscolo End If ' Verifica se tasto premuto è rappresentabile, prelevando il suo pattern e ' verificando se è valido. Iod = Key - Offpatt ' Ottiene indice pattern del carattere Iod = Patdis(iod) ' Preleva pattern del carattere If Iod <> Noshw Then ' Se pattern valido For Idxdisp = 2 To Numdisp ' Scroll display di una posizione da destra a sinistra Hlpb = Idxdisp - 1 Chrshwdis(hlpb) = Chrshwdis(idxdisp) Next Idxdisp Chrshwdis(numdisp) = Key ' Salva codice tasto premuto su ultima posizione destra del display End If End If Call Shw_dispx(curdisp) ' Rappresenta carattere su display attuale If Curdisp < Numdisp Then ' Aggiorna display attuale in modo circolare Curdisp = Curdisp + 1 Else Curdisp = 1 ' Attuale display rappresentato = primo End If Waitms Dtcycle ' Ritardo che equivale a tempo di Debouncing e che rende visibile display Loop ' Fine ciclo infinito End '************************ Fine programma principale **************************** '****************** Inizio procedure usate dal programma *********************** ' Inizializza 8 pin del uP collegati al port A su CN4 della GMM TST3: ' PA.0 -> PB5 PA.1 -> PC0 PA.2 -> PC1 PA.3 -> PB1 ' PA.4 -> PB0 PA.5 -> PB2 PA.6 -> PD6 PA.7 -> PD7 ' nella modalita` di I/O passata nel parametro dirio (bit a 1=uscita a livello ' alto; bit a 0=ingresso), lasciando inalterato lo stato di tutte le altre linee. ' N.B. Con la GMM AM08 nel Port A possono essere programmate in uscita solo 7 ' linee; l'ottava viene presa da un altro pin libero. Sub Ini_pa_full(byval Dirio As Byte) ' Inizializza linea collegata a segnale analogico del microcontrollore, ' gestita tramita la corrispondente sezione A/D converter, in ingresso Config Adc = Single , Prescaler = Auto , Reference = Avcc ' Inizializza sezione A/D con conversione su richieta, Start Adc ' miglior prescaler, Vref=5 V e la abilita ' Inizializza rimanenti 7 linee del port A collegate a segnali digitali del ' microcontrollore Portc.0 = 1 ' Setta stato iniziale alto per PA.1->PC0 in uscita Ddrc.0 = Dirio.1 ' Imposta direzione per PA.1->PC0 Portc.1 = 1 ' Setta stato iniziale alto per PA.2->PC1 in uscita Ddrc.1 = Dirio.2 ' Imposta direzione per PA.2->PC1 Portb.1 = 1 ' Setta stato iniziale alto per PA.3->PB1 in uscita Ddrb.1 = Dirio.3 ' Imposta direzione per PA.3->PB1 Portb.0 = 1 ' Setta stato iniziale alto per PA.4->PB0 in uscita Ddrb.0 = Dirio.4 ' Imposta direzione per PA.4->PB0 Portb.2 = 1 ' Setta stato iniziale alto per PA.5->PB2 in uscita Ddrb.2 = Dirio.5 ' Imposta direzione per PA.5->PB2 Portd.6 = 1 ' Setta stato iniziale alto per PA.6->PD6 in uscita Ddrd.6 = Dirio.6 ' Imposta direzione per PA.6->PD6 Portd.7 = 1 ' Setta stato iniziale alto per PA.7->PD7 in uscita Ddrd.7 = Dirio.7 ' Imposta direzione per PA.7->PD7 ' Inizializza ultima linea del port A collegata a segnali digitali del ' microcontrollore; tale linea viene collegata a CN4 con un filo sulla 'GMM TST3, come descritto nella tabella segnali e negli schemi elettrici. Portb.5 = 1 ' Setta stato iniziale alto per PA.7->PB5 in uscita Ddrb.5 = Dirio.0 ' Imposta direzione per PA.7->PB5 End Sub ' Setta stato delle 8 linee del uP collegate al port A su CN4 della GMM TST3, ' con lo stato passato in Iod, lasciando inalterato lo stato di tutte le altre ' linee. ' N.B. Con la GMM AM08 nel Port A possono essere programmate in uscita solo 7 ' linee; l'ottava viene presa da un altro pin libero. Sub Set_pa_full(byval Iod As Byte) Portb.5 = Iod.0 ' Setta stato linea PA.0->PB5 Portc.0 = Iod.1 ' Setta stato linea PA.1->PC0 Portc.1 = Iod.2 ' Setta stato linea PA.2->PC1 Portb.1 = Iod.3 ' Setta stato linea PA.3->PB1 Portb.0 = Iod.4 ' Setta stato linea PA.4->PB0 Portb.2 = Iod.5 ' Setta stato linea PA.5->PB2 Portd.6 = Iod.6 ' Setta stato linea PA.6->PD6 Portd.7 = Iod.7 ' Setta stato linea PA.7->PD7 End Sub ' Inizializza gli 8 pin del uP collegati al port C su CN4 della GMM TST3: ' PC.0 -> PD2 PC.1 -> PD3 PC.2 -> PD4 PC.3 -> PD5 ' PC.4 -> PC2 PC.5 -> PC3 PC.6 -> PB3 PC.7 -> PB4 ' nella modalita` di I/O passata nel parametro dirio (bit a 1=uscita a livello ' alto; bit a 0=ingresso), lasciando inalterato lo stato di tutte le altre linee. Sub Ini_pc(byval Dirio As Byte) ' Inizializza 8 linee del port A, tutte collegate a segnali digitali del ' microcontrollore Portd.2 = 1 ' Setta stato iniziale alto per PC.0->PD2 in uscita Ddrd.2 = Dirio.0 ' Imposta direzione per PC.0->PD2 Portd.3 = 1 ' Setta stato iniziale alto per PC.1->PD3 in uscita Ddrd.3 = Dirio.1 ' Imposta direzione per PC.1->PD3 Portd.4 = 1 ' Setta stato iniziale alto per PC.2->PD4 in uscita Ddrd.4 = Dirio.2 ' Imposta direzione per PC.2->PD4 Portd.5 = 1 ' Setta stato iniziale alto per PC.3->PD5 in uscita Ddrd.5 = Dirio.3 ' Imposta direzione per PC.3->PD5 Portc.2 = 1 ' Setta stato iniziale alto per PC.4->PC2 in uscita Ddrc.2 = Dirio.4 ' Imposta direzione per PC.4->PC2 Portc.3 = 1 ' Setta stato iniziale alto per PC.5->PC3 in uscita Ddrc.3 = Dirio.5 ' Imposta direzione per PC.5->PC3 Portb.3 = 1 ' Setta stato iniziale alto per PC.6->PB3 in uscita Ddrb.3 = Dirio.6 ' Imposta direzione per PC.6->PB3 Portb.4 = 1 ' Setta stato iniziale alto per PC.7->PB4 in uscita Ddrb.4 = Dirio.7 ' Imposta direzione per PC.7->PB4 End Sub ' Setta stato delle 8 linee del uP collegate al port C su CN4 della GMM TST3, ' con lo stato passato in Iod, lasciando inalterato lo stato di tutte le altre ' linee. Sub Set_pc(byval Iod As Byte) Portd.2 = Iod.0 ' Setta stato linea PC.0->PD2 Portd.3 = Iod.1 ' Setta stato linea PC.1->PD3 Portd.4 = Iod.2 ' Setta stato linea PC.2->PD4 Portd.5 = Iod.3 ' Setta stato linea PC.3->PD5 Portc.2 = Iod.4 ' Setta stato linea PC.4->PC2 Portc.3 = Iod.5 ' Setta stato linea PC.5->PC3 Portb.3 = Iod.6 ' Setta stato linea PC.6->PB3 Portb.4 = Iod.7 ' Setta stato linea PC.7->PB4 End Sub ' Procedura che inizializza gestione display a 7 segmenti collegati a linee di ' I/O del Mini Modulo ' Ingresso: Nulla ' Uscita: Patdis() = Vettore con pattern cifre esadecimali da rappresentare su display Sub Ini_disp7seg() Call Ini_pa_full(&Hff) ' Inizializza linee collegate a port A in output Call Ini_pc(&Hf0) ' Inizializza linee collegate a port C.7-4 in output e port C.3-0 in input Call Set_pa_full(&Hff) ' Disattiva tutti i segmenti di tutti i display Call Set_pc(&H00) ' Inizializza vettore con pattern caratteri rappresentabili su display a 7 segmenti. ' Gli indici del vettore coincidono con i codici ASCII a partire da " ", che corrisponde ' all'elemento 1, ovvero con un offset di: ' Offpatt = codice ASCII di " " - 1 = 32 - 1 = 31 ' Dei 64 chr previsti, con codici da 32 a 95 ce ne sono 11 non rappresentabili. Questi ' vengono salvati con il pattern non valido Noshw, equivalente a tutti gli otto segmenti ' accesi, in modo da poterli riconoscere. Altri caratteri sono invece stati rappresentati ' con un pattern convenzionale che produce un simbolo particolare simile ma non identico. ' Nella seguente tabella i simboli particolari sono indicati da .. e sono chiaramente ' visibili nella documentazione del capitolo 46 del corso. Patdis(01) = &H00 ' ASCII(" ")=32 -> Patdis(02) = Noshw ' ASCII("!")=33 -> non rappresentabile Patdis(03) = &H03 ' ASCII("") =34 -> .. Patdis(04) = &H55 ' ASCII("#")=35 -> .. Patdis(05) = &H69 ' ASCII("$")=36 -> .. Patdis(06) = &H6B ' ASCII("%")=37 -> .. Patdis(07) = &H5D ' ASCII("&")=38 -> .. Patdis(08) = &H02 ' ASCII("'")=39 -> ' Patdis(09) = Noshw ' ASCII("(")=40 -> non rappresentabile Patdis(10) = Noshw ' ASCII(")")=41 -> non rappresentabile Patdis(11) = Noshw ' ASCII("*")=42 -> non rappresentabile Patdis(12) = Noshw ' ASCII("+")=43 -> non rappresentabile Patdis(13) = Noshw ' ASCII(",")=44 -> non rappresentabile Patdis(14) = &H40 ' ASCII("-")=45 -> - Patdis(15) = &H80 ' ASCII(".")=46 -> . Patdis(16) = &H42 ' ASCII("/")=47 -> .. Patdis(17) = &H3F ' ASCII("0")=48 -> 0 D0 Patdis(18) = &H06 ' ASCII("1")=49 -> 1 +----+ Patdis(19) = &H5B ' ASCII("2")=50 -> 2 | | Patdis(20) = &H4F ' ASCII("3")=51 -> 3 D5 | | D1 Patdis(21) = &H66 ' ASCII("4")=52 -> 4 | D6 | Patdis(22) = &H6D ' ASCII("5")=53 -> 5 +----+ Patdis(23) = &H7D ' ASCII("6")=54 -> 6 | | Patdis(24) = &H27 ' ASCII("7")=55 -> 7 D4 | | D2 Patdis(25) = &H7F ' ASCII("8")=56 -> 8 | D3 | Patdis(26) = &H6F ' ASCII("9")=57 -> 9 +----+ . D7 Patdis(27) = Noshw ' ASCII(":")=58 -> non rappresentabile Patdis(28) = Noshw ' ASCII(";")=59 -> non rappresentabile Patdis(29) = Noshw ' ASCII("<")=60 -> non rappresentabile Patdis(30) = &H48 ' ASCII("=")=61 -> = Patdis(31) = Noshw ' ASCII(">")=62 -> non rappresentabile Patdis(32) = &H53 ' ASCII("?")=63 -> ? Patdis(33) = &H63 ' ASCII("@")=64 -> .. Patdis(34) = &H5F ' ASCII("A")=65 -> a Patdis(35) = &H7C ' ASCII("B")=66 -> b Patdis(36) = &H58 ' ASCII("C")=67 -> c Patdis(37) = &H5E ' ASCII("D")=68 -> d Patdis(38) = &H7B ' ASCII("E")=69 -> e Patdis(39) = &H71 ' ASCII("F")=70 -> F Patdis(40) = &H3D ' ASCII("G")=71 -> G Patdis(41) = &H74 ' ASCII("H")=72 -> h Patdis(42) = &H10 ' ASCII("I")=73 -> i Patdis(43) = &H1E ' ASCII("J")=74 -> J Patdis(44) = &H75 ' ASCII("K")=75 -> k Patdis(45) = &H30 ' ASCII("L")=76 -> l Patdis(46) = &H37 ' ASCII("M")=77 -> M Patdis(47) = &H54 ' ASCII("N")=78 -> n Patdis(48) = &H5C ' ASCII("O")=79 -> o Patdis(49) = &H73 ' ASCII("P")=80 -> P Patdis(50) = &H67 ' ASCII("Q")=81 -> q Patdis(51) = &H50 ' ASCII("R")=82 -> r Patdis(52) = &H6D ' ASCII("S")=83 -> S Patdis(53) = &H78 ' ASCII("T")=84 -> t Patdis(54) = &H1C ' ASCII("U")=85 -> u Patdis(55) = &H3E ' ASCII("V")=86 -> V Patdis(56) = &H6A ' ASCII("W")=87 -> .. Patdis(57) = &H49 ' ASCII("X")=88 -> .. Patdis(58) = &H6E ' ASCII("Y")=89 -> y Patdis(59) = &H52 ' ASCII("Z")=90 -> z Patdis(60) = &H39 ' ASCII("[")=91 -> [ Patdis(61) = Noshw ' ASCII("\")=92 -> non rappresentabile Patdis(62) = &H0F ' ASCII("]")=93 -> ] Patdis(63) = &H23 ' ASCII("^")=94 -> ^ Patdis(64) = &H08 ' ASCII("_")=95 -> _ ' N.B. I codici dei caratteri minuscoli non sono previsti End Sub ' Rappresenta carattere su display a 7 segmenti della DEB 01 collegato a linee ' di I/O del Mini Modulo. ' La DEB 01 usa display a catodo comune in cui lo stato degli anodi è invertito dai ' transistor Q1..Q8 e lo stato dei catodi è invertito dal buffer di IC1. Per attivare ' un segmento del display si deve settare anodo alto e catodo basso che per le linee ' della DEB 01 su CN4, equivale a settare gli stati invertiti, ovvero basso ed alto. ' Ingresso: Curdisp = Display attuale su cui rappresentare ' Chrshwdis() = Vettore con caratteri da rappresentare, in codice ASCII ' Patdis() = Vettore con pattern caratteri da rappresentare su display ' Uscita: Nulla Sub Shw_dispx(curdisp As Byte) Comdg1 = 0 ' Disattiva tutti i display DG1..DG4 Comdg2 = 0 Comdg3 = 0 Comdg4 = 0 Iod = Chrshwdis(curdisp) ' Ottiene carattere da rappresentare su display attuale passato Iod = Iod - Offpatt ' Ottiene indice pattern del carattere Iod = Patdis(iod) Iod = Iod Xor &HFF ' Inverte pattern per display per circuiteria della DEB 01 Call Set_pa_full(iod) ' Attiva segmenti del display DG1, come da pattern della cifra (anodi invertiti) Select Case Curdisp ' Alimenta display attuale in modo da accendere i segmenti attivati (catodo comune invertito) Case 1 : Comdg1 = 1 ' Alimenta display DG1 Case 2 : Comdg2 = 1 ' Alimenta display DG2 Case 3 : Comdg3 = 1 ' Alimenta display DG3 Case 4 : Comdg4 = 1 ' Alimenta display DG4 End Select End Sub '******************* Fine procedure usate dal programma ************************