Bonjour,
je suis en train d'essayer de vouloir écrire le temps d'appuis sur un bouton poussoir.
Cependant ça merde un peu
je met le code ici :
Le truc c'est que quand j'appuie sur le bouton (Bouton_avant == 0) ça commence à compter, c'est ce qui est attendu, mais quand je lache le bouton (et donc quand Bouton_avant == 1), le temps devrait s'afficher et le compteur devrait s'arrêter, ce qui n'es pas le cas.Code:void mesure_temps (void) { unsigned char tps_maintien; unsigned char tps_mnt; unsigned char bcdtemp; unsigned int bcd; TCCR1A = 0b00000000; // mode normal -> On ne compte pas encore TCCR1B = 0b00000000; // prescaler à 1024 TCNT1L = 0b00000000; //| Timer Control Register Timer 1 à 0; TCNT1H = 0b00000000; //| sei(); while (BP_avant==0) // Tant que le Bouton est appuyé, on commence à compter avec un prescaler de 1024 { TCCR1A = 0b00000000; //|On compte à la vitesse du prescaler TCCR1B = 0b00000101; //| while (BP_avant ==1 ) //Tant que le bouton est relaché { TCCR1A = 0b00000000; //|On arrête de compter TCCR1B = 0b00000000; //| tps_maintien=TCNT1/781; // temps de maintien d'un bouton et temps en seconde + dizaine de seconde (65535/781) = 83 OK tps_mnt = tps_maintien; bcd=CONVERTBCD(tps_mnt+1); bcdtemp=(bcd & 0x0F) + '0'; // Masque effectué afin de ne garder que les huit premier bits du nombre bcd LCD_WriteDigit(bcdtemp,3); // Affichage du digit des unités sur le LCD bcdtemp=((bcd>>=4) & 0x0F) + '0'; // Décaller de quatre bits le nombre bcd, ensuite application du masque LCD_WriteDigit('S',2); LCD_WriteDigit(bcdtemp,1); // Affichage du digit des dizaines sur le LCD bcdtemp=((bcd>>=4) & 0x0F) + '0'; // Décaller encore de quatre bits le nombre bcd, ensuite application du masque TCNT1L =0b00000000; //|Le compteur est remis à 0 TCNT1H =0b00000000; //| } } } // fin fonction
Avez vous une idée???
-----