#include /* * p1.0 = data clock * p1.1 = data * p1.2 = storage clock */ void send(unsigned long data, int floor); void delay(int i); int main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer BCSCTL1 = CALBC1_16MHZ; //changing the DCO's oscillations to 16MHz DCOCTL = CALDCO_16MHZ; P1DIR |= 0x0f; //p1 -> 0,1,2,3 pins P1OUT = 0x00; //p1 <- 0 int i,j; unsigned long l=0; while(1) { send(0x00,0x00); delay(5000); //demo1 for(i=0;i<8;i++) { send(0xffff, 0x01); delay(2000); send(0xffff, 0x02); delay(2000); send(0xffff, 0x04); delay(2000); send(0xffff, 0x08); delay(2000); } for(i=0;i<4;i++) { send(0xaaaa, 0x01); delay(1000); send(0x5555, 0x02); delay(1000); send(0xaaaa, 0x04); delay(1000); send(0x5555, 0x08); delay(1000); } //demo2 send(0x00,0x00); delay(5000); for(i=0;i<8;i++) { for(j=0;j<700;j++) { send(0x1818, 0x01); send(0x1818, 0x02); send(0x1818, 0x04); send(0x1818, 0x08); } for(j=0;j<700;j++) { send(0x2424, 0x01); send(0x2424, 0x02); send(0x2424, 0x04); send(0x2424, 0x08); } for(j=0;j<700;j++) { send(0x4242, 0x01); send(0x4242, 0x02); send(0x4242, 0x04); send(0x4242, 0x08); } for(j=0;j<700;j++) { send(0x8181, 0x01); send(0x8181, 0x02); send(0x8181, 0x04); send(0x8181, 0x08); } } for(i=0;i<4;i++) { send(0xaaaa, 0x01); delay(1000); send(0x5555, 0x02); delay(1000); send(0xaaaa, 0x04); delay(1000); send(0x5555, 0x08); delay(1000); } //demo3 send(0x00,0x00); delay(5000); for(i=0;i<4;i++) { for(j=0; j<2000; j++) { send(0x01, 0x01); } for(j=0; j<1500; j++) { send(0xc3, 0x01); send(0xc3, 0x02); } for(j=0; j<1000; j++) { send(0x7e7, 0x01); send(0x7e7, 0x02); send(0x7e7, 0x04); } for(j=0; j<500; j++) { send(0xffff, 0x01); send(0xffff, 0x02); send(0xffff, 0x04); send(0xffff, 0x08); } for(j=0; j<10000; j++) { send(0x00, 0x00); } } for(i=0;i<4;i++) { send(0xaaaa, 0x01); delay(1000); send(0x5555, 0x02); delay(1000); send(0xaaaa, 0x04); delay(1000); send(0x5555, 0x08); delay(1000); } //demo4 send(0x00,0x00); delay(5000); for(i=0;i<4;i++) { for(j=0; j<10000; j++) { send(0x00, 0x00); } for(j=0; j<500; j++) { send(0x01, 0x01); } for(j=0; j<400; j++) { send(0xc3, 0x01); send(0xc3, 0x02); } for(j=0; j<300; j++) { send(0x7e7, 0x01); send(0x7e7, 0x02); send(0x7e7, 0x04); } for(j=0; j<150; j++) { send(0xffff, 0x01); send(0xffff, 0x02); send(0xffff, 0x04); send(0xffff, 0x08); } for(j=0; j<300; j++) { send(0x7e7, 0x01); send(0x7e7, 0x02); send(0x7e7, 0x04); } for(j=0; j<400; j++) { send(0xc3, 0x01); send(0xc3, 0x02); } for(j=0; j<500; j++) { send(0x01, 0x01); } for(j=0; j<1500; j++) { send(0x00, 0x00); } for(j=0; j<500; j++) { send(0x01, 0x01); } for(j=0; j<400; j++) { send(0xc3, 0x01); send(0xc3, 0x02); } for(j=0; j<300; j++) { send(0x7e7, 0x01); send(0x7e7, 0x02); send(0x7e7, 0x04); } for(j=0; j<150; j++) { send(0xffff, 0x01); send(0xffff, 0x02); send(0xffff, 0x04); send(0xffff, 0x08); } for(j=0; j<300; j++) { send(0x7e7, 0x01); send(0x7e7, 0x02); send(0x7e7, 0x04); } for(j=0; j<400; j++) { send(0xc3, 0x01); send(0xc3, 0x02); } for(j=0; j<500; j++) { send(0x01, 0x01); } } for(i=0;i<4;i++) { send(0xaaaa, 0x01); delay(1000); send(0x5555, 0x02); delay(1000); send(0xaaaa, 0x04); delay(1000); send(0x5555, 0x08); delay(1000); } //demo5 send(0x00,0x00); delay(5000); l=0; for(i=0;i<16;i++) { for(j=0;j<2000;j++) { send(l,0x1); } l=l<<1; l++; } l=0; for(i=0;i<16;i++) { for(j=0;j<1000;j++) { send(0xffff,0x1); send(l,0x2); } l=l<<1; l++; } l=0; for(i=0;i<16;i++) { for(j=0;j<500;j++) { send(0xffff,0x1); send(0xffff,0x2); send(l,0x4); } l=l<<1; l++; } l=0; for(i=0;i<16;i++) { for(j=0;j<250;j++) { send(0xffff,0x1); send(0xffff,0x2); send(0xffff,0x4); send(l,0x8); } l=l<<1; l++; } l=0xffff; for(i=0;i<16;i++) { for(j=0;j<250;j++) { send(0xffff,0x1); send(0xffff,0x2); send(0xffff,0x4); send(l,0x8); } l=l>>1; } l=0xffff; for(i=0;i<16;i++) { for(j=0;j<500;j++) { send(0xffff,0x1); send(0xffff,0x2); send(l,0x4); } l=l>>1; } l=0xffff; for(i=0;i<16;i++) { for(j=0;j<1000;j++) { send(0xffff,0x1); send(l,0x2); } l=l>>1; } l=0xffff; for(i=0;i<16;i++) { for(j=0;j<2000;j++) { send(l,0x1); } l=l>>1; } for(i=0;i<4;i++) { send(0xaaaa, 0x01); delay(1000); send(0x5555, 0x02); delay(1000); send(0xaaaa, 0x04); delay(1000); send(0x5555, 0x08); delay(1000); } //demo6 send(0x00,0x00); delay(5000); for(i=0;i<2;i++) { send(0x01,0x01); delay(2000); send(0x40,0x02); delay(2000); send(0x400,0x04); delay(2000); send(0x1000,0x08); delay(2000); send(0x0400,0x08); delay(2000); send(0x40,0x08); delay(2000); send(0x01,0x08); delay(2000); send(0x40,0x04); delay(2000); send(0x400,0x02); delay(2000); send(0x1000,0x01); delay(2000); send(0x800,0x01); delay(2000); send(0x10,0x01); delay(2000); send(0x8,0x01); delay(2000); send(0x20,0x02); delay(2000); send(0x200,0x04); delay(2000); send(0x8000,0x08); delay(2000); send(0x8000,0x04); delay(2000); send(0x8000,0x02); delay(2000); send(0x8000,0x01); delay(2000); send(0x200,0x01); delay(2000); send(0x20,0x01); delay(2000); send(0x8,0x01); delay(2000); send(0x8,0x02); delay(2000); send(0x8,0x04); delay(2000); send(0x8,0x08); delay(2000); send(0x10,0x08); delay(2000); send(0x800,0x08); delay(2000); send(0x1000,0x08); delay(2000); send(0x1000,0x04); delay(2000); send(0x1000,0x02); delay(2000); send(0x1000,0x01); delay(2000); send(0x400,0x01); delay(2000); send(0x40,0x01); delay(2000); send(0x1,0x01); delay(2000); } send(0x00,0x00); delay(5000); for(i=0;i<4;i++) { send(0xaaaa, 0x01); delay(1000); send(0x5555, 0x02); delay(1000); send(0xaaaa, 0x04); delay(1000); send(0x5555, 0x08); delay(1000); } } } void send(unsigned long data, int floor) { int b=0; int bit; P1OUT &= ~BIT2; //storage clock low for(bit=0; bit<16; bit++) //shift the data, as much as the desired position { P1OUT &= ~BIT0; //data clock low b = (data & 0x01); if(b) { P1OUT |= BIT1; //data 1 } else { P1OUT &= ~BIT1; //data 0 } P1OUT |= BIT0; //data clock high data = data>>1; //shift the data } for(bit=0; bit<8; bit++) //shift the data, as much as the desired position { P1OUT &= ~BIT0; //data clock low b = (floor & 0x01); if(b) { P1OUT |= BIT1; //data 1 } else { P1OUT &= ~BIT1; //data 0 } P1OUT |= BIT0; //data clock high floor = floor>>1; //shift the data } P1OUT |= BIT2; //storage clock high } void delay(int i) { for(; i>0; i--) __delay_cycles(1000); }