1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #include <msp430g2553.h>
- #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;
- }
|