Quel codice non si riesce a sistemarlo, e il prof mi ha detto di fare una cosa più semplice, semplicissimo, senza interrupt; allora io ho scritto quanto segue, il programma me lo compila ma se qualcuno può darmi qualche consiglio su come poterlo migliorare accetto molto volentieri...
Manca la parte relativa all'impostanzione dell'ora (con i pulsanti), ma non importa...
Vorrei andare sul sicuro quindi vorrei consegnare questo tipo di listato più semplice, anche se meno professionale, al prof gli basta che per giovedì funzioni ottimamente il sistema di conteggio (incremento secondi, minuti, ore). I secondi vanno fatti lampeggiare (alla frequenza di un secondo) su un led di una serie di otto di una scheda attaccata ad una porta del PIC (b).codice:void main(){ char ore, minuti, secondi; //variabili di tipo char contenenti meno di 255 valori. unsigned int orologio;//variabile di tipo unsigned int contenente più di 255 valori. char display[10]={63,6,91,79,102,109,125,7,127,111};//variabile di tipo char contenente meno di 255 valori. char ore_d, ore_u, minuti_d, minuti_u=0;//variabile di tipo char contenente meno di 255 valori. char Block=0;//variabile di tipo char contenente meno di 255 valori. //***** impostazioni porte ***** ADCON1=6; trisa=255; trisc=0; trisb=0; trisd=0; porta=0; portd=0; portc=0; portb=0; //******************************* start: ore=0; poro: //etichetta di salto minuti=0; tato: //etichetta di salto secondi=0; ocio: //etichetta di salto orologio=0; End: //***** pulsanti ***** (SBAGLIATI, DA CORREGGERE) pulsante_a: if(Block==2){ if(porta.F1)minuti++; if(minuti==60)minuti=0; if(porta.F3)Block++; if(Block==1){ if(porta.F1)ore++; if(ore==24)ore=0; //******************** ore_d=ore/10; ore_u=(ore-(ore_d*10)); portc=4; portd=display[ore_u]; delay_ms(1); portc=8; portd=display[ore_d]; delay_ms(1); goto pulsante} minuti_d=minuti/10; minuti_u=(minuti-(minuti_d*10)); portc=1; portd=display[minuti_u]; delay_ms(1); portc=2; portd=display[minuti_d]; delay_ms(1); goto pulsante} if (Block==3)Block=0; portb.F0=~portb.F0; if(orologio==124)secondi++; if(orologio==124)goto ocio portb.F0=~portb.F0; if(secondi==1)minuti++; if(secondi==1)goto tato if(minuti==2)ore++; if(minuti==2)goto poro if(ore==24) goto start minuti_d=minuti/10; minuti_u=(minuti-(minuti_d*10)); portc=1; portd=display[minuti_u]; delay_us(1993); portc=2; portd=display[minuti_d]; delay_us(1993); ore_d=ore/10; ore_u=(ore-(ore_d*10)); portc=4; portd=display[ore_u]; delay_us(1993); portc=8; portd=display[ore_d]; delay_us(1993); orologio++; goto End }
L'incremento dei minuti e delle ore vanno fatti incrementare su una scheda con 4 display 7 segmenti in MUX nel seguente modo: H H M M.
Qualcuno mi potrebbe dare qualche consiglio su delle modifiche che posso apportare con tranquillità?
Grazie mille...
:master:


Rispondi quotando