Bonjour à tous,
Je suis en Terminal BAC PRO Systèmes Electroniques Et Numériques et je suis dans la Spé EIE (Electroniques Industrielles Embarquées).
Je travaille actuellement sur le projet d'un "compte tours" avec Micro C pro for PIC. Avec un PIC 16F690.
Je vous expose mon problème. sur ma plaque d’expérimentation qui contient 5 afficheurs à segments je dois afficher le nombre de fois ou le bouton poussoir a été enfoncé.
Voici mon code acctuel :
Code://segments des afficheurs #define SegA 0xEF //11101111 #define SegB 0xDF //11011111 #define SegC 0xEF //11101111 #define SegD 0xFD //11111101 #define SegE 0xFE //11111110 #define SegF 0xF7 //11110111 #define SegG 0x7F //01111111 // les afficheurs #define AFF1 0xBF //10111111 #define AFF2 0x7F //11110111 #define AFF3 0xBF //10111111 #define AFF4 0xDF //11011111 #define AFF5 0xFB //11111011 // mon bouton poussoir #define press RA2 //Configure le port A sur la broche 2 le bouton poussoir unsigned int const tempo=50; //20ms void init(){ ANSEL = 0; // Configure AN pins as digital ANSELH = 0; C1ON_bit = 0; // Disable comparators C2ON_bit = 0; TRISA = 0x00; TRISB = 0x00; // set direction to be output TRISC = 0x00; // set direction to be output PORTB = 0xff; PORTC = 0xff; // L'afficheur est totalement éteind /* INTCON = 0b10110000 ; OPTION_REG = 0b11010001; OSCCON = OSCCON | 0b01110000; //Fréquence 8MHz */ } void aff_off(){ PORTB = PORTB | 0b11111111; PORTC = PORTC | 0b11111111; delay_ms(50); } void test_seg() { //test de tous les segments de AFF1 à AFF5 temps par seg 50ms //AFF1 aff_off(); PORTC = PORTC & AFF1 & SegA; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF1 & SegB; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF1; PORTB = PORTB & SegC; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF1 & SegD; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF1 & SegE; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF1 & SegF; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF1; PORTB = PORTB & SegG; delay_ms(tempo); //AFF2 aff_off(); PORTC = PORTC & AFF2 & SegA; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF2 & SegB; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF2; PORTB = PORTB & SegC; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF2 & SegD; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF2 & SegE; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF2 & SegF; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF2; PORTB = PORTB & SegG; delay_ms(tempo); //AFF3 aff_off(); PORTC = PORTC & SegA; PORTB = PORTB & AFF3; delay_ms(tempo); aff_off(); PORTC = PORTC & SegB; PORTB = PORTB & AFF3; delay_ms(tempo); aff_off(); PORTB = PORTB & SegC & AFF3 ; delay_ms(tempo); aff_off(); PORTC = PORTC & SegD; PORTB = PORTB & AFF3; delay_ms(tempo); aff_off(); PORTC = PORTC & SegE; PORTB = PORTB & AFF3; delay_ms(tempo); aff_off(); PORTC = PORTC & SegF; PORTB = PORTB & AFF3; delay_ms(tempo); aff_off(); PORTB = PORTB & SegG & AFF3; delay_ms(tempo); //AFF4 aff_off(); PORTC = PORTC & SegA; PORTB = PORTB & AFF4; delay_ms(tempo); aff_off(); PORTC = PORTC & SegB; PORTB = PORTB & AFF4; delay_ms(tempo); aff_off(); PORTB = PORTB & SegC & AFF4; delay_ms(tempo); aff_off(); PORTC = PORTC & SegD; PORTB = PORTB & AFF4; delay_ms(tempo); aff_off(); PORTC = PORTC & SegE; PORTB = PORTB & AFF4; delay_ms(tempo); aff_off(); PORTC = PORTC & SegF; PORTB = PORTB & AFF4; delay_ms(tempo); aff_off(); PORTB = PORTB & SegG & AFF4; delay_ms(tempo); //AFF5 aff_off(); PORTC = PORTC & AFF5 & SegA; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF5 & SegB; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF5; PORTB = PORTB & SegC; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF5 & SegD; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF5 & SegE; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF5 & SegF; delay_ms(tempo); aff_off(); PORTC = PORTC & AFF5; PORTB = PORTB & SegG; delay_ms(tempo); } void valid_test (){ //valide le test en faisant clignoter 4fois tous les afficheurs aff_off (); PORTC =PORTC & SegA & SegB & SegD & SegE & SegF & AFF1 & AFF2 & AFF5; PORTB = PORTB & SegC & SegG & AFF3 & AFF4; delay_ms(tempo); aff_off (); PORTC =PORTC & SegA & SegB & SegD & SegE & SegF & AFF1 & AFF2 & AFF5; PORTB = PORTB & SegC & SegG & AFF3 & AFF4; delay_ms(tempo); aff_off (); PORTC =PORTC & SegA & SegB & SegD & SegE & SegF & AFF1 & AFF2 & AFF5; PORTB = PORTB & SegC & SegG & AFF3 & AFF4; delay_ms(tempo); aff_off (); PORTC =PORTC & SegA & SegB & SegD & SegE & SegF & AFF1 & AFF2 & AFF5; PORTB = PORTB & SegC & SegG & AFF3 & AFF4; delay_ms(tempo); } void chif1 () { // allume segs a,b,c sur l'afficheur 1 PORTC = PORTC & SegB; PORTB = PORTB & SegC; PORTC = PORTC & AFF1; delay_ms(500); } aff_off(); void chif2 () { PORTC = PORTC & SegA & SegB & SegE & SegD; PORTB = PORTB & SegG; PORTC = PORTC & AFF1; delay_ms(500); } void main() { init (); test_seg(); valid_test (); while(1) { chif1(); aff_off(); chif2 (); aff_off(); } }
Le problème est que je sais pas comment m'y prendre pour plusieurs raisons :
Je ne pas pas faire de "#designe" pour les chiffres de 1 à 9 puisque les segments des afficheurs ne sont pas tous sur les mêmes port (B et C)
Comment pourrais-je faire ça ?
Est-ce possible de faire ça : "#define press RA2 //Configure le port A2 le bouton poussoir"
J'espère être assez claire...
En espèrant que ca ne soit pas bloqué parce que c'est considéré comme une aide (même plus) d'exercice...
Et je remercie d'avance les personnes qui m'aiderons
Tobi86
-----