Costruire un prg che mostri su un display a 7 segmenti un numero progressivo da 0 a 9.
Iniziamo a configurare la Development Board EasyPic4 con micro
PIC16F887.
Spostiamo gli interruttori dello dip switch SW2 in modo che vengano
abilitati i led associati alla porta A e porta D (interruttori 1 e
4 posti ad ON)
La porta A viene utilizzata per selezionare quale display a 7 segmenti utilizzare. Se pongo a 1 il primo bit a destra della porta A (PORTA=0b00000001) verrà utilizzato il primo display a destra, se invece pongo a 1 il secondo bit a destra della porta A (PORTA=0b00000010) verrà utilizzato il secondo display e cosi via ... I segmenti del display sono collegati alla porta D secondo lo schema sottostante.
Spostiamo l'interuttore 8 su ON del dip switch SW2 in modo che venga abilitato il primo display a 7 segmenti a destra. Ecco il codice del nostro programma:
unsigned char num; // array con la codifica per i DISPLAY a 7 segmenti // ------------------------------------------------ // // Valore in Segmenti deci- Valore in Segmenti deci- // display .GFEDCBA male display .GFEDCBA male // ---------------------------- ---------------------------- // 0 00111111 63 5 01101101 109 // 1 00000110 6 6 01111101 125 // 2 01011011 91 7 00000111 7 // 3 01001111 79 8 01111111 127 // 4 01100110 102 9 01101111 111 // // ------------------------------------------------ unsigned char DISPLAY[10] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111}; void main() { TRISA = 0; // tutti i bit della porta A sono di output TRISD = 0; // tutti i bit della porta D sono di output // Abilito il primo display PORTA = 0b00000001; num = 0; while (1) { PORTD=DISPLAY[num % 10]; num=num+1; Delay_ms(1000); } } |
Attenzione affinchè il programma funzioni correttamente è necessario disabilitare durante la fase di caricamento del programma il Watchdog Timer. Quando il Watchdog Timer (abbreviato WDT) è abilitato un contatore viene posto a 0 ed incrementato di 1 ad ogni clock . Quando il contatore arriva al valore FF il PIC viene resettato, il nostro programma viene riavviato dall'inizio e il contatore riportato a zero. Quindi il WDT resetta periodicamente il PIC. L'unico modo per evitare questo riavvio è quello di resettare a 0 il WDT mediante un'opportuna istruzione all'interno del nostro programma.