main.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include <msp430g2553.h>
  2. #define DATA BIT0 //DS 1.0
  3. #define CLOCK BIT4 // SH_CP 1.4
  4. #define LATCH BIT5 // ST_CP 1.5
  5. #define ENABLE BIT6 // OE 1.6
  6. #define BUTTON BIT3 // BP 1.3
  7. //Declaration des prototypes de fonctions
  8. void delay(unsigned int ms);
  9. void enable(void);
  10. void shiftOut(unsigned char val);
  11. void pinWrite(unsigned int bit, unsigned char val);
  12. void pulseClock(void);
  13. void main(void) {
  14. WDTCTL = WDTPW + WDTHOLD; //stop watchdog
  15. P1DIR |= (DATA + CLOCK + LATCH + ENABLE); //mise en sortie
  16. P1IE |= BUTTON; //generer les interruption pour 1.3
  17. P1SEL &= ~BUTTON; //selection du BUTTON
  18. P1DIR &= ~BUTTON; //passage en mode input
  19. P1REN |= BUTTON; //activer res pull-up
  20. _BIS_SR(GIE); // Enable interrupts
  21. P1OUT &= ~ENABLE; //activer le OE sur shift
  22. int i;
  23. for(;;) {
  24. for(i=0; i<8; i++) {
  25. shiftOut(1 << i);
  26. delay(50);
  27. }
  28. for(i=7; i>0; i--) {
  29. shiftOut(1 << i);
  30. delay(15);
  31. }
  32. }
  33. }
  34. void delay(unsigned int ms) {
  35. while(ms--) {
  36. __delay_cycles(1000);
  37. }
  38. }
  39. void shiftOut(unsigned char val) {
  40. P1OUT &= ~LATCH;
  41. int i;
  42. for(i=0; i<8; i++) {
  43. pinWrite(DATA, (val & (1 << i)));
  44. pulseClock();
  45. }
  46. P1OUT |= LATCH;
  47. P1OUT &= ~LATCH;
  48. }
  49. void pinWrite(unsigned int bit, unsigned char val) {
  50. if(val) P1OUT |= bit;
  51. else P1OUT &= ~bit;
  52. }
  53. void pulseClock(void) {
  54. P1OUT |= CLOCK;
  55. P1OUT &= ~CLOCK;
  56. }
  57. #pragma vector=PORT1_VECTOR
  58. __interrupt void Port_1(void) {
  59. P1IFG &= ~BUTTON; // P1.3 Interrupt Flag cleared
  60. P1OUT ^= ENABLE;
  61. }