Bonjour,
J'aurais besoin d'un peu d'aide pour un petit programme pour un PIC 16F628A.
Je le code en C sur MPLAB.
Il contrôle un afficheur 7 segments, qui commence à 9 et qui décompte jusqu'à 1, puis repart à 9.
En gros, ça fonctionne, mais je n'arrive pas à gérer les rebonds ... J'utilise l'oscillateur interne.
Voici le code (c'est le premier que je fais ... )
La méthode delay_ms, je l'ai récupéré comme ça. Même en augmentant le timer, je dois rester plus longtemps appuyer, mais j'arrive quand même à avoir des sauts de numéro.Code:void delay_ms( uns16 millisec); int compteur; void main(void) { TRISB = 0b00000000; TRISA = 0b00010000; INTCON = 0b01100000; PORTB = 0b01111011; compteur = 9; for (;;) { if (RA4 == 0) { delay_ms(50); } if (RA4 == 0) { compteur = compteur -1; if (compteur == 0) { compteur = 9; } if (compteur == 9) { PORTB = 0b01111011; } if (compteur == 8) { PORTB = 0b01111111; } if (compteur == 7) { PORTB = 0b01010010; } if (compteur == 6) { PORTB = 0b01101111; } if (compteur == 5) { PORTB = 0b01101011; } if (compteur == 4) { PORTB = 0b00111010; } if (compteur == 3) { PORTB = 0b01011011; } if (compteur == 2) { PORTB = 0b01011101; } if (compteur == 1) { PORTB = 0b00010010; } while (RA4 == 0){ } } } } void delay_ms( uns16 millisec) { // Delays a multiple of 1 milliseconds at 4 MHz // using the TMR0 timer char next = 0; OPTION = 2; // prescaler divide TMR0 rate by 8 TMR0 = 2; // deduct 2*8 fixed instruction cycles delay do { next += 125; //clrwdt(); // needed only if watchdog is enabled while (TMR0 != next) // 125 * 8 = 1000 (= 1 ms) ; } while ( -- millisec != 0); }
Vous voyez quelque chose qui ne va pas ?
Merci
-----