/* Quand on presse un bouton, la LED reste allumée. Si on presse ensuite le même bouton, elle s'éteint. */ #include " io430.h" void main ( void ) { unsigned char memo; // déclare une variable de 8 bits pour stocker les entrées // Stop watchdog timer to prevent time out res et WDTCTL = WDTPW + WDTHOLD; P1DIR |= 0x0F ; // P1.0 à P1.3 en sortie P1DIR &= ~0xF0 ; // P1.4 à P1.7 en entrée memo=P1IN & 0xF0 ; // memorise l'état acctuel des switches P1OUT &= 0xF0 ; // éteint les LEDs while ( 1 ) { if (memo!=(P1IN & 0xF0 ) ) // si l'état des interrupteurs a changé { memo=(P1IN^memo)&0xF0 ; // met dans memo l'interrupteur et bit qui a changé if ( (P1IN & 0xF0) & memo) // l'interrupteur a été pressé { memo = ((memo&0x20 )>>2) | ((memo&0x40)>>4) | ( (memo&0x10)>>3) | ((memo&0x80)>>7); // aligne memo avec les LEDs P1OUT = P1OUT ^ (memo&0x0F ) ; // inverse uniquement les bits qui on changé } memo=P1IN & 0xF0 ; // memorise le nouvel état des interrupteurs } } }