;-----------------------------------------------------------------------------------------------; ; LED cube ; ; -------- ; ; ; ; Author: Craig Smith ; ; Date: June 2008 ; ; ; ; 4MHz internal resonator used ; ; ; ; ; ; 3 layers of 3 x 3 LEDs ; ; ; ; RB6 - Top layer common ; ; RB6 - Middle layer common ; ; RB7 - Bottom layer common ; ; ; ; ; ; Each layer of LED's Anodes ; ; ; ; ; RC1 RC0 RB4 ; ; ; ; ; ; RC4 RC3 RC2 ; ; ; ; ; ; RC7 RC6 RC5 ; ; ; ; 4 registers are used to hold the patterns for the LEDs ; ; ; ; Layer1 - Top layer (8 Leds) ; ; Layer2 - Middle layer (8 Leds) ; ; Layer3 - Bottom layer (8 Leds) ; ; Layer4 - bits 7,6 and 5 hold the 9th LED for top, middle and bottom, bits 4 and 3 hold the ; ; brightness (how long it is on for), bits 2,1 and 0 is the time the specific ; ; pattern is on until the next one is retrieved ; ; ; ; There are 4 look-up tables Table1, Table2, Table3 and Table4. These are for each layer ; ; giving a total of 255 different patterns. ; ;-----------------------------------------------------------------------------------------------; list p=16f628A ; list directive to define processor #include ; processor specific variable definitions errorlevel -302 ; suppress message 302 from list file __CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT cblock 0x20 Delay1 ; delay loop 1 Delay2 ; delay loop 2 Delay3 ; delay loop 3 TimeDelay ; time delay x 0.001 s EndCount ; used to tell PIC the end of the table is reached Counter ; used as table counter Layer1 ; top layer Layer2 ; middle layer Layer3 ; bottom layer Layer4 ; 9th Led on each layer, brightness, and time Brightness ; LED brightness Time ; time for each pattern to stay Temp ; temp register endc org 0 goto Start ; jump to Start ;-----------------------------------------------------------------------------------------------; ; Subroutines are here at the top ; ;-----------------------------------------------------------------------------------------------; ;-----------------------------------------------------------------------------------------------; ; BigSmall sub routine ; ;-----------------------------------------------------------------------------------------------; BigSmall: movlw b'11111111' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'11111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'11111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'00001000' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'00001000' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output return ;-----------------------------------------------------------------------------------------------; ; FlashingLines sub routine ; ;-----------------------------------------------------------------------------------------------; FlashingLines: movlw b'00100100' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'11111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'01001001' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'10010010' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000011' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'11111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00011100' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'11100000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'10010010' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'01001001' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00100100' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'11111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'11100000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00011100' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000011' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'11111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output return ;-----------------------------------------------------------------------------------------------; ; LayerBrightness sub routine ; ;-----------------------------------------------------------------------------------------------; LayerBrightness: movlw b'11111111' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'10000000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'11111111' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'01000000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'11111111' movwf Layer3 movlw b'00100000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'11111111' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'01001000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00001000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'10010000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00010000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'11111111' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'01010000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00010000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'11111111' movwf Layer3 movlw b'00111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'11111111' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'01011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'10010000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00010000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'11111111' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'01010000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00010000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'11111111' movwf Layer3 movlw b'00101000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00001000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'11111111' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'01001000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00001000' movwf Layer4 call Output return ;-----------------------------------------------------------------------------------------------; ; CubeFill sub routine ; ;-----------------------------------------------------------------------------------------------; CubeFill: movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'00100000' movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'01100000' movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'11100000' movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'11110000' movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'11110010' movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'11110011' movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'11110011' movwf Layer3 movlw b'00111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'11110111' movwf Layer3 movlw b'00111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'11111111' movwf Layer3 movlw b'00111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'00100000' movwf Layer2 movlw b'11111111' movwf Layer3 movlw b'00111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'01100000' movwf Layer2 movlw b'11111111' movwf Layer3 movlw b'00111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'11100000' movwf Layer2 movlw b'11111111' movwf Layer3 movlw b'00111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'11110000' movwf Layer2 movlw b'11111111' movwf Layer3 movlw b'00111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'11110010' movwf Layer2 movlw b'11111111' movwf Layer3 movlw b'00111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'11110011' movwf Layer2 movlw b'11111111' movwf Layer3 movlw b'00111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'11110011' movwf Layer2 movlw b'11111111' movwf Layer3 movlw b'01111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'11110111' movwf Layer2 movlw b'11111111' movwf Layer3 movlw b'01111000' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'11111111' movwf Layer2 movwf Layer3 movlw b'01111000' movwf Layer4 call Output movlw b'00100000' movwf Layer1 movlw b'11111111' movwf Layer2 movwf Layer3 movlw b'01111000' movwf Layer4 call Output movlw b'01100000' movwf Layer1 movlw b'11111111' movwf Layer2 movwf Layer3 movlw b'01111000' movwf Layer4 call Output movlw b'11100000' movwf Layer1 movlw b'11111111' movwf Layer2 movwf Layer3 movlw b'01111000' movwf Layer4 call Output movlw b'11110000' movwf Layer1 movlw b'11111111' movwf Layer2 movwf Layer3 movlw b'01111000' movwf Layer4 call Output movlw b'11110010' movwf Layer1 movlw b'11111111' movwf Layer2 movwf Layer3 movlw b'01111000' movwf Layer4 call Output movlw b'11110011' movwf Layer1 movlw b'11111111' movwf Layer2 movwf Layer3 movlw b'01111000' movwf Layer4 call Output movlw b'11110011' movwf Layer1 movlw b'11111111' movwf Layer2 movwf Layer3 movlw b'11111000' movwf Layer4 call Output movlw b'11110111' movwf Layer1 movlw b'11111111' movwf Layer2 movwf Layer3 movlw b'11111000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'11111000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movlw b'11011111' movwf Layer3 movlw b'11111000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movlw b'10011111' movwf Layer3 movlw b'11111000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movlw b'00011111' movwf Layer3 movlw b'11111000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movlw b'00001111' movwf Layer3 movlw b'11111000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movlw b'00001101' movwf Layer3 movlw b'11111000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movlw b'00001100' movwf Layer3 movlw b'11111000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movlw b'00001100' movwf Layer3 movlw b'11011000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movlw b'00001000' movwf Layer3 movlw b'11011000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'11011000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movlw b'11011111' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'11011000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movlw b'10011111' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'11011000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movlw b'00011111' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'11011000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movlw b'00001111' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'11011000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movlw b'00001101' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'11011000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movlw b'00001100' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'11011000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movlw b'00001100' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'10011000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movlw b'00001000' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'10011000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'10011000' movwf Layer4 call Output movlw b'11011111' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'10011000' movwf Layer4 call Output movlw b'10011111' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'10011000' movwf Layer4 call Output movlw b'00011111' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'10011000' movwf Layer4 call Output movlw b'00001111' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'10011000' movwf Layer4 call Output movlw b'00001101' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'10011000' movwf Layer4 call Output movlw b'00001100' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'10011000' movwf Layer4 call Output movlw b'00001100' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output movlw b'00001000' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'00011000' movwf Layer4 call Output return ;-----------------------------------------------------------------------------------------------; ; SideToSide sub routine ; ;-----------------------------------------------------------------------------------------------; SideToSide: movlw b'00000011' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'11111011' movwf Layer4 call Output movlw b'00000011' movwf Layer1 movwf Layer2 movlw b'00011100' movwf Layer3 movlw b'11011011' movwf Layer4 call Output movlw b'00000011' movwf Layer1 movwf Layer2 movlw b'11100000' movwf Layer3 movlw b'11011011' movwf Layer4 call Output movlw b'00000011' movwf Layer1 movlw b'00011100' movwf Layer2 movlw b'11100000' movwf Layer3 movlw b'10011011' movwf Layer4 call Output movlw b'00000011' movwf Layer1 movlw b'11100000' movwf Layer2 movwf Layer3 movlw b'10011011' movwf Layer4 call Output movlw b'00011100' movwf Layer1 movlw b'11100000' movwf Layer2 movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'11100000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'11100000' movwf Layer1 movwf Layer2 movlw b'00011100' movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'11100000' movwf Layer1 movwf Layer2 movlw b'00000011' movwf Layer3 movlw b'00111011' movwf Layer4 call Output movlw b'11100000' movwf Layer1 movlw b'00011100' movwf Layer2 movlw b'00000011' movwf Layer3 movlw b'00111011' movwf Layer4 call Output movlw b'11100000' movwf Layer1 movlw b'00000011' movwf Layer2 movwf Layer3 movlw b'01111011' movwf Layer4 call Output movlw b'00011100' movwf Layer1 movlw b'00000011' movwf Layer2 movwf Layer3 movlw b'01111011' movwf Layer4 call Output return ;-----------------------------------------------------------------------------------------------; ; DiagAroundSides sub routine ; ;-----------------------------------------------------------------------------------------------; DiagAroundSides: movlw b'00100000' movwf Layer1 movlw b'01000000' movwf Layer2 movlw b'10000000' movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'01000000' movwf Layer1 movlw b'10000000' movwf Layer2 movlw b'00010000' movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'10000000' movwf Layer1 movlw b'00010000' movwf Layer2 movlw b'00000010' movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'00010000' movwf Layer1 movlw b'00000010' movwf Layer2 movlw b'00000001' movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'00000010' movwf Layer1 movlw b'00000001' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00111011' movwf Layer4 call Output movlw b'00000001' movwf Layer1 movlw b'00000000' movwf Layer2 movlw b'00000100' movwf Layer3 movlw b'01011011' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'00000100' movwf Layer2 movlw b'00100000' movwf Layer3 movlw b'10011011' movwf Layer4 call Output movlw b'00000100' movwf Layer1 movlw b'00100000' movwf Layer2 movlw b'01000000' movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'00100000' return ;-----------------------------------------------------------------------------------------------; ; Firework sub routine ; ;-----------------------------------------------------------------------------------------------; Firework: movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'00001000' movwf Layer3 movlw b'00001111' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'00001000' movwf Layer2 movwf Layer3 movlw b'00001101' movwf Layer4 call Output movlw b'00001000' movwf Layer1 movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00001101' movwf Layer4 call Output movlw b'00001000' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'00001101' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00001101' movwf Layer4 call Output movlw b'00001000' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'00011100' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011100' movwf Layer4 call Output movlw b'00001000' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'10111000' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'10011011' movwf Layer4 call Output movlw b'01010101' movwf Layer1 movlw b'10110000' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'01011011' movwf Layer4 call Output movlw b'00010100' movwf Layer1 movlw b'01010101' movwf Layer2 movlw b'10110000' movwf Layer3 movlw b'00111011' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'00010110' movwf Layer2 movlw b'01010101' movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'00010110' movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011011' movwf Layer4 call Output return ;-----------------------------------------------------------------------------------------------; ; CubeLight sub routine ; ;-----------------------------------------------------------------------------------------------; CubeLight: movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'11100000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'11101000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'11110000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'11111000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'11110000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'11101000' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'11100000' movwf Layer4 call Output return ;-----------------------------------------------------------------------------------------------; ; LineAround sub routine ; ;-----------------------------------------------------------------------------------------------; LineAround: movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'11111011' movwf Layer4 call Output movlw b'00000100' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'00100000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'01000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'10000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'00010000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'00000010' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'00000001' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011011' movwf Layer4 call Output return ;-----------------------------------------------------------------------------------------------; ; LayerDrop sub routine ; ;-----------------------------------------------------------------------------------------------; LayerDrop: movlw b'11111111' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'10011011' movwf Layer4 call Output movlw b'10110110' movwf Layer1 movlw b'01001001' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'10011011' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'10110110' movwf Layer2 movlw b'01001001' movwf Layer3 movlw b'01011011' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'11111111' movwf Layer3 movlw b'00111011' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'01001001' movwf Layer2 movlw b'10110110' movwf Layer3 movlw b'00111011' movwf Layer4 call Output movlw b'01001001' movwf Layer1 movlw b'10110110' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'01011011' movwf Layer4 call Output return ;-----------------------------------------------------------------------------------------------; ; LayerDrop2 sub routine ; ;-----------------------------------------------------------------------------------------------; LayerDrop2: movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'11111111' movwf Layer3 movlw b'00111011' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'00001000' movwf Layer2 movlw b'11110111' movwf Layer3 movlw b'00111011' movwf Layer4 call Output movlw b'00001000' movwf Layer1 movlw b'11110111' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'01011011' movwf Layer4 call Output movlw b'11111111' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'10011011' movwf Layer4 call Output movlw b'11110111' movwf Layer1 movlw b'00001000' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'10011011' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'11110111' movwf Layer2 movlw b'00001000' movwf Layer3 movlw b'01011011' movwf Layer4 call Output return ;-----------------------------------------------------------------------------------------------; ; Spin sub routine ; ;-----------------------------------------------------------------------------------------------; Spin: movlw b'01001001' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00100100' movwf Layer1 movlw b'01001001' movwf Layer2 movlw b'10010010' movwf Layer3 movlw b'10011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'11111111' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'01011001' movwf Layer4 call Output movlw b'10010010' movwf Layer1 movlw b'01001001' movwf Layer2 movlw b'00100100' movwf Layer3 movlw b'00111001' movwf Layer4 call Output return ;-----------------------------------------------------------------------------------------------; ; SnakeLine sub routine ; ;-----------------------------------------------------------------------------------------------; SnakeLine: movlw b'10010010' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'11011011' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'01101101' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'10011001' movwf Layer4 call Output movlw b'00100100' movwf Layer1 movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'11011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'01101101' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'01011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'11011011' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'10010010' movwf Layer2 movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'11011011' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'01101101' movwf Layer3 movlw b'00111001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'00100100' movwf Layer2 movwf Layer3 movlw b'01111001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'01101101' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'01011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'11011011' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'10010010' movwf Layer1 movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00011001' movwf Layer4 call Output return ;-----------------------------------------------------------------------------------------------; ; SpiralDown sub routine ; ;-----------------------------------------------------------------------------------------------; SpiralDown: movlw b'00000010' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000001' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'10011001' movwf Layer4 call Output movlw b'00000100' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00100000' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'01000000' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'10000000' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00010000' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00001000' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'00001000' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'00000100' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'00100000' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'01000000' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'10000000' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'00010000' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'00000010' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'00000001' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'01011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movwf Layer3 movlw b'00111001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'00000100' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'00100000' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'01000000' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'10000000' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'00010000' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'00000010' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'00000001' movwf Layer3 movlw b'00011001' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'00001000' movwf Layer3 movlw b'00011001' movwf Layer4 call Output return ;-----------------------------------------------------------------------------------------------; ; UpAndOut sub routine ; ;-----------------------------------------------------------------------------------------------; UpAndOut: movlw b'00000000' movwf Layer1 movlw b'00001000' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'00001000' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'01011101' movwf Layer1 movlw b'00000000' movwf Layer2 movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'10100010' movwf Layer1 movlw b'01010101' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'10011011' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'10100010' movwf Layer2 movlw b'01010101' movwf Layer3 movlw b'01011011' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'11110111' movwf Layer3 movlw b'00111011' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'11111111' movwf Layer3 movlw b'00111011' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movwf Layer2 movlw b'00001000' movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'00000000' movwf Layer1 movlw b'00001000' movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00011011' movwf Layer4 call Output movlw b'00001000' movwf Layer1 movwf Layer2 movlw b'00000000' movwf Layer3 movlw b'00011011' movwf Layer4 call Output return ;-----------------------------------------------------------------------------------------------; ; Output outputs the data to the LEDs. PORTB will be used to turn on transistors to ground the ; ; cathodes of the LEDs ; ;-----------------------------------------------------------------------------------------------; Output: ; set the brightness movfw Layer4 ; put layer 4 into W andlw b'00011000' ; get just bits 3 and 5 movwf Brightness ; put W into Brightness bcf STATUS,RP0 ; clear the carry flag rrf Brightness,1 ; rotate Brightness bcf STATUS,RP0 ; clear the carry flag rrf Brightness,1 ; and again bcf STATUS,RP0 ; clear the carry flag rrf Brightness,1 ; and again incf Brightness,1 ; add 1 to Brightess movfw Layer4 ; move layer 4 into W andlw b'00000111' ; get just bits 0,1 and 2 movwf Time ; put W into Time incf Time,1 ; add 1 to Time bcf STATUS,RP0; clear the carry flag rlf Time,1 bcf STATUS,RP0 ; clear the carry flag rlf Time,1 bcf STATUS,RP0 ; clear the carry flag rlf Time,1 bcf STATUS,RP0 ; clear the carry flag rlf Time,1 bcf STATUS,RP0 ; clear the carry flag rlf Time,1 Output2: ; --- Top Layer --- clrf PORTA ; clear port B movfw Layer1 ; move layer1 to W movwf PORTB ; put W onto PortC btfsc Layer4,7 ; see if LED 9 should be on bsf PORTA,4 ; turn on LED 9 bsf PORTA,5 ; turn on layer 1 buy outputing bit 5 of PortB movfw Brightness ; put brightness into W call Delay ; call the delay ; brightness can be 1,2,3 or 4, so now we have to call the delay again ; 4 - brightness with the LEDs off bcf PORTA,5 ; turn off layer 1 movfw Brightness ; put Brightness into W sublw 4 ; sub W from 4 btfss STATUS,Z ; skip if the zero flag is set call Delay ; call the delay ; --- Middle Layer --- clrf PORTA ; clear port B movfw Layer2 ; move layer2 to W movwf PORTB ; put W onto PortC btfsc Layer4,6 ; see if LED 9 should be on bsf PORTA,4 ; turn on LED 9 bsf PORTA,6 ; turn on layer 2 buy outputing bit 6 of PortB movfw Brightness ; put brightness into W call Delay ; call the delay ; brightness can be 1,2,3 or 4, so now we have to call the delay again ; 4 - brightness with the LEDs off bcf PORTA,6 ; turn off layer 2 movfw Brightness ; put Brightness into W sublw 4 ; sub W from 4 btfss STATUS,Z ; skip if the zero flag is set call Delay ; call the delay ; --- Bottom Layer --- clrf PORTA ; clear port B movfw Layer3 ; move layer3 to W movwf PORTB ; put W onto PortC btfsc Layer4,5 ; see if LED 9 should be on bsf PORTA,4 ; turn on LED 9 bsf PORTA,7 ; turn on layer 2 buy outputing bit 6 of PortB movfw Brightness ; put brightness into W call Delay ; call the delay ; brightness can be 1,2,3 or 4, so now we have to call the delay again ; 4 - brightness with the LEDs off bcf PORTA,7 ; turn off layer 3 movfw Brightness ; put Brightness into W sublw 4 ; sub W from 4 btfss STATUS,Z ; skip if the zero flag is set call Delay ; call the delay decfsz Time ; decrement the Time regiester goto Output2 ; repeat return ;-----------------------------------------------------------------------------------------------; ; The Delay routine is called with a number put into the W register. This is in multiples of ; ; 100u seconds, (0.1m seconds) ; ;-----------------------------------------------------------------------------------------------; Delay: movwf Delay3 ; put W into Delay 3 Loop1: ; After Delay2 decreses to 0, it is reset to.. movlw 0x1 ; put 1 into W movwf Delay2 ; put W into Delay2 Loop2: ; After Delay1 decreses to 0, it is reset to E9h movlw 0x1D ; put 80 into W movwf Delay1 ; put W into Delay1 Loop3: decfsz Delay1 ; decrement Delay1 goto Loop3 ; jump back to Loop3 decfsz Delay2 ; decrement Delay2 goto Loop2 ; jump back to Loop2 decfsz Delay3 ; decrement Delay3 goto Loop1 ; jump back to Loop1 return ;-----------------------------------------------------------------------------------------------; ; Main program starts here ; ;-----------------------------------------------------------------------------------------------; Start: movlw 0x07 movwf CMCON bsf STATUS,RP0 ; select register page 1 movlw 0 ; put 0 into W movwf TRISB ; set portC all output movwf TRISA ; set portB all outputs bsf STATUS,RP1 ; select Page 2, bcf STATUS,RP0 ; by setting RP1 in Status register and clearing RP0 ; clrf ANSEL ; select Digital I/O on port C ; clrf ANSELH ; " " bcf STATUS,RP1 ; back to Register Page 0 bcf EndCount,0 ; reset the EndCount bit clrf Counter ; clear the Counter register Loop: call CubeLight call CubeLight call CubeLight call CubeLight call CubeLight call LayerDrop call LayerDrop call LayerDrop call LayerDrop call LayerDrop call Spin call Spin call Spin call Spin call Spin call SnakeLine call SnakeLine call SnakeLine call SnakeLine call SnakeLine call LayerBrightness call LayerBrightness call LayerBrightness call LayerBrightness call LayerBrightness call SpiralDown call UpAndOut call SpiralDown call UpAndOut call SpiralDown call UpAndOut call BigSmall call BigSmall call BigSmall call BigSmall call BigSmall call BigSmall call BigSmall call BigSmall call BigSmall call BigSmall call BigSmall call LineAround call LineAround call LineAround call LineAround call LineAround call SideToSide call SideToSide call SideToSide call SideToSide call SideToSide call FlashingLines call FlashingLines call FlashingLines call FlashingLines call FlashingLines call Firework call Firework call Firework call Firework call Firework call DiagAroundSides call DiagAroundSides call DiagAroundSides call DiagAroundSides call DiagAroundSides call LayerDrop2 call LayerDrop2 call LayerDrop2 call LayerDrop2 call LayerDrop2 call CubeFill call CubeFill call CubeFill call CubeFill call CubeFill call CubeFill goto Loop end