#include #define DATA BIT0 //DS 1.0 #define CLOCK BIT4 // SH_CP 1.4 #define LATCH BIT5 // ST_CP 1.5 #define ENABLE BIT6 // OE 1.6 #define BUTTON BIT3 // BP 1.3 //Declaration des prototypes de fonctions void delay(unsigned int ms); void enable(void); void shiftOut(unsigned char val); void pinWrite(unsigned int bit, unsigned char val); void pulseClock(void); void main(void) { WDTCTL = WDTPW + WDTHOLD; //stop watchdog P1DIR |= (DATA + CLOCK + LATCH + ENABLE); //mise en sortie P1IE |= BUTTON; //generer les interruption pour 1.3 P1SEL &= ~BUTTON; //selection du BUTTON P1DIR &= ~BUTTON; //passage en mode input P1REN |= BUTTON; //activer res pull-up _BIS_SR(GIE); // Enable interrupts P1OUT &= ~ENABLE; //activer le OE sur shift int i; for(;;) { for(i=0; i<8; i++) { shiftOut(1 << i); delay(50); } for(i=7; i>0; i--) { shiftOut(1 << i); delay(15); } } } void delay(unsigned int ms) { while(ms--) { __delay_cycles(1000); } } void shiftOut(unsigned char val) { P1OUT &= ~LATCH; int i; for(i=0; i<8; i++) { pinWrite(DATA, (val & (1 << i))); pulseClock(); } P1OUT |= LATCH; P1OUT &= ~LATCH; } void pinWrite(unsigned int bit, unsigned char val) { if(val) P1OUT |= bit; else P1OUT &= ~bit; } void pulseClock(void) { P1OUT |= CLOCK; P1OUT &= ~CLOCK; } #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { P1IFG &= ~BUTTON; // P1.3 Interrupt Flag cleared P1OUT ^= ENABLE; }