/********************************************************* LED Sequencer 1.0 Kit Eastern Voltage Reseach, LLC http://www.easternvoltageresearch.com This code may be distributed freely, and modified at will so long as proper credit is given if used for your own project and it is not used for commercial purposes. PIC Processor = PIC16F505 **********************************************************/ #include <16f505.h> // Processor Declaration #fuses INTRC_IO,NOPROTECT,NOWDT // Internal Osc, No Code Protect, No Watchdog Timer #use delay (clock=4000000) // 16MHz Internal Oscillator //#use standard_io(b) //#use standard_io(c) #define L1 PIN_C3 #define L2 PIN_C4 #define L3 PIN_C5 #define L4 PIN_B4 #define L5 PIN_C2 #define L6 PIN_C1 #define L7 PIN_C0 #define L8 PIN_B2 #define PB PIN_B5 #define set_options(value) {#ASM \ MOVLW value \ OPTION \ #ENDASM} #separate void delay (int delaycount); #separate void ledmode0 (void); #separate void ledmode1 (void); #separate void ledmode2 (void); #separate void ledmode3 (void); #separate void ledmode4 (void); #separate void ledmode5 (void); #separate void ledmode6 (void); int delaycount, buttoncount, mode, flash; //************************************ //MAIN PROGRAM //************************************ void main (void) // Begin MAIN Program { delay_ms(500); set_options(0x0b1101111); // Initialize TOSC so RC5 can be used as input mode=1; flash=1; buttoncount=0; while (TRUE) { if (input(PB)==0) { delay_ms(20); while (input(PB)==0) { buttoncount++; delay_ms(15); if (buttoncount>5) output_high(L1); if (buttoncount>40) output_high(L2); if (buttoncount>100) output_high(L3); } } if (buttoncount>=100) { buttoncount=0; mode=1; flash=1; } if (buttoncount>=40) { buttoncount=0; mode++; flash=1; if (mode>7) { mode=1; } } if (buttoncount>=5) { buttoncount=0; flash++; if (flash>4) { flash=1; } } output_low (L1); output_low (L2); output_low (L3); delaycount=100/flash; switch (mode) { case 1: ledmode0(); break; case 2: ledmode1(); break; case 3: ledmode2(); break; case 4: ledmode3(); break; case 5: ledmode4(); break; case 6: ledmode5(); break; case 7: ledmode6(); break; } } } //************************************ //SUBROUTINES //************************************ #separate void delay (int delaycount ) { delay_ms(delaycount); } #separate void ledmode0 (void) { output_low (L1); output_low (L2); output_low (L3); output_low (L4); output_low (L5); output_low (L6); output_low (L7); output_low (L8); } #separate void ledmode1 (void) { output_high(L1); delay(delaycount); output_low(L1); output_high(L2); delay(delaycount); output_low(L2); output_high(L3); delay(delaycount); output_low(L3); output_high(L4); delay(delaycount); output_low(L4); output_high(L5); delay(delaycount); output_low(L5); output_high(L6); delay(delaycount); output_low(L6); output_high(L7); delay(delaycount); output_low(L7); output_high(L8); delay(delaycount); output_low(L8); output_high(L7); delay(delaycount); output_low(L7); output_high(L6); delay(delaycount); output_low(L6); output_high(L5); delay(delaycount); output_low(L5); output_high(L4); delay(delaycount); output_low(L4); output_high(L3); delay(delaycount); output_low(L3); output_high(L2); delay(delaycount); output_low(L2); } #separate void ledmode2 (void) { output_high(L1); output_high(L2); delay(delaycount); output_low(L1); output_high(L3); delay(delaycount); output_low(L2); output_high(L4); delay(delaycount); output_low(L3); output_high(L5); delay(delaycount); output_low(L4); output_high(L6); delay(delaycount); output_low(L5); output_high(L7); delay(delaycount); output_low(L6); output_high(L8); delay(delaycount); output_low(L8); output_high(L6); delay(delaycount); output_low(L7); output_high(L5); delay(delaycount); output_low(L6); output_high(L4); delay(delaycount); output_low(L5); output_high(L3); delay(delaycount); output_low(L4); output_high(L2); delay(delaycount); output_low(L3); output_low(L2); } #separate void ledmode3 (void) { output_high (L1); output_high (L2); output_high (L3); output_high (L4); output_high (L5); output_high (L6); output_high (L7); output_high (L8); delay(delaycount); output_low (L1); output_low (L2); output_low (L3); output_low (L4); output_low (L5); output_low (L6); output_low (L7); output_low (L8); delay(delaycount); } #separate void ledmode4 (void) { delaycount=150/flash; output_high (L1); output_high (L8); delay(delaycount); output_low (L1); output_low (L8); output_high (L2); output_high (L7); delay(delaycount); output_low (L2); output_low (L7); output_high (L3); output_high (L6); delay(delaycount); output_low (L3); output_low (L6); output_high (L4); output_high (L5); delay(delaycount); output_low (L4); output_low (L5); } #separate void ledmode5 (void) { delaycount=150/flash; output_high (L4); output_high (L5); delay(delaycount); output_low (L4); output_low (L5); output_high (L3); output_high (L6); delay(delaycount); output_low (L3); output_low (L6); output_high (L2); output_high (L7); delay(delaycount); output_low (L2); output_low (L7); output_high (L1); output_high (L8); delay(delaycount); output_low (L1); output_low (L8); } #separate void ledmode6 (void) { delaycount=255/flash; output_high(L1); output_high(L2); output_high(L3); output_high(L4); delay(delaycount); delay(delaycount); output_low(L1); output_low(L2); output_low(L3); output_low(L4); output_high(L5); output_high(L6); output_high(L7); output_high(L8); delay(delaycount); delay(delaycount); output_low(L5); output_low(L6); output_low(L7); output_low(L8); }