Bonjour, voila je me suis inscrit sur futura forum il y a une semaine de ça pour un buttage sur la programmation d'une incrémentation.
Le problème étant réglé je bute sur un autre...
J'ai testé la ligne de code qui permet que quand j'appuie sur le bouton poussoir un segment de mon premier afficheur s'allume. Cela fonctionne !!
Donc en principe si j'appuie sur mon bouton poussoir une fois cela devrait m'afficher un 1 et puis si j'appuie une autre fois cela devrait me remplacer le 1 par un 2 ...etc
Mais non, rien ne ce passe ...
Je ne sais plus quoi faire donc si vous pourriez m'éclairer su mon petit problème ...
Voici mon code :
Code:#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 #define AFF1 0xBF //10111111 #define AFF2 0x7F //11110111 #define AFF3 0xBF //10111111 #define AFF4 0xDF //11011111 #define AFF5 0xFB //11111011 #define unite 1 #define dizaine 2 #define centaine 3 #define millier 4 #define diz_millier 5 unsigned int num=0, temp; //Variable d'affichage unsigned int const tempo=30; //30ms void init(){ ANSEL = 0; // Configure AN pins as digital ANSELH = 0; C1ON_bit = 0; // Disable comparators C2ON_bit = 0; TRISA = 0x04; 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 affiche(unsigned int chiffre, unsigned char digit){ //Extinction de l'afficheur : aucun digit ni segment sélectionnés PORTB = PORTB | 0b11111111; PORTC = PORTC | 0b11111111; switch(chiffre){ case 0 : PORTC & SegA & SegB & SegD & SegF, PORTB & SegC; case 1 : PORTC & SegB, PORTB & SegC; case 2 : PORTC & SegA & SegB & SegE & SegD, PORTB & SegG; case 3 : PORTC & SegA & SegB & SegD, PORTB & SegC & SegG; case 4 : PORTC & SegF & SegB, PORTB & SegC & SegG; case 5 : PORTC & SegA & SegF &SegD, PORTB & SegC & SegG; case 6 : PORTC & SegA & SegF & SegE & SegD, PORTB & SegC & SegG; case 7 : PORTC & SegA & SegB, PORTB & SegC; case 8 : PORTC & SegA & SegB & SegD & SegF & SegE , PORTB & SegC & SegG; case 9 : PORTC & SegA & SegB & SegD & SegF, PORTB & SegC & SegG; } switch( digit ){ case unite : PORTC=PORTC & AFF1; case dizaine : PORTC=PORTC & AFF2; case centaine : PORTB=PORTB & AFF3; case millier : PORTB=PORTB & AFF4; case diz_millier : PORTC=PORTC & AFF5; delay_ms(10); } } void main() { init (); test_seg(); while(1) { // detection d'appui sur le poussoir // while(1){ if (PORTA.B2 ==0){ num+=1; //num = num + 1; delay_ms(100); // PORTC = PORTC & AFF1 & SegA; } // } // test de mon bouton poussoir //séquencement en chiffre du nombre à afficher temp = num/10; temp=temp*10; temp=num-temp; affiche(temp,unite); } }
-----