Next was a 4 x x 4, using one Allegro 6279 (a Serial-Input, 16 bit parallel out Constant-Current Latched sink Driver for the LED cathodes), a PIC 16F876a, and discrete transistors for source drivers. I designed the circuit boards using EAGLE, etched and drilled them myself. From there I went to the 5 x 5 x 5. I decided to use a circuit board purchased from PICPROJECTS.org. It is designed to use two surface-mount STP16CP05's for the LED sink drivers, and 5 discrete transistors for source drivers. The PICPROJECTS board was designed for single-color LED's. Also, the board is designed to use a PIC 16F688, using it's internal 8 MHZ oscillator.
Since I wanted to use bi-color LED's, 10 source drivers would be required. In addition, I wanted lots more flash memory and a faster clock, so I opted for for the PIC18F2520. The result was that a small "Piggy-Back board" would be needed to replace the 16F688. Once again I used EAGLE to design the board, which turned out to be about 2 x 2.5 inches. It holds the PIC, along with the associated MCLR resistor, a small in-line socket for a cable to connect ICSP, two decoupling Caps, and an isolation diode in the MCLR connection. Two UDN2981's are used for the LED source drivers. There are only 5 wire connections to the main board - power and ground, and wires for Data, Clock, and Latch. The Led matrix anodes (levels) are connected to the UDN2981's on the piggyback board. I connected the Data, Clock, and Latch wires to the holes on the main board where the 16f688 would normally go. Also note that the maximum clock frequency specified for the 16CP05 is 30 MHZ, I am running the 18F2520 at 32 MHZ, but have not experienced ANY problems.
The board could easily be enlarged to include a 5 volt regulator and associated components, so a number of different "wall warts" could be used for power rather than needing an external regulated 5 volt supply. A PDF of the schematic is attached. It was made using EXPRESS PCB, since I did not like the rendition of the PIC18F2520 in EAGLE. The schematic is not the greatest, but is readable. The board is simple enough that a perf board could be used with point to point wiring instead of one that is etched.
If someone wishes to just make a single color cube, it would not be difficult to change my PBP software for a single color. In addition, rather than using the UDN2981's, then 5 discrete transistors could be used, soldered onto the main board where they would normally go. Five connections from the PIC Port pins on the piggyback board would then have to be connected to the holes where the port pins on the 16f688 would be.
The PICPROJECTS circuit board is excellent, and not very expensive. The STP16CP05's are available from Digi-Key #497-5743-1-ND at $2.79 each. My only complaint regarding the board would be the size of the 25 pads where the Cube connects. Rather than attempt a schematic, I would refer to the PICPROJECTS website - download that one. His website also has some good tips on building the cube. In addition, there are a couple of "Instructables"
on the web that are also very good.
I did not solder the LED Cube directly to the circuit board. Instead I soldered individual wires to each anode, connecting to the circuit board in that way. I realize that the connections look like a real "rats nest", but there was a method to my madness. The anode leads from the cube go through holes in the masonite top of the enclosure, so the circuit board and wires will be hidden. I soldered all the wires to the circuit board first. The cube anode leads were then inserted through the holes in the top of the lid, and then connected soldering one wire at a time working along each row . The four outside corners of the cube were secured with a small dollop of silicon glue after all the wires were connected and the cube was squared with the top (AFTER TESTING IT !).
I have attached some PDF sheets showing how to determine the HEX or Binary values for the various patterns. These patterns are viewed "looking down" at the top of the cube. They are the easiest to develop. One or more levels is enabled to display the pattern. If it is desired to display red on one layer,and green on another, the layers must be multiplexed. In addition, if the SAME level is multiplexed between red and green, yellow to gold color can result. If front - to back or side - to side patterns are desired, the various layers need to be multiplexed, and it might be a little more difficult to visualize and determine the pattern. Good examples would be the front to back spelling of "GO PACK GO". The letters for the rising pattern "GO PACKERS" for example, are easier to visualize. I have included a PDF of a 5 x 5 matrix of squares to use in determining patterns. To use it, print a copy, and shade in the various squares with a pencil to show the desired pattern (looking down at the cube). From that determine the HEX (or binary) value for PATTERN using one of the attached PDF's as a guide. ( PATTERN is used in the SHOWIT routine to shift out the 25 bits ).
My software uses a very, very large number of constants for the various patterns. I did that in case I wanted to use a pattern more than once, to eliminate typing in the HEX or binary pattern each time. It is fairly well commented, to make it less confusing. After making a cube and using the software, it would be a simple task to modify the patterns or to come up with new animations. If you are not a PACKERS fan, I suppose you can comment out or remove those animations.
In case you have not seen it, here is a link to my YouTube Video :
I have added several animations, and changed a couple as well since making the video.
My code is not the most efficient, and probably not the most graceful, but it works. Constructive criticism and suggestions are welcome. (Please be gentle)
The link to the PICPROJECTS website is: http://picprojects.org.uk/projects/lc/
Here is the link for the Schematic : http://picprojects.org.uk/projects/lc/cube555cS.pdf
The usual disclaimer applies : I am not associated with PICPROJECTS in any way . . . . .
The first short program (CUBE TEST) can be used test the LED's to make sure they are correct.
'
************************************************** *********]***** '* Name : CUBE TEST * '* Author : Ken Stuempges * * '* Date : 2/4/2011 * '* Version : 1.0 * '* Notes : A short program for troubleshooting '* : Only PortC (Red LED's) are tested '* : Add L1G to L5G (or change) to check PortB * '* : * '************************************************* *************** INCLUDE "Modedefs.bas" INCLUDE "alldigital.pbp" OSCCON = $70 OSCTUNE.6 = 1 DEFINE OSC 32 TRISA = %00000000 TRISB = %00000000 TRISC = %00000000 DAT VAR PORTA.1 'DATA LINE FOR STP16CP05 CLK VAR PORTA.0 'CLOCK LINE FOR STP16CP05 LATCH_EN VAR PORTA.2 'LATCH ENABLE FOR STP16CP05 L1G VAR PORTB.0 'CUBE LEVEL 1 FOR GREEN LED L2G VAR PORTB.1 'CUBE LEVEL 2 FOR GREEN LED L3G VAR PORTB.2 'CUBE LEVEL 3 FOR GREEN LED L4G VAR PORTB.3 'CUBE LEVEL 4 FOR GREEN LED L5G VAR PORTB.4 L1R VAR PORTC.0 ' RED L2R VAR PORTC.1 ' RED L3R VAR PORTC.2 ' RED L4R VAR PORTC.3 ' RED L5R VAR PORTC.4 LENGTH VAR LONG PATTERN VAR LONG 'USED IN SHIFTOUT FOR BITS TO SEND TO STP16CP05 '************************************ 'CONSTANTS FOR EACH LED POSITION ' LED_1 CON $0000001 LED_2 CON $0000002 LED_3 CON $0000004 LED_4 CON $0000008 LED_5 CON $0000010 LED_6 CON $0000020 LED_7 CON $0000040 LED_8 CON $0000080 LED_9 CON $0000100 LED_10 CON $0000200 LED_11 CON $0000400 LED_12 CON $0000800 LED_13 CON $0001000 LED_14 CON $0002000 LED_15 CON $0004000 LED_16 CON $0008000 LED_17 CON $0010000 LED_18 CON $0020000 LED_19 CON $0040000 LED_20 CON $0080000 LED_21 CON $0100000 LED_22 CON $0200000 LED_23 CON $0400000 LED_24 CON $0800000 LED_25 CON $1000000 ' GOTO MAIN '*************************************** TEST: ' ALL LED POSITIONS FOR TESTING LOOKUP2 LENGTH,[LED_1,LED_2,LED_3,LED_4,LED_5,LED_6,LED_7,LED_8,LE D_9,_ LED_10,LED_11,LED_12,LED_13,LED_14,LED_15,LED_16,L ED_17,LED_18,_ LED_19,LED_20,LED_21,LED_22,LED_23,LED_24,LED_25],PATTERN RETURN '******************************************* '************************************************* ***************** SHOWIT: LATCH_EN = 0 'DATA LATCHED AFTER SHIFT OUT VIA LO TO HI TO LO OF LATCH shiftout DAT,CLK,0,[PATTERN\25] 'LSB FIRST ( LED # 25, THEN 24 ETC) LATCH_EN = 1 PAUSEUS 10 LATCH_EN = 0 PAUSEUS 10 RETURN '***************************************** ' MAIN: CLEAR PORTB=0 PORTC=0 ' CLEAR BOTH PORTS ' DISPLAY EACH LED, ON FOR ONE SECOND, THEN OFF FOR 1/2 SEC, FOR EACH LEVEL LENGTH = 0 TEST_LOOP: FOR LENGTH = 0 TO 24 GOSUB TEST ' GET THE LED POSITION L1R=1 GOSUB SHOWIT PAUSE 1000 L1R=0 PAUSE 250 NEXT LENGTH FOR LENGTH = 0 TO 24 GOSUB TEST ' GET THE LED POSITION GOSUB SHOWIT L2R=1 PAUSE 1000 L2R=0 PAUSE 250 NEXT LENGTH FOR LENGTH = 0 TO 24 GOSUB TEST ' GET THE LED POSITION GOSUB SHOWIT L3R=1 PAUSE 1000 L3R=0 PAUSE 250 NEXT LENGTH FOR LENGTH = 0 TO 24 GOSUB TEST ' GET THE LED POSITION GOSUB SHOWIT L4R=1 PAUSE 1000 L4R=0 PAUSE 250 NEXT LENGTH FOR LENGTH = 0 TO 24 GOSUB TEST ' GET THE LED POSITION GOSUB SHOWIT L5R=1 PAUSE 1000 L5R=0 PAUSE 250 NEXT LENGTH GOTO TEST_LOOP end
'************************************************* *************** '* Name : 5x5x5 Red-Green LED Cube * '* Author : Ken Stuempges * '* * '* Date : 2 Feb 2011 * '* Version : 1.0 * '* Notes : * '* : '* : COMPILED USING PBP2.6 (LONG) '* : PIC 18F2520 RUNNING @ 32MHZ ON INTERNAL OSCILLATOR '************************************************* **************************** '* : CHANGED THE 18F2520 INCLUDE FILE AS FOLLOWS '* '* ;__CONFIG _CONFIG1H, _OSC_HS_1H ;ORIGINAL CODE COMMENTED OUT '* '* changed to this '* __CONFIG _CONFIG1H, _OSC_INTIO67_1H ; INT OSC TIMES 4 * '************************************************* *************************** INCLUDE "alldigital.pbp" OSCCON = $70 OSCTUNE.6 = 1 DEFINE OSC 32 TRISA = %00000000 TRISB = %00000000 TRISC = %00000000 '**************************************** ' VARIBLES '******************************************* ' DAT VAR PORTA.1 'DATA LINE FOR STP 16CPO5 SERIAL IN PARALLEL OUT CLK VAR PORTA.0 'CLOCK LATCH_EN VAR PORTA.2 'LATCH ENABLE L1G VAR PORTB.0 'CUBE LEVEL 1 (BOTTOM) FOR GREEN LEDS L2G VAR PORTB.1 'CUBE LEVEL 2 FOR GREEN LEDS L3G VAR PORTB.2 'CUBE LEVEL 3 FOR GREEN LEDS L4G VAR PORTB.3 'CUBE LEVEL 4 FOR GREEN LEDS L5G VAR PORTB.4 'CUBE LEVEL 5 (TOP)FOR GREEN LEDS ' L1R VAR PORTC.0 ' RED L2R VAR PORTC.1 ' RED L3R VAR PORTC.2 ' RED L4R VAR PORTC.3 ' RED L5R VAR PORTC.4 ' RED TIME VAR WORD 'USED TO VARY PAUSE TIMES AS NEEDED TIME_1 VAR WORD LENGTH VAR WORD ' "INDEX" VARIABLE FOR LOOKUP TABLE PATTERN VAR LONG 'USED IN SHIFTOUT FOR BITS TO SEND TO ALLEGRO i var byte ' used in mpx routines j var byte 'used in mpx routines W VAR WORD ' COUNTER X VAR WORD 'COUNTER Y VAR WORD Z VAR WORD SYMBOL LEVELR = PORTC ' RED LED'S USED IN MPX ROUTINES SYMBOL LEVELG = PORTB ' GREEN LED'S ' '***************************CONSTANTS ************************* '************************************ 'CONSTANTS FOR EACH LED POSITION ON THE CIRCUIT BOARD ' LED_1 CON $0000001 LED_2 CON $0000002 LED_3 CON $0000004 LED_4 CON $0000008 LED_5 CON $0000010 LED_6 CON $0000020 LED_7 CON $0000040 LED_8 CON $0000080 LED_9 CON $0000100 LED_10 CON $0000200 LED_11 CON $0000400 LED_12 CON $0000800 LED_13 CON $0001000 LED_14 CON $0002000 LED_15 CON $0004000 LED_16 CON $0008000 LED_17 CON $0010000 LED_18 CON $0020000 LED_19 CON $0040000 LED_20 CON $0080000 LED_21 CON $0100000 LED_22 CON $0200000 LED_23 CON $0400000 LED_24 CON $0800000 LED_25 CON $1000000 '*************************************** 'CONSTANTS FOR SOLID ROWS AND COLUMNS 'ACTUALLY COLUMN IS MISLEADING, SHOULD BE X AND Y VERTICAL ROWS ' ROW_1 CON $0108421 ROW_2 CON $0210842 ROW_3 CON $0421084 ROW_4 CON $0842108 ROW_5 CON $1084210 COL_1 CON $000001F COL_2 CON $00003E0 COL_3 CON $0007C00 COL_4 CON $00F8000 COL_5 CON $1F00000 '************************************* 'CONSTANTS F0R VARIOUS PATTERNS CORNERS CON $1100011 'OUTSIDE CORNER DOTS INCORNERS CON $0060140 'INSIDE SQUARE CORNERS OUTSQUARE CON $1F8C63F 'OUTSIDE PERIMETER SQUARE INSQUARE CON $00739C0 'SMALL SOLID INNER SQUARE INSQ CON $00729C0 'INNER SQUARE PERIMETER DOT CON $0001000 ' SAME AS LED # 13 INX CON $0051140 ' INNER "X" SML_CROSS CON $0023880 ' SMALL INNER CROSS CROSS CON $0427C84 ' INSIDE CROSS SHFT_X CON $0A51141 ' XPAT CON $1151151 ' PATTERN FOR FULL X ON A LEVEL INSQOUTCOR CON $11739D1 'INNER SQUARE, 4 CORNER DOTS FULL CON $1FFFFFF ' ENTIRE LEVEL ON LFTSLSH CON $0111110 ' LEFT SLASH LINE RTSLSH CON $1041041 'RIGHT SLASH LINE '**************************** '********************* ' THE NEXT 4 ARE CONSTANTS FOR THE PARTS OF SPOKES ' SPOKE_1 CON $0021080 SPOKE_2 CON $0011100 SPOKE_3 CON $0003800 SPOKE_4 CON $0041040 '********************************************* ' CONSTANTS FOR ANGLE_FILL F_1 CON $1880000 F_2 CON $1CC4000 F_3 CON $1EE6200 F_4 CON $1FF7310 F_5 CON $0000023 F_6 CON $0000467 F_7 CON $0000CEF F_8 CON $0119DFF '************************************************* ** ' CONSTANTS FOR SMALL SQUARES SQ_1 CON $0000063 SQ_2 CON $0000318 SQ_3 CON $18C0000 SQ_4 CON $0318000 SQ_5 CON $00018C0 SQ_6 CON $0031800 SQ_7 CON $0063000 SQ_8 CON $0003180 SQ_9 CON $0000C60 SQ_10 CON $00C6000 SQ_11 CON $0630000 SQ_12 CON $0018C00 SQ_13 CON $0006300 SQ_14 CON $00000C6 '*************************************** ' CONSTANTS FOR PERIMETER PATTERN OF ONE LED AT A TIME ' STARTS AT LED ONE AND FILLS AROUND FROM TOP TO BOTTOM D1 CON $0000001 D2 CON $0000003 D3 CON $0000007 D4 CON $000000F D5 CON $000001F D6 CON $000021F D7 CON $000421F D8 CON $008421F D9 CON $108421F D10 CON $188421F D11 CON $1C8421F D12 CON $1E8421F D13 CON $1F8421F D14 CON $1F8C21F D15 CON $1F8C61F D16 CON $1F8C63F '******************NOW BOTTOM TO TOP D17 CON $0000001 D18 CON $0000021 D19 CON $0000421 D20 CON $0008421 D21 CON $108421 D22 CON $0308421 D23 CON $0708421 D24 CON $0F08421 D25 CON $1F08421 D26 CON $1F88421 D27 CON $1F8C421 D28 CON $1F8C621 D29 CON $1F8C631 D30 CON $1F8C639 D31 CON $1F8C63D D32 CON $1F8C63F '************************************ '************************************ ' NOW PATTERN TO CONTINUE FILLING LAYER CIRCULARLY D33 CON $1F8C67F D34 CON $1F8C6FF D35 CON $1F8C7FF D36 CON $1F8E7FF D37 CON $1FCE7FF D38 CON $1FEE7FF D39 CON $1FFE7FF D40 CON $1FFEFFF D41 CON $1FFFFFF '************************************************* *** '************************************ROWS AND COLUMNS ROW_1_5 CON $118C631 ROW_2_4 CON $0A5294A COL_1_5 CON $1F0001F COL_2_4 CON $00F83E0 '************************************************* ** '************************************************* ** 'CONSTANTS FOR "SNAKE" THESE CONSIST OF 3 LED SEQUENCES (SEGMENTS) S_1 CON $0000010 'THAT ARE USED TO MOVE THE SNAKE AROUND S_2 CON $0000210 S_3 CON $0000310 S_4 CON $0000380 S_5 CON $0001180 S_6 CON $0021080 S_7 CON $0061000 S_8 CON $0860000 S_9 CON $0840000 ' START LEVEL 4 S_10 CON $0800000 S_11 CON $1800000 S_12 CON $1880000 S_13 CON $1084000 S_14 CON $0084200 S_15 CON $0004300 S_16 CON $00001C0 S_17 CON $00000E0 S_18 CON $0000460 S_19 CON $0008420 S_20 CON $0108400 S_21 CON $0108000 'START LEVEL 5 S_22 CON $0300000 S_23 CON $0700000 S_24 CON $0E00000 S_25 CON $0C40000 S_26 CON $0842000 S_27 CON $0042100 S_28 CON $0002108 S_29 CON $000010C S_30 CON $000000E S_31 CON $0000046 S_32 CON $0000842 S_33 CON $0010840 S_34 CON $0210800 S_35 CON $0210000 ' BACK TO LEVEL ONE S_36 CON $0210800 S_37 CON $0011800 S_38 CON $0003800 S_39 CON $0007000 S_40 CON $0006200 S_41 CON $0004210 '************************************************* ** '*********************************** 'CONSTANTS FOR SPEARS ( SOME THE SAME AS EXISTING CONSTANTS, ' THEY ARE REPEATED FOR MORE CLEAR USE IN THE LOOKUP TABLE ) SP_1 CON $0000001 SP_2 CON $0000003 SP_3 CON $0000007 SP_4 CON $000000F SP_5 CON $000001F SP_6 CON $0800000 SP_7 CON $0840000 SP_8 CON $0842000 SP_9 CON $0842100 SP_10 CON $0842108 SP_11 CON $0080000 SP_12 CON $00C0000 SP_13 CON $00E0000 SP_14 CON $00F0000 SP_15 CON $00F8000 SP_16 CON $0000002 SP_17 CON $0000042 SP_18 CON $0000842 SP_19 CON $0001842 SP_20 CON $0210842 SP_21 CON $0000400 SP_22 CON $0000C00 SP_23 CON $0001C00 SP_24 CON $0003C00 SP_25 CON $0007C00 SP_26 CON $0400000 SP_27 CON $0420000 SP_28 CON $0421000 SP_29 CON $0421080 SP_30 CON $0421084 SP_31 CON $0000200 SP_32 CON $0000300 SP_33 CON $0000380 SP_34 CON $00003C0 SP_35 CON $00003E0 '***************************************** GOTO MAIN '******************SUBROUTINES******************** *** '****** THERE ARE INSTANCES OF "SPAGHETTI CODE" IN SOME SUBROUTINES '******* i.e. A SUBROUTINE MIGHT NOT HAVE IT'S OWN RETURN STATEMENT '********* INSTEAD IE HAS A GOTO ANOTHER SUROUTINE FOR THE RETURN '********** THIS WAS DONE TO REDUCE CODE USED MULTIPLE TIMES '************************************************* **************** ' CLR_LEVELS: ' SETS ALL THE LEVEL DRIVERS TO ZERO L1R=0 : L2R=0 : L3R=0 : L4R=0 : L5R=0 L1G=0 : L2G=0 : L3G=0 : L4G=0 : L5G=0 RETURN '******************************* '*************************************** ' SPEAR_1 IS A SUBROUTINE TO REDUCE CODE FOR SPEAR '****************************************** SPEAR_1: FOR LENGTH = X TO Y ' X AND Y VARY DEPENDING ON THE VARIOUS PATTERNS ' X AND Y ARE SET IN THE CALLING ROUTINE GOSUB SPEARS ' SPEARS IS A LOOKUP TABLE GOSUB SHOWIT PAUSE TIME NEXT LENGTH RETURN '******************************************* 'SNAKE_1, _2, _3, AND _4 ARE FOR REDUCING CODE IN THE SNAKE ROUTINE ' BY ADJUSTING THE INDEX "LENGTH" FOR THE LOOKUP TABLE '************************************************ SNAKE_1: FOR LENGTH = 0 TO 8 GOSUB SNAKEPAT ' SNAKEPAT IS THE LOOKUP TABLE FOR SNAKE GOSUB SHOWME NEXT LENGTH RETURN '************************************ SNAKE_2: FOR LENGTH = 11 TO 19 GOSUB SNAKEPAT GOSUB SHOWME NEXT LENGTH RETURN '**************************** SNAKE_3: FOR LENGTH = 22 TO 34 GOSUB SNAKEPAT GOSUB SHOWME NEXT LENGTH RETURN '*********************************** SNAKE_4: FOR LENGTH = 35 TO 40 GOSUB SNAKEPAT GOSUB SHOWME NEXT LENGTH RETURN '************************************************ '************************************************ GREEN_IN: 'ENTER WITH PATTERN ALREADY DEFINED ' SOME "SPAGHETTI" HERE - GOSUBS WITHIN A GOSUB ! ! ' ONLY DONE TO REDUCE CODE ' ALSO, CODE SEQUENCE IS CRITICAL TO PREVENT "GHOSTING" L1R=0 : L2R=0 : L3R=0 : L4R=0 : L5R=0 'CLEAR ALL LEVELS GOSUB SHOWIT IF Y = 1 THEN L1G=1 'DETERMINE WHICH LEVEL TO ACTIVATE IF Y = 2 THEN L2G=1 IF Y = 3 THEN L3G=1 IF Y = 4 THEN L4G=1 IF Y = 5 THEN L5G=1 PAUSE TIME ' TIME DEFINED VIA "INSIDE_SPIN" L1G=0 : L2G=0 : L3G=0 : L4G=0 : L5G=0 PATTERN = CORNERS GOSUB SHOWIT L1R=1 : L2R=1 : L3R=1 : L4R=1 : L5R=1 PAUSE TIME L1R=0 : L2R=0 : L3R=0 : L4R=0 : L5R=0 RETURN '***************************** '************************************************* *** PILPAT: ' LED'S USED IN THE PILLAR ROUTINE LOOKUP2 LENGTH,[LED_5,LED_13,LED_20,LED_7,LED_23,LED_6,LED_15,LED_ 8,LED_22,_ LED_10,LED_3,LED_18,LED_4,LED_21,LED_19,LED_2,LED_ 24,LED_11,_ LED_9,LED_12,LED_1,LED_16,LED_15,LED_17,LED_14],PATTERN RETURN '************************************************* **************** ' LOOKUP FOR LEVEL_REVERSE BACK_FORTH: LOOKUP2 LENGTH,[ROW_1,ROW_1,ROW_2,ROW_3,ROW_4,ROW_5],PATTERN RETURN '************************************************ '*************************** '************* SMALL_SQ IS PLACED HERE TO TAKE ADVANTAGE OF THE SHOWME '******************* SUBROUTINE WHICH FOLLOWS. SMALL_SQ: ' PATTTERNS FOR MOVING SQUARES LOOKUP2 LENGTH,[SQ_1,SQ_6,SQ_4,SQ_2,SQ_8,SQ_5,SQ_7,SQ_3,_ SQ_9,SQ_11,SQ_10,SQ_13,SQ_14,SQ_4,SQ_14,_ SQ_3,SQ_1,SQ_8],PATTERN '**************** SHOWME IS THE SAME AS SHOWIT, EXCEPT FOR THE '**************** PAUSE TIME (VARIABLE TIME) AT THE END '**************** THIS WAS DONE TO ELIMINATE THE NEED FOR A LARGE '**************** NUMBER OF PAUSES IN SEVERAL ANIMATION ROUTINES '**************** SHOWME: LATCH_EN = 0 'DATA LATCHED AFTER SHIFT OUT VIA LO TO HI TO LO OF LATCH shiftout DAT,CLK,0,[PATTERN\25] 'LSB FIRST ( LED # 25, THEN 24 ETC) LATCH_EN = 1 PAUSEUS 10 LATCH_EN = 0 PAUSE TIME RETURN '************************************************* ********* RINGPAT: LOOKUP2 LENGTH,[D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,_ D11,D12,D13,D14,D15,D16],PATTERN RETURN '************************ RINGPAT_1: LOOKUP2 LENGTH,[D17,D18,D19,D20,D21,D22,D23,D24,_ D25,D26,D27,D28,D29,D30,D31,D32],PATTERN RETURN '************************ RINGPAT_A ' WILL FILL THE ENTIRE LAYER LOOKUP2 LENGTH,[D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,_ D11,D12,D13,D14,D15,D16,_ D33,D34,D35,D36,D37,D38,D39,D40,D41],PATTERN RETURN '******************************** LINES: 'THIS TABLE IS USED TO GET 5 LED POSITIONS ONE AT A TIME FOR FIVE_LINES LOOKUP2 LENGTH,[LED_1,LED_2,LED_3,LED_4,LED_5,LED_6,LED_7,LED_8,LE D_9,_ LED_10,LED_11,LED_12,LED_13,LED_14,LED_15,LED_16,L ED_17,LED_18,_ LED_19,LED_20,LED_21,LED_22,LED_23,LED_24,LED_25],PATTERN RETURN '******************************************* RING_AROUND: 'GETS THE PERIMETER LED FOR THE RING ROUTINE LOOKUP2 LENGTH,[LED_1,LED_2,LED_3,LED_4,LED_5,LED_10,LED_15,LED_20 ,_ LED_25,LED_24,LED_23,LED_22,LED_21,LED_16,LED_11,L ED_6,LED_1],PATTERN RETURN '************************ RING_MUX: ' 'SELECT THE COLUMNS (LED POSITIONS) DISPLAYS FOR X = 1 TO 15 'ALTERNATING COLOR LED'S L1R= 1 : L2G=0 PAUSE TIME L1R= 0 : L2G=1 PAUSE TIME L2G= 0 : L3R=1 PAUSE TIME L3R= 0 : L4G=1 PAUSE TIME L4G=0 : L5R=1 PAUSE TIME L5R=0 NEXT X X=0 RETURN '********************************************* SNAKEPAT: ' THESE ARE 3 LED SEQUENCE PATTERNS FOR SNAKE LOOKUP2 LENGTH,[S_1,S_2,S_3,S_4,S_5,S_6,S_7,S_8,S_9,S_10,_ S_11,S_12,S_13,S_14,S_15,S_16,S_17,S_18,S_19,S_20, _ S_21,S_22,S_23,S_24,S_25,S_26,S_27,S_28,S_29,S_30, _ S_31,S_32,S_33,S_34,S_35,S_36,S_37,S_38,S_39,S_40, S_41],PATTERN RETURN '************************************************* SPEARS: LOOKUP2 LENGTH,[SP_1,SP_2,SP_3,SP_4,SP_5,_ ' EACH SPEAR IS ONE LINE SP_6,SP_7,SP_8,SP_9,SP_10,_ SP_11,SP_12,SP_13,SP_14,SP_15,_ SP_16,SP_17,SP_18,SP_19,SP_20,_ SP_21,SP_22,SP_23,SP_24,SP_25,_ SP_26,SP_27,SP_28,SP_29,SP_30,_ SP_31,SP_32,SP_33,SP_34,SP_35],PATTERN RETURN '************************************************* '***************************************** ' SPELLS "GO PACKERS" ' ***********MORE "SPAGHETTI - GOTO'S FROM A GOSUB - TO SAVE CODE '************************************************* ******************** PACKERS: LOOKUP2 LENGTH,[$0DAD62E,$0E8C62E,$02294BF,$1C314DC,$118C62E,_ $115109F,$118D6BF,$12694BF,$09AD6B2],PATTERN GOTO SHOWIT 'WILL RETURN FROM GOSUB PACKERS IN THE SHOWIT ROUTINE '************************************************* ********************* '************************************************* ********************* PACK_RULES: ' "PACKERS RULE" LOOKUP2 LENGTH,[$02294BF,$1C314DC,$118C62E, $115109F,_ $118D6BF,$12694BF,$09AD6B2,$12694BF,$0F8420F,$1084 21F,_ $118D6BF],PATTERN GOTO SHOWIT '**************************** BEARS_SUCK: ' "BEARS SUCK" LOOKUP2 LENGTH,[$0AAD6BF,$118D6BF,$1C314DC,$12694BF,$09AD6B2,_ $09AD6B2,$0F8420F,$118C62E,$115109F],PATTERN GOTO SHOWIT '******************************* '***************THIS LOOKUP IS FOR A REVERSE SLOPE USING GREEN LED'S GETSLOPE_1: LOOKUP2 LENGTH,[LED_4,LED_3,LED_2,LED_1,LED_6,LED_11,LED_16,LED_21 ,_ LED_22,LED_23,LED_24,LED_25,LED_20,LED_15,LED_10,_ LED_5,LED_4,LED_3,LED_2,LED_1],PATTERN RETURN '******************************************* ' THIS LOOKUP IS FOR THE RED LED PATTERNS FOR SLOPE GETSLOPE: LOOKUP2 LENGTH,[LED_1,LED_2,LED_3,LED_4,LED_5,LED_10,LED_15,LED_20 ,_ LED_25,LED_24,LED_23,LED_22,LED_21,LED_16,LED_11,_ LED_6,LED_1,LED_2,LED_3,LED_4],PATTERN RETURN '************************************************* ***************** ' SHOWIT IS USED TO OUTPUT THE LED PATTERN TO THE STP 16CP05'S ' THERE IS ANOTHER ROUTINE CALLED "SHOWME" IDENTICAL TO SHOWIT, ' EXCEPT THAT A PAUSE TIME IS ADDED AT THE END ' 25 BITS ARE NEEDED FOR THE 25 LED SETS OF CATHODES ' THE PAUSEUS 10 WAS AN ARBITRARY VALUE, COULD BE MUCH SHORTER ' THE REQUIRED SETUP TIME FOR LATCH IS ONLY NANO SECONDS ' DATA IS LATCHED AFTER SHIFTOUT VIA LO TO HI OF LATCH ' SHIFTED OUT LSB FIRST, (LED POSITION 1, THEN 2, ETC UP TO LED 25) ' SEE THE PDF SHEETS TO DETERMINE THE BINARY OR HEX PATTERNS NEEDED SHOWIT: LATCH_EN = 0 shiftout DAT,CLK,0,[PATTERN\25] ' LATCH_EN = 1 PAUSEUS 10 LATCH_EN = 0 PAUSEUS 10 RETURN '***************************************** ' ' MULTIPLEX ROUTINES FOR LEVELS AND COMBINATIONS OF LEVELS ' AN OVERALL LOOP VARIABLE MUST BE ADDED TO PROVIDE TIME ON FOR DISPLAY ' AND BRIGHTNESS IF MULTIPLE LEVELS ARE USED CONSECUTIVELY ' ALSO, VARIABLE "Y" DETERMINES BRIGHTNESS IN INDIVIDUAL SUBROUTINES '********************************* ' VARIABLE CONSECUTIVE LAYERS MPX ' i IS THE START LAYER , j IS THE END LAYER ' i AND j MUST BE DECLARED AT THE START OF THE SUBROUTINE '******************************************** MPX: FOR Y = 1 TO 5 ' BRIGHTNESS LOOP FOR X = I TO j ' VARIABLE CONSECUTIVE LAYERS, DEPENDING ON i and j LEVELG.0[X]=1 ' PAUSEUS TIME ' LEVELG.0[X]=0 ' LEVELR.0[X]=1 ' PAUSEUS TIME_1 LEVELR.0[X]=0 NEXT X NEXT Y return '*********************************** ' LEVEL ONE MPX '*************************** MPX_1: FOR Y = 1 TO 10 ' BRIGHTNESS X=0 'LEVEL 1 MPX- X IS POINTER FOR LEVEL ( 0 = LEVEL 1) LEVELG.0[X]=1 ' PAUSEUS TIME ' FLICKER LEVELG.0[X]=0 ' LEVELR.0[X]=1 ' PAUSEUS TIME_1 ' FLICKER LEVELR.0[X] = 0 ' next y RETURN '''''''''''''''''''''''''''''''' ' LEVEL TWO MPX '********************************** MPX_2: FOR Y = 1 TO 10 ' BRIGHTNESS X=1 'LEVEL 2 MPX- X IS POINTER FOR LEVEL ( 1 = LEVEL 2) LEVELG.0[X]=1 ' PAUSEUS TIME ' FLICKER LEVELG.0[X]=0 ' LEVELR.0[X]=1 ' PAUSEUS TIME_1 ' FLICKER LEVELR.0[X] = 0 ' next y RETURN '''''''''''''''''''''''''''''''' ' LEVEL 3 MPX '****************************** MPX_3: FOR Y = 1 TO 10 ' BRIGHTNESS X=2 ' LEVEL 3 MPX (X=2 FOR LEVEL 3) LEVELG.0[X]=1 ' PAUSEUS TIME ' FLICKER LEVELG.0[X]=0 ' LEVELR.0[X]=1 ' PAUSEUS TIME_1 ' FLICKER LEVELR.0[X] = 0 ' next y RETURN '''''''''''''''''''''''''''''''' ' LEVEL 4 MPX '******************************** MPX_4: FOR Y = 1 TO 10 ' BRIGHTNESS X=3 ' LEVEL 4 MPX (X=3 FOR LEVEL 4) LEVELG.0[X]=1 ' PAUSEUS TIME ' FLICKER LEVELG.0[X]=0 ' LEVELR.0[X]=1 ' PAUSEUS TIME_1 ' FLICKER LEVELR.0[X] = 0 ' next y RETURN '******************************** ' LEVEL 5 MPX '****************************** MPX_5: FOR Y = 1 TO 10 ' BRIGHTNESS X=4 ' LEVEL 5 MPX (X=4 FOR LEVEL 5) LEVELG.0[X]=1 ' PAUSEUS TIME ' FLICKER LEVELG.0[X]=0 ' LEVELR.0[X]=1 ' PAUSEUS TIME_1 ' FLICKER LEVELR.0[X] = 0 ' next y RETURN '********************************* '*********************************** 'SUBROUTINE FOR "GO" ' VERY LONG SUBROUTINE, CALLED MORE THAN ONCE GOPACK: TIME = 100 'TIME FOR GREEN ON TIME IN MPX TIME_1 = 20 ' TIME FOR RED ON TIME IN MPX PAUSE 300 '*********************** 'GOLD LETTER "G" '*********************** G1: FOR Z = 1 TO 10 PATTERN = $0108420 GOSUB SHOWIT GOSUB MPX_5 PATTERN = LED_1 GOSUB SHOWIT i=1 'LEVELS TW0, THREE, AND FOUR j=3 gosub mpx pattern = $0008420 gosub showit GOSUB MPX_1 PATTERN = LED_21 GOSUB SHOWIT i=1 j=2 ' LEVELS 2 AND 3 gosub mpx PATTERN = $0008400 GOSUB SHOWIT GOSUB MPX_3 NEXT Z IF W=1 THEN GOTO O1 '************************************************* **** G2: FOR Z = 1 TO 10 PATTERN = $0210840 GOSUB SHOWIT GOSUB MPX_5 PATTERN = LED_2 GOSUB SHOWIT i=1 j=3 'LEVELS TWO, THREE, AND FOUR GOSUB MPX pattern = $0010840 gosub showit GOSUB MPX_1 PATTERN = LED_22 GOSUB SHOWIT i=1 'levels 2 and 3 j=2 gosub mpx PATTERN = $0010800 GOSUB SHOWIT GOSUB MPX_3 NEXT Z IF W=1 THEN G1 '******************************* G3: FOR Z = 1 TO 10 PATTERN = $0421080 GOSUB SHOWIT GOSUB MPX_5 PATTERN = LED_3 GOSUB SHOWIT i=1 j=3 gosub mpx pattern = $0021080 gosub showit GOSUB MPX_1 PATTERN = LED_23 GOSUB SHOWIT i=1 j=2 gosub mpx PATTERN = $0021000 GOSUB SHOWIT GOSUB MPX_3 NEXT Z IF W=1 THEN G2 '*********************** G4: TIME = 100 FOR Z = 1 TO 10 PATTERN = $0842100 GOSUB SHOWIT GOSUB MPX_5 PATTERN = LED_4 GOSUB SHOWIT i=1 j=3 'LEVELS 2, 3, AND 4 GOSUB MPX pattern = $0042100 gosub showit GOSUB MPX_1 PATTERN = LED_24 GOSUB SHOWIT i=1 j=2 'LEVELS 2 AND 3 gosub mpx PATTERN = $0042000 GOSUB SHOWIT GOSUB MPX_3 NEXT Z IF W=1 THEN G3 '************************************** G5: TIME = 2 FOR Z = 1 TO 80 PATTERN = $1084200 GOSUB SHOWIT L5G=1 PAUSE TIME L5G=0 PATTERN = LED_5 GOSUB SHOWIT L2G=1 : L3G=1 : L4G=1 PAUSE TIME L2G=0 : L3G=0 : L4G=0 PATTERN = $0084200 GOSUB SHOWIT L1G=1 PAUSE TIME L1G=0 PATTERN = LED_25 GOSUB SHOWIT L2G=1 : L3G=1 PAUSE TIME L2G=0 : L3G=0 PATTERN = $0084000 GOSUB SHOWIT L3G=1 PAUSE TIME L3G=0 NEXT Z W = W+1 IF W = 1 THEN G4 W=0 '****************************** ' GOLD LETTER "O" '********************************* O1: GOSUB CLR_LEVELS PAUSE 50 ' CLEAR DISPLAY AND PAUSE BEFORE LETTER "O" W=0 O11: TIME = 100 ' RESET TIME FROM GREEN ROUTINE (WAS 2) FOR Z = 1 TO 30 ' ' DETERMINES OVERALL TIME FOR THE DISFPLAY PATTERN = $0008420 ' THIS PATTERN WILL BE SHOWN ON LEVELS 1 AND 5 GOSUB SHOWIT ''''''''''''''''''''''''''''''''' GOSUB MPX_1 ' MPX LEVEL 1 GOSUB MPX_5 ' MPX LEVEL 5 PATTERN = $0100001 'LED 1 AND LED 21 GOSUB SHOWIT ''''''''''''''''''''' i=1 ' start layer is 2 j=3 ' end layer is 4 GOSUB MPX ' i and j defined to mpx layers 2, 3, and 4 ' THE LEVELS ARE THE SAME AS LED_3, SAME i and j NEXT Z IF W=1 THEN RETURN '**************************** O2: FOR Z = 1 TO 10 ' ' DETERMINES OVERALL TIME FOR THE DISFPLAY PATTERN = $0010840 ' THIS PATTERN WILL BE SHOWN ON LEVELS 1 AND 5 GOSUB SHOWIT ''''''''''''''''''''''''''''''''' GOSUB MPX_1 ' MPX LEVEL 1 GOSUB MPX_5 ' MPX LEVEL 5 PATTERN = $0200002 'LED 2 AND LED 22 GOSUB SHOWIT ''''''''''''''''''''' i=1 ' start layer is 2 j=3 ' end layer is 4 GOSUB MPX ' i and j defined to mpx layers 2, 3, and 4 ' THE LEVELS ARE THE SAME AS LED_3, SAME i and j NEXT Z IF W=1 THEN O11 '******************************* O3: FOR Z = 1 TO 10 PATTERN = $0021080 ' THIS PATTERN WILL BE SHOWN ON LEVELS 1 AND 5 GOSUB SHOWIT ''''''''''''''''''''''''''''''''' GOSUB MPX_1 ' MPX LEVEL 1 GOSUB MPX_5 ' MPX LEVEL 5 PATTERN = $0400004 'LED 3 AND LED 32 GOSUB SHOWIT ''''''''''''''''''''' i=1 ' start layer is 2 j=3 ' end layer is 4 GOSUB MPX ' i and j defined to mpx layers 2, 3, and 4 'THE LEVELS ARE THE SAME AS LED_3, SAME i and j NEXT Z IF W=1 THEN O2 '**************************** O4: TIME = 100 ' TIME WAS SET TO 2 IN "O5", NEED TO RESET FOR Z = 1 TO 10 ' ' DETERMINES OVERALL TIME FOR THE DISFPLAY PATTERN = $0042100 ' THIS PATTERN WILL BE SHOWN ON LEVELS 1 AND 5 GOSUB SHOWIT ''''''''''''''''''''''''''''''''' GOSUB MPX_1 ' MPX LEVEL 1 GOSUB MPX_5 ' MPX LEVEL 5 PATTERN = $0800008 'LED 4 AND LED 24 GOSUB SHOWIT ''''''''''''''''''''' i=1 ' start layer is 2 j=3 ' end layer is 4 GOSUB MPX ' i and j defined to mpx layers 2, 3, and 4 ' THE LEVELS ARE THE SAME AS LED_3, SAME i and j NEXT Z IF W=1 THEN O3 '***************************** O5: TIME = 2 'SET TIME SLOWER FOR PROPER ADVANCE TIME FOR LETTERS FOR Z = 1 TO 120 PATTERN = $0084200 GOSUB SHOWIT L1G=1 : L5G=1 PAUSE TIME L1G=0 : L5G=0 PATTERN = $1000010 GOSUB SHOWIT L2G=1 : L3G=1 : L4G=1 PAUSE TIME L2G=0 : L3G=0 : L4G=0 NEXT Z W=W+1 IF W=1 THEN GOTO O4 RETURN '**************************** '**************************** ' PACK: ' SUBROUTINE FOR "PACKERS" '*********************************** TIME = 100 'TIME FOR GREEN ON TIME IN MPX TIME_1 = 20 ' TIME FOR RED ON TIME IN MPX '************************ ' GOLD LETTER "P" '***************************** TIME = 100 FOR Z = 1 TO 10 PATTERN = $0008421 GOSUB SHOWIT GOSUB MPX_3 GOSUB MPX_5 PATTERN = LED_1 GOSUB SHOWIT i=0 j=4 'ALL 5 LEVELS REQUIRED GOSUB MPX PATTERN = LED_21 GOSUB SHOWIT GOSUB MPX_4 'LEVEL 4 NEXT Z ''''''''''''''''' FOR Z = 1 TO 10 PATTERN = $0010842 GOSUB SHOWIT GOSUB MPX_3 GOSUB MPX_5 PATTERN = LED_2 GOSUB SHOWIT i = 0 j = 4 'ALL 5 LEVELS REQUIRED GOSUB MPX PATTERN = LED_22 GOSUB SHOWIT GOSUB MPX_4 'LEVEL 4 NEXT Z ''''''''''''''''''''' FOR Z = 1 TO 10 PATTERN = $0021084 GOSUB SHOWIT GOSUB MPX_3 GOSUB MPX_5 PATTERN = LED_3 GOSUB SHOWIT i = 0 j = 4 'ALL 5 LEVELS REQUIRED GOSUB MPX PATTERN = LED_23 GOSUB SHOWIT GOSUB MPX_4 'LEVEL 4 NEXT Z ''''''''''''''''''''' FOR Z = 1 TO 10 PATTERN = $0042108 GOSUB SHOWIT GOSUB MPX_3 GOSUB MPX_5 PATTERN = LED_4 GOSUB SHOWIT i = 0 j = 4 'ALL 5 LEVELS REQUIRED GOSUB MPX PATTERN = LED_24 GOSUB SHOWIT GOSUB MPX_4 'LEVEL 4 NEXT Z ''''''''''''' TIME = 2 FOR Z = 1 TO 80 PATTERN = $0084210 GOSUB SHOWIT L3G=1 : L5G=1 PAUSE TIME L3G=0 : L5G=0 PATTERN = LED_5 GOSUB SHOWIT L1G=1 : L2G=1 : L3G=1 : L4G=1 : L5G=1 PAUSE TIME L1G=0 : L2G=0 : L3G=0 : L4G=0 : L5G=0 PATTERN = LED_25 GOSUB SHOWIT L4G=1 PAUSE TIME L4G=0 NEXT Z '********************* 'GOLD LETTER "A" '********************* TIME = 100 for z = 1 to 10 PATTERN = LED_11 GOSUB SHOWIT GOSUB MPX_5 PATTERN = $0008020 GOSUB SHOWIT GOSUB MPX_4 PATTERN = $0100001 GOSUB SHOWIT i=0 j=2 gosub mpx pattern = row_1 gosub showit gosub mpx_3 next z ''''''''''''''''''''''''''' for z = 1 to 10 PATTERN = LED_12 GOSUB SHOWIT GOSUB MPX_5 PATTERN = $0010040 GOSUB SHOWIT GOSUB MPX_4 PATTERN = $0200002 GOSUB SHOWIT i=0 j=2 gosub mpx pattern = row_2 gosub showit gosub mpx_3 next z ''''''''''''''''''' for z = 1 to 10 PATTERN = LED_13 GOSUB SHOWIT GOSUB MPX_5 PATTERN = $0020080 GOSUB SHOWIT GOSUB MPX_4 PATTERN = $0400004 GOSUB SHOWIT i=0 j=2 gosub mpx pattern = row_3 gosub showit gosub mpx_3 next z ''''''''''''''''''' for z = 1 to 10 PATTERN = LED_14 GOSUB SHOWIT GOSUB MPX_5 PATTERN = $0040100 GOSUB SHOWIT GOSUB MPX_4 PATTERN = $0800008 GOSUB SHOWIT i=0 j=2 gosub mpx pattern = row_4 gosub showit gosub mpx_3 next z '''''''''''''''''''''''' time = 2 for z = 1 to 60 pattern = LED_15 GOSUB SHOWIT L5G=1 PAUSE TIME L5G=0 PATTERN =$0080200 GOSUB SHOWIT L4G=1 PAUSE TIME L4G=0 PATTERN = $1000010 GOSUB SHOWIT L1G=1 : L2G=1 : L3G=1 PAUSE TIME L1G=0 : L2G=0 : L3G=0 PATTERN = ROW_5 GOSUB SHOWIT L3G=1 PAUSE TIME L3G=0 NEXT Z ''''''''''''''''' 'PATTERN FOR GOLD "C" '******************** TIME = 100 FOR Z = 1 TO 10 PATTERN = $0108420 GOSUB SHOWIT GOSUB MPX_1 GOSUB MPX_5 PATTERN = LED_1 GOSUB SHOWIT i=1 j=2 gosub mpx next z ''''''''''''''' FOR Z = 1 TO 10 PATTERN = $0210840 GOSUB SHOWIT GOSUB MPX_1 GOSUB MPX_5 PATTERN = LED_2 GOSUB SHOWIT i=1 j=2 gosub mpx next z ''''''''''''''''' FOR Z = 1 TO 10 PATTERN = $0421080 GOSUB SHOWIT GOSUB MPX_1 GOSUB MPX_5 PATTERN = LED_3 GOSUB SHOWIT i=1 j=2 gosub mpx next z '''''''''''''''''' FOR Z = 1 TO 10 PATTERN = $0842100 GOSUB SHOWIT GOSUB MPX_1 GOSUB MPX_5 PATTERN = LED_4 GOSUB SHOWIT i=1 j=2 gosub mpx next z ''''''''''''''' time = 2 for z = 1 to 120 pattern = $1084200 gosub showit L1G=1 : L5G=1 pause time L1G=0 : L5G=0 pattern = led_5 gosub SHOWIT L2G=1 : L3G=1 : L4G=1 PAUSE TIME L2G=0 : L3G=0 : L4G=0 NEXT Z '''''''''''''''''''''' 'PATTERN FOR GOLD "K" '***************** TIME = 100 FOR Z = 1 TO 6 PATTERN = LED_1 GOSUB SHOWIT i=0 j=4 gosub mpx pattern = $0000420 gosub showit gosub mpx_3 PATTERN = LED_16 GOSUB SHOWIT GOSUB MPX_2 GOSUB MPX_4 PATTERN = LED_21 GOSUB SHOWIT GOSUB MPX_1 GOSUB MPX_5 NEXT Z ''''''''''''''''''''' FOR Z = 1 TO 6 PATTERN = LED_2 GOSUB SHOWIT i=0 j=4 gosub mpx pattern = $0000840 gosub showit gosub mpx_3 PATTERN = LED_17 GOSUB SHOWIT GOSUB MPX_2 GOSUB MPX_4 PATTERN = LED_22 GOSUB SHOWIT GOSUB MPX_1 GOSUB MPX_5 NEXT Z '''''''''''''''' FOR Z = 1 TO 6 PATTERN = LED_3 GOSUB SHOWIT i=0 j=4 gosub mpx pattern = $0001080 gosub showit gosub mpx_3 PATTERN = LED_18 GOSUB SHOWIT GOSUB MPX_2 GOSUB MPX_4 PATTERN = LED_23 GOSUB SHOWIT GOSUB MPX_1 GOSUB MPX_5 NEXT Z ''''''''''''''''''''''' FOR Z = 1 TO 6 PATTERN = LED_4 GOSUB SHOWIT i=0 j=4 gosub mpx pattern = $0002100 gosub showit gosub mpx_3 PATTERN = LED_19 GOSUB SHOWIT GOSUB MPX_2 GOSUB MPX_4 PATTERN = LED_24 GOSUB SHOWIT GOSUB MPX_1 GOSUB MPX_5 NEXT Z ''''''''''''''''''''''' TIME = 3 FOR Z = 1 TO 100 PATTERN = LED_5 GOSUB SHOWIT L1G=1 : L2G=1 : L3G=1 : L4G=1 : L5G=1 PAUSE TIME L1G=0 : L2G=0 : L3G=0 : L4G=0 : L5G=0 PATTERN = $0004200 GOSUB SHOWIT L3G=1 PAUSE TIME L3G=0 PATTERN = LED_20 GOSUB SHOWIT L2G=1 : L4G=1 PAUSE TIME L2G=0 : L4G=0 PATTERN = LED_25 GOSUB SHOWIT L1G=1 : L5G=1 PAUSE TIME L1G=0 : L5G=0 NEXT Z RETURN '********************* '********************** GOPAKERS: '************ "GO PACKERS" VERTICAL DISPLAY ' FIRST 4 LAYERS ARE GOLD, TOP LAYER IS GREEN FOR X = 0 TO 4 FOR Y = 0 TO 300 GOSUB PACKERS 'GET THE PATTERN AND SHOWIT IF X = 4 THEN GREEN LEVELG.0[X]=1 PAUSEUS 170 LEVELG.0[X]=0 LEVELR.0[X]=1 PAUSEUS 40 LEVELR.0[X]=0 NEXT Y GOTO GP GREEN: '**************************TOP LEVEL CHANGES TO GREEN LEVELG.0[X]=1 PAUSE 700 LEVELG.0[X]=0 PAUSE 250 GP: NEXT X LENGTH = LENGTH + 1 IF LENGTH = 2 THEN PAUSE 500 IF LENGTH = 9 THEN LENGTH = 0 IF LENGTH = 0 THEN PAUSE 1000 IF LENGTH = 0 THEN W = W+1 IF W<1 THEN GOPAKERS RETURN '*********************** '************************** PACKERSRULE: ' FIRST 4 LAYERS ARE GOLD, TOP LAYER IS GREEN FOR X = 0 TO 4 FOR Y = 0 TO 150 GOSUB PACK_RULES IF X = 4 THEN GREEN_1 LEVELG.0[X]=1 PAUSEUS 170 LEVELG.0[X]=0 LEVELR.0[X]=1 PAUSEUS 40 LEVELR.0[X]=0 NEXT Y GOTO GP_1 GREEN_1: '*****************TOP LEVEL CHANGES TO GREEN LEVELG.0[X]=1 PAUSE 700 LEVELG.0[X]=0 PAUSE 350 GP_1: NEXT X LENGTH = LENGTH + 1 IF LENGTH = 7 THEN PAUSE 500 IF LENGTH = 11 THEN LENGTH = 0 IF LENGTH = 0 THEN PAUSE 1000 IF LENGTH = 0 THEN GOTO BS GOTO PACKERSRULE BS: GOSUB BEARS_SUCK FOR X = 0 TO 4 LEVELR.0[X] =1 PAUSE 100 IF X = 4 THEN PAUSE 500 LEVELR.0[X]=0 NEXT X pause 350 LENGTH = LENGTH + 1 IF LENGTH = 5 THEN PAUSE 1000 IF LENGTH = 9 THEN LENGTH = 0 IF LENGTH = 0 THEN PAUSE 1000 IF LENGTH = 0 THEN RETURN GOTO BS '************************* '********************** ' ROUTINES FOR ANIMATIONS FOLLOW ' ALL ANIMATION ROUTINES ARE SEPARATED BY A DOUBLE ROW OF ** '************************** '**************************** MAIN: CLEAR GOSUB CLR_LEVELS ' CLR_LEVELS SETS RED AND GREEN TO ZERO X=0 : Y=0 : Z=0 : LENGTH=0 '************************************************* ****** PAUSE 2000 ' DELAY ON STARTUP (ONLY USED FOR TAKING VIDEO) '*********************************** ' FADE: X=1500 ' START BY TURNING RED ON SLOWLY Y=1 PATTERN = FULL GOSUB SHOWIT FADE_1: L1R=0 : L2R=0 : L3R=0 : L4R=0 : L5R=0 PAUSEUS X L1R=1 : L2R=1 : L3R=1 : L4R=1 : L5R=1 PAUSEUS Y X = X-1 Y = Y + 1 IF X = 0 THEN FADEOUT GOTO FADE_1 FADEOUT: ' FADES FRON GREEN TO RED TO GREEN TO RED TO GREEN 'ALSO RESULTS IN YELLOW - ORANGE COLORS TIME = 50 ' RED OFF TIME TIME_1 = 100 ;GREEN OFF TIME FOR W = 1 TO 3 Y=1000 ' RED ON TIME Z=1 'GREEN ON TIME FOR X = 1 TO 1000 Y = Y-1 'RED ON TIME Z = Z+1 'GREEN ON TIME L1R=1 : L2R=1 : L3R=1 : L4R=1 : L5R=1 PAUSEUS Y L1R=0 : L2R=0 : L3R=0 : L4R=0 : L5R=0 PAUSEUS TIME ' TIME FOR RED TO BE OFF L1G=1 : L2G=1 : L3G=1 : L4G=1 : L5G=1 PAUSEUS Z L1G=0 : L2G=0 : L3G=0 : L4G=0 : L5G=0 PAUSEUS TIME_1 ' TIME FOR GREEN TO BE OFF NEXT X TIME = 200 ' RED OFF TIME TIME_1 = 50 ' GREEN OFF TIME Y=1 'RED ON TIME Z=1000 'GREEN ON TIME FOR X = 1 TO 1000 Y=Y+1 Z=Z-1 L1G=1 : L2G=1 : L3G=1 : L4G=1 : L5G=1 PAUSEUS Z L1G=0 : L2G=0 : L3G=0 : L4G=0 : L5G=0 PAUSEUS TIME_1 L1R=1 : L2R=1 : L3R=1 : L4R=1 : L5R=1 PAUSEUS Y L1R=0 : L2R=0 : L3R=0 : L4R=0 : L5R=0 PAUSEUS TIME NEXT X NEXT W '******************************* '************************************************* ** X=0 : W=0 ' CLEAR COUNTERS BEFORE SUBROUTINE GOSUB GOPAKERS ' RISING "GO PACKERS" '************************************************* '*********************************************** PILLAR: ' "RISING PILLARS" (LINES) OF LED'S TIME = 50 GOSUB PILPAT GOSUB SHOWIT GOSUB CLR_LEVELS L1R= 1 PAUSE TIME L2R= 1 PAUSE TIME L3R= 1 PAUSE TIME L4R= 1 PAUSE TIME L5R=1 PAUSE TIME LENGTH = LENGTH + 1 IF LENGTH = 25 THEN PIL_DONE GOSUB PILPAT GOSUB SHOWIT L1R=0 : L2R=0 : L3R=0 : L4R=0 : L5R=0 L1G= 1 PAUSE TIME L2G= 1 PAUSE TIME L3G= 1 PAUSE TIME L4G= 1 PAUSE TIME L5G=1 PAUSE TIME LENGTH = LENGTH + 1 L1G=0 : L2G=0 : L3G=0 : L4G=0 : L5G=0 IF LENGTH = 25 THEN PIL_DONE GOTO PILLAR PIL_DONE: LENGTH = 0 '************************************************* ******* '************************************************* ****** MOVING_SQUARES: ' 2 X 2 X 2 RED AND GREEN SQUARES JUMPING AROUND TIME = 350 LENGTH=0 GOSUB CLR_LEVELS ' THERE IS NO DIRECT RETURN FROM THE SUBROUTINE SMALL_SQ, 'IT "FALLS THROUGH" TO THE SUBROUTINE SHOWME, AND RETURNS FROM THERE SQR_1: L1R=1 : L2R=1 : L3G=0 : L4G=0 ' LEVEL ONE AND TWO GOSUB SMALL_SQ ' COMBINATION OF A PATTERN AND SHOWME L1R=0 : L2R=0 : L2G=1 : L3G=1 ' LEVEL TWO AND THREE LENGTH = LENGTH + 1 GOSUB SMALL_SQ L2G=0 : L3G=0 : L3R=1 : L4R=1 'LEVEL THREE AND FOUR LENGTH = LENGTH + 1 GOSUB SMALL_SQ L3R=0 : L4R=0 : L4G=1 : L5G=1 ;LEVEL FOUR AND FIVE LENGTH = LENGTH + 1 GOSUB SMALL_SQ L4G=0 : L5G=0 : L1G=1 : L2G=1 LENGTH = LENGTH + 1 GOSUB SMALL_SQ L1G=0 : L2G=0 : L2R=1 : L3R=1 LENGTH = LENGTH + 1 GOSUB SMALL_SQ L2R=0 : L3R=0 : L3G=1 : L4G=1 LENGTH = LENGTH + 1 GOSUB SMALL_SQ L3G=0 : L4G=0 : L4R=1 : L5R=1 LENGTH = LENGTH + 1 GOSUB SMALL_SQ L4R=0 : L5R=0 : L3G=1 : L4G=1 LENGTH = LENGTH +1 GOSUB SMALL_SQ L3G=0 : L4G=0 IF LENGTH = 16 THEN EX_SQ GOTO SQR_1 EX_SQ: LENGTH=0 L3G=0 : L4G=0 '************************************* '*************************************** BLENDING_SQUARE: TIME = 5 ' THIS IS THE PAUSE TIME IN "SHOWME" FOR Z = 1 TO 8 FOR X = 0 TO 4 FOR Y = 1 TO 6 PATTERN = DOT LEVELR.0[X]=1 GOSUB SHOWME LEVELR.0[X]=0 PATTERN = INSQUARE LEVELG.0[X]=1 GOSUB SHOWME NEXT Y NEXT X FOR X = 4 TO 0 STEP -1 FOR Y = 1 TO 6 PATTERN = DOT LEVELR.0[X]=1 GOSUB SHOWME LEVELR.0[X]=0 PATTERN = INSQUARE LEVELG.0[X]=0 GOSUB SHOWME NEXT Y NEXT X FOR X = 0 TO 4 FOR Y = 1 TO 6 PATTERN = DOT LEVELG.0[X]=1 GOSUB SHOWME LEVELG.0[X]=0 PATTERN = INSQUARE LEVELR.0[X]=1 GOSUB SHOWME NEXT Y NEXT X NEXT Z '************************************************* ****** '************************************************* ******** SOLID_RING: X=0 : LENGTH=0 L5R=1 : L4R=0 : L3R=0 : L2R=0 : L1R=0 TIME =100 ' THIS IS THE PAUSE TIME IN "SHOWME" A: LENGTH = 0 A_1: GOSUB RINGPAT GOSUB SHOWME LENGTH = LENGTH+1 IF LENGTH < 16 THEN A_1 X = X + 1 IF X = 1 THEN L5R=0 : L4R=1 : GOTO A IF X = 2 THEN L4R=0 : L3R=1 : GOTO A IF X = 3 THEN L3R=0 : L2R=1 : GOTO A IF X = 4 THEN L2R=0 : L1R=1 : GOTO A B: LENGTH = 0 B_1: GOSUB RINGPAT_1 GOSUB SHOWME LENGTH = LENGTH + 1 IF LENGTH < 16 THEN B_1 x = x + 1 if X = 6 THEN L1R=0 : L2R=1 : GOTO B IF X = 7 THEN L2R=0 : L3R=1 : GOTO B IF X = 8 THEN L3R=0 : L4R=1 : GOTO B IF X = 9 THEN L4R=0 : L5R=1 : GOTO B IF X = 10 THEN X = 0 '*********************************************** '************************************************* *** RING: ' A CIRCULATING VERTICAL RING, WITH ALTERNATING COLOR LED'S TIME=1 X=0: Y = 1 : Z=1 LENGTH=0 FOR Y = 1 TO 4 FOR Z = 1 TO 16 GOSUB RING_AROUND 'GETS THE PERIMETER LED NUMBER GOSUB SHOWIT GOSUB RING_MUX 'AND DISPLAYS IT USING LEVEL MUX ROUTINE LENGTH = LENGTH + 1 NEXT Z Z=1 LENGTH = 0 next y '**************************************** '******************************** RED_GRN_SQUARE: ' GREEN OUTER SQUARE, ROTATING RED SPOKES INSIDE TIME =4 FOR Y = 1 TO 18 FOR X = 1 TO 5 PATTERN = OUTSQUARE GOSUB SHOWIT L1G=1 : L2G=1 : L3G=1 : L4G=1 : L5G=1 PAUSE TIME L1G=0 : L2G=0 : L3G=0 : L4G=0 : L5G=0 PAUSE TIME PATTERN = SPOKE_1 GOSUB SHOWIT L1R=1 : L2R=1 : L3R=1 : L4R=1 : L5R=1 PAUSE TIME L1R=0 : L2R=0 : L3R=0 : L4R=0 : L5R=0 PAUSE TIME NEXT X FOR X = 1 TO 4 PATTERN = OUTSQUARE GOSUB SHOWIT L1G=1 : L2G=1 : L3G=1 : L4G=1 : L5G=1 PAUSE TIME L1G=0 : L2G=0 : L3G=0 : L4G=0 : L5G=0 PAUSE TIME PATTERN = SPOKE_2 GOSUB SHOWIT L1R=1 : L2R=1 : L3R=1 : L4R=1 : L5R=1 PAUSE TIME L1R=0 : L2R=0 : L3R=0 : L4R=0 : L5R=0 PAUSE TIME NEXT X FOR X = 1 TO 4 PATTERN = OUTSQUARE GOSUB SHOWIT L1G=1 : L2G=1 : L3G=1 : L4G=1 : L5G=1 PAUSE TIME L1G=0 : L2G=0 : L3G=0 : L4G=0 : L5G=0 PAUSE TIME PATTERN = SPOKE_3 GOSUB SHOWIT L1R=1 : L2R=1 : L3R=1 : L4R=1 : L5R=1 PAUSE TIME L1R=0 : L2R=0 : L3R=0 : L4R=0 : L5R=0 PAUSE TIME NEXT X FOR X = 1 TO 4 PATTERN = OUTSQUARE GOSUB SHOWIT L1G=1 : L2G=1 : L3G=1 : L4G=1 : L5G=1 PAUSE TIME L1G=0 : L2G=0 : L3G=0 : L4G=0 : L5G=0 PAUSE TIME PATTERN = SPOKE_4 GOSUB SHOWIT L1R=1 : L2R=1 : L3R=1 : L4R=1 : L5R=1 PAUSE TIME L1R=0 : L2R=0 : L3R=0 : L4R=0 : L5R=0 PAUSE TIME NEXT X NEXT Y '************************** '***************************** FLATS: 'RED AND GREEN VERTICAL SLICES X=0 TIME = 500 ' PAUSE TIME IN "SHOWME" FOR X = 1 TO 4 GOSUB CLR_LEVELS L1R=1 : L2R=1 : L3R=1 : L4R=1 : L5R=1 PATTERN = ROW_1_5 GOSUB SHOWME L1R=0 : L2R=0 : L3R=0 : L4R=0 : L5R=0 L1G=1 : L2G=1 : L3G=1 : L4G=1 : L5G=1 PATTERN = COL_2_4 GOSUB SHOWME L1G=0 : L2G=0 : L3G=0 : L4G=0 : L5G=0 L1R=1 : L2R=1 : L3R=1 : L4R=1 : L5R=1 PATTERN = ROW_2_4 GOSUB SHOWME L1R=0 : L2R=0 : L3R=0 : L4R=0 : L5R=0 L1G=1 : L2G=1 : L3G=1 : L4G=1 : L5G=1 PATTERN = COL_1_5 GOSUB SHOWME NEXT X L1G=0 : L2G=0 : L3G=0 : L4G=0 : L5G=0 X=0 W=0 '****************************** '****************************** ''''''GO PACK GO '''''''' PAUSE 100 ' SLIGHT DELAY BEFORE STARTING GOSUB GOPACK 'SUBROUTINE TO SPELL "GO" W=0 PAUSE 500 GOSUB PACK 'SUBROUTINE TO SPELL "PACKERS GOSUB GOPACK ' "GO" AGAIN W=0 PAUSE 100 '********************************* '******************************** GREEN_GOLD_RISER: 'RISING FULL LEVELS, FIRST GREEN THEN GOLD PATTERN = FULL FOR Z=0 TO 3 GOSUB SHOWIT L1G=1 PAUSE TIME L1G=0 : L2G=1 PAUSE TIME L2G=0 : L3G=1 PAUSE TIME L3G=0 : L4G=1 PAUSE TIME L4G=0 : L5G=1 PAUSE 350 L5G=0 FOR X = 0 TO 4 ' BRIGHTNESS AND FLICKER FOR GOLD FOR Y = 0 TO 500 'DETERMINES HOW LONG TO "LINGER" ON ONE LEVEL PATTERN = FULL GOSUB SHOWIT LEVELG.0[X]=1 PAUSEUS 170 LEVELG.0[X]=0 LEVELR.0[X]=1 PAUSEUS 40 LEVELR.0[X]=0 NEXT Y NEXT X PAUSE 250 NEXT Z '*********************************** '************************************* ' GREEN - GOLD FULL ALTERNATE ' PATTERN = FULL GOSUB SHOWIT for z = 1 to 8 for w = 1 to 10 L5G=1 : L4G=1 : L3G=1 : L2G=1 : L1G=1 PAUSE 10 GOSUB CLR_LEVELS next w PAUSE 10 i=0 j=4 for w=1 to 10 gosub mpx pause 10 GOSUB CLR_LEVELS NEXT W next z W=0 '**************************************** '******************************** IN_OUT_SQUARE: ' ALTERNATING RED AND GREEN SQUARES X = 0 TIME = 10 'PAUSE TIME IN "SHOWME" FOR Y = 1 TO 4 FOR X = 1 TO 35 PATTERN = OUTSQUARE L1R=1 : L5R=1 GOSUB SHOWME L1R=0 : L5R=0 L2G=1 : L3G=1 : L4G=1 PAUSE TIME L2G=0 : L3G=0 : L4G=0 NEXT X X = 0 PATTERN = INSQUARE GOSUB SHOWIT FOR X = 1 TO 35 L1G=1 : L5G=1 PAUSE TIME L1G=0 : L5G=0 : L2R=1 : L3R=1 : L4R=1 PAUSE TIME L2R=0 : L3R=0 : L4R=0 NEXT X X=0 FOR X = 1 TO 35 PATTERN = OUTSQUARE L1G=1 : L5G=1 GOSUB SHOWME L1G=0 : L5G=0 L2R=1 : L3R=1 : L4R=1 PAUSE TIME L2R=0 : L3R=0 : L4R=0 NEXT X X = 0 PATTERN = INSQUARE GOSUB SHOWIT FOR X = 1 TO 35 L1R=1 : L5R=1 PAUSE TIME L1R=0 : L5R=0 : L2G=1 : L3G=1 : L4G=1 PAUSE TIME L2G=0 : L3G=0 : L4G=0 NEXT X X=0 NEXT Y '******************************** '********************************* UP_DOWN_FULL: 'FULL RED LAYER, THEN GREEN, UP AND DOWN TIME = 150 PATTERN = FULL GOSUB SHOWIT FOR X = 1 TO 4 L1R = 1 PAUSE TIME L1R=0 : L2R=1 PAUSE TIME L2R=0 : L3R=1 PAUSE TIME L3R=0 : L4R=1 PAUSE TIME L4R=0 : L5R=1 PAUSE TIME L5R=0 : L4G=1 PAUSE TIME L4G=0 : L3G=1 PAUSE TIME L3G=0 : L2G=1 PAUSE TIME L2G=0 : L1G=1 PAUSE TIME L1G=0 PAUSE 50 NEXT X '************************************************* '*********************************** FIVE_LINES: X=0 : Y=0 : Z=0 : LENGTH = 0 TIME =40 GOSUB LINES ' GET THE NEXT LED PATTERN RED: FOR Y = 1 TO 5 ' DO 5 LED'S FOR X = 0 TO 1 'DETRMINES BRIGHTNESS GOSUB SHOWIT L1G=0 : L2G=0 : L3G=0 : L4G=0 : L5G=0 L1R=1 : L2R=1 : L3R=1 : L4R=1 : L5R=1 PAUSE TIME NEXT X LENGTH = LENGTH + 1 IF LENGTH = 25 THEN LENGTH = 0 IF LENGTH = 0 THEN Z = Z + 1 IF Z=2 THEN ROTATE_Y ' DONE, CONTINUE ON GOSUB LINES NEXT Y GOSUB LINES FOR Y = 1 TO 5 FOR X = 0 TO 1 GOSUB SHOWIT L1R=0 : L2R=0 : L3R=0 : L4R=0 : L5R=0 L1G=1 : L2G=1 : L3G=1 : L4G=1 : L5G=1 PAUSE TIME NEXT X LENGTH = LENGTH + 1 IF LENGTH = 25 THEN LENGTH = 0 GOSUB LINES NEXT Y GOTO RED 'START OVER '********************************* '******************************** ROTATE_Y: GOSUB CLR_LEVELS X=1 TIME = 30 'PAUSE TIME IN "SHOWME" FOR X = 1 TO 8 PATTERN = COL_2 L1G=1 GOSUB SHOWME ' SHOWME ADDS PAUSE TIME IN THE SUBROUTINE L1G=0 PATTERN = COL_1 L2G=1 GOSUB SHOWME L2G=0: L3G=1 PAUSE TIME L3G=0 : L4G=1 PAUSE TIME L4G=0 PATTERN = COL_2 L5G=1 GOSUB SHOWME PATTERN = COL_3 GOSUB SHOWME PATTERN = COL_4 GOSUB SHOWME L5G=0 PATTERN = COL_5 L4G=1 GOSUB SHOWME L4G=0 : L3G=1 PAUSE TIME L3G=0 : L2G=1 PAUSE TIME L2G=0 PATTERN = COL_4 L1G=1 GOSUB SHOWME PATTERN = COL_3 GOSUB SHOWME PATTERN = COL_2 L1G=0 GOSUB SHOWIT ' NO DELAY NEEDED AFTER SHOWIT HERE ! ! NEXT X X=1 '************************** '************************* ROTATE_X: TIME = 30 ' PAUSE TIME IN "SHOWME" FOR X = 1 TO 8 PATTERN = ROW_2 L1R=1 GOSUB SHOWME L1R=0 PATTERN = ROW_1 L2R=1 GOSUB SHOWME L2R=0: L3R=1 PAUSE TIME L3R=0 : L4R=1 PAUSE TIME L4R=0 PATTERN = ROW_2 L5R=1 GOSUB SHOWME PATTERN = ROW_3 GOSUB SHOWME PATTERN = ROW_4 GOSUB SHOWME L5R=0 PATTERN = ROW_5 L4R=1 GOSUB SHOWME L4R=0 : L3R=1 PAUSE TIME L3R=0 : L2R=1 PAUSE TIME L2R=0 PATTERN = ROW_4 L1R=1 GOSUB SHOWME PATTERN = ROW_3 GOSUB SHOWME NEXT X '********************************** '*************************************** BLENDING_CUBE: ' OUTSIDE CUBE, FILL WITH RED, EMPTY WITH GREEN TIME = 30 ' PAUSE TIME IN "SHOWME" FOR Z = 1 TO 6 FOR X = 0 TO 4 PATTERN = OUTSQUARE LEVELR.0[X]=1 GOSUB SHOWME NEXT X PAUSE 250 FOR X = 4 TO 0 STEP -1 PATTERN = OUTSQUARE LEVELR.0[X]=0 GOSUB SHOWME LEVELG.0[X]=1 GOSUB SHOWME NEXT X PAUSE 250 NEXT Z GOSUB CLR_LEVELS '***************************************** '******************************************* FLIP_X: '****** NOTICE THE ORDER OF STATEMENTS HERE - '****** GOSUB BACK_FORTH L1R=1 PAUSE TIME L1R=0 '******* THIS SEQUENCE IS NECESSARY TO PREVENT "GHOSTING" AND IS USED '******** IN OTHER ROUTINES FOR THE SAME REASON TIME = 3 LENGTH = 1 FOR Y = 1 TO 5 'NUMBER OF TIMES TO FLIP FOR X = 1 TO 10 'DETERMINES TIME BETWEEN FLIPS, AND FLICKER/BRIGHTNESS GOSUB BACK_FORTH 'GET THE PATTERN FOR ROW_1, GOTO SHOWIT, RETURN l1r=1 pause time L1R=0 LENGTH = LENGTH + 1 GOSUB BACK_FORTH 'GET THE PATTERN FOR ROW_2, GO TO SHOWIT, RETURN l2r=1 pause time L2R=0 LENGTH = LENGTH + 1 GOSUB BACK_FORTH 'GET THE PATTERN FOR R0W_3, GOTO SHOWIT, RETURN l3r=1 pause time L3R=0 LENGTH = LENGTH + 1 GOSUB BACK_FORTH 'GET THE PATTRN FOR ROW_4, GOTO SHOWIT, RETURN l4r=1 pause time L4R=0 LENGTH = LENGTH + 1 GOSUB BACK_FORTH 'GET THE PATTERN FOR ROW_5, GOTO SHOWIT, RETURN l5r=1 pause time L5R=0 LENGTH = 1 NEXT X ' FOR X = 1 TO 10 GOSUB BACK_FORTH ' BACK_FORTH HAS ROW SELECTION LOOKUP l1r=1 pause time L1R=0 LENGTH = LENGTH -1 GOSUB BACK_FORTH l2r=1 pause time L2R=0 LENGTH = LENGTH-1 GOSUB BACK_FORTH l3r=1 pause time L3R=0 LENGTH = LENGTH-1 GOSUB BACK_FORTH l4r=1 pause time L4R=0 LENGTH = LENGTH-1 GOSUB BACK_FORTH l5r=1 pause time L5R=0 LENGTH = 5 NEXT X NEXT Y ' FOR Y = 1 TO 5 FOR X = 1 TO 10 PATTERN = COL_1 'USE PATTERN HERE - NO LOOKUP FOR COL_1 TO COL_5 GOSUB SHOWIT ' COULD ADD LOOKUP, AND USE LENGTH POINTER INSTEAD L1G=1 PAUSE TIME L1G=0 PATTERN = COL_2 GOSUB SHOWIT L2G=1 PAUSE TIME L2G=0 PATTERN = COL_3 GOSUB SHOWIT L3G=1 PAUSE TIME L3G=0 PATTERN = COL_4 GOSUB SHOWIT L4G=1 PAUSE TIME L4G=0 PATTERN = COL_5 GOSUB SHOWIT L5G=1 PAUSE TIME L5G=0 NEXT X ' FOR X = 1 TO 10 PATTERN = COL_5 GOSUB SHOWIT L1G=1 PAUSE TIME L1G=0 PATTERN = COL_4 GOSUB SHOWIT L2G=1 PAUSE TIME L2G=0 PATTERN = COL_3 GOSUB SHOWIT L3G=1 PAUSE TIME L3G=0 PATTERN = COL_2 GOSUB SHOWIT L4G=1 PAUSE TIME L4G=0 PATTERN = COL_1 GOSUB SHOWIT L5G=1 PAUSE TIME L5G=0 NEXT X NEXT Y ' TIME = 150 FOR X = 1 TO 5 PATTERN = LFTSLSH L1R=1 : L2R=1 : L3R=1 : L4R=1 : L5R=1 GOSUB SHOWME ' SHOWME INCLUDES A PAUSE TIME PATTERN = RTSLSH GOSUB SHOWME NEXT X '********************************************* '*********************************************** RAPID_ROW: 'ALTERNATING RED AND GREEN FULL ROWS FRONT TO BACK TIME = 70 ' THIS IS THE PAUSE TIME IN "SHOWME" FOR X = 1 TO 5 L1R=1 : L2R=1 : L3R=1 : L4R=1 : L5R=1 L1G=0 : L2G=0 : L3G=0 : L4G=0 : L5G=0 PATTERN = ROW_1 GOSUB SHOWME PATTERN = ROW_2 GOSUB SHOWME PATTERN = ROW_3 GOSUB SHOWME PATTERN = ROW_4 GOSUB SHOWME PATTERN = ROW_5 GOSUB SHOWME L1R=0 : L2R=0 : L3R=0 : L4R=0 : L5R=0 L1G=1 : L2G=1 : L3G=1 : L4G=1 : L5G=1 PATTERN = ROW_5 GOSUB SHOWME PATTERN = ROW_4 GOSUB SHOWME PATTERN = ROW_3 GOSUB SHOWME PATTERN = ROW_2 GOSUB SHOWME PATTERN = ROW_1 GOSUB SHOWME NEXT X '******************* '********************** X=0 : Y=0 : LENGTH=0 : W=0 ' CLEAR COUNTERS GOSUB GOPAKERS 'RISING "GO PACKERS" '********************* '*********************** DOTS: TIME = 20 ' PAUSE TIME IN "SHOWME" LENGTH = 0 FOR Y = 1 TO 8 FOR X = 1 TO 2 GOSUB PILPAT L4R=1 GOSUB SHOWME L4R=0 LENGTH = LENGTH + 1 GOSUB PILPAT L1G=1 GOSUB SHOWME L1G=0 LENGTH = LENGTH + 1 GOSUB PILPAT L3R=1 GOSUB SHOWME L3R=0 LENGTH = LENGTH + 1 GOSUB PILPAT L5G=1 GOSUB SHOWME L5G=0 LENGTH = LENGTH + 1 GOSUB PILPAT L2R=1 GOSUB SHOWME L2R=0 LENGTH = LENGTH + 1 GOSUB PILPAT L4G=1 GOSUB SHOWME L4G=0 LENGTH = LENGTH + 1 GOSUB PILPAT L1R=1 GOSUB SHOWME L1R=0 LENGTH = LENGTH + 1 GOSUB PILPAT L3G=1 GOSUB SHOWME L3G=0 LENGTH = LENGTH + 1 GOSUB PILPAT L2R=1 GOSUB SHOWME L2R=0 LENGTH = LENGTH + 1 GOSUB PILPAT L5G=1 GOSUB SHOWME L5G=0 LENGTH = LENGTH + 1 GOSUB PILPAT L3R=1 GOSUB SHOWME L3R=0 LENGTH = LENGTH + 1 GOSUB PILPAT L1R=1 GOSUB SHOWME L1R=0 NEXT X X=0 LENGTH = 0 NEXT Y '*********************************** '************************************ ANGLE_FILL: TIME = 50 ' PAUSE TIME IN "SHOWME" FOR Y = 1 TO 4 GOSUB CLR_LEVELS FOR X = 1 TO 3 PATTERN = LED_25 L1R=1 GOSUB SHOWME NEXT X ' FOR X = 1 TO 3 PATTERN = F_1 L2R=1 GOSUB SHOWME NEXT X ' FOR X = 1 TO 3 PATTERN = F_2 L3R=1 GOSUB SHOWME NEXT X ' FOR X = 1 TO 3 PATTERN = F_3 L4R=1 GOSUB SHOWME NEXT X ' FOR X = 1 TO 3 PATTERN = F_4 L5R=1 GOSUB SHOWME NEXT X PAUSE 300 ' LINGER ON THE RED PATTERN GOSUB CLR_LEVELS ' FOR X = 1 TO 3 PATTERN = LED_1 L1G=1 GOSUB SHOWME NEXT X ' FOR X = 1 TO 3 PATTERN = F_5 L2G=1 GOSUB SHOWME NEXT X ' FOR X = 1 TO 3 PATTERN = F_6 L3G=1 GOSUB SHOWME NEXT X ' FOR X = 1 TO 3 PATTERN = F_7 L4G=1 GOSUB SHOWME NEXT X ' FOR X = 1 TO 3 PATTERN = F_8 L5G=1 GOSUB SHOWME NEXT X ' LINGER ON THE GREEN PATTERN PAUSE 300 NEXT Y GOSUB CLR_LEVELS '*************************** '****************************** SNAKE: ' SUBROUTINES SNAKE_1 THROUGH _5 USE GOSUB SHOWME TIME = 180 ' THIS IS THE PAUSE TIME IN SHOWME Z=8 FOR Y = 1 TO 2 GOSUB CLR_LEVELS LENGTH = 0 ' SNAKE STARTS AT S_1 AND LEVEL 3 L3R=1 GOSUB SNAKE_1 '****************************************** ' HERE WE GO FROM LEVEL 3 TO LEVEL 4 ' WE DO NOT USE LOOKUP HERE FOR X = 1 TO 10 ' PATTERN = S_9 GOSUB SHOWIT L3R=1 ' MAKE SURE LAYER 3 IS ON PAUSE 3 L3R=0 ' TURN OFF LAYER 3 PATTERN = S_10 ' ONLY ONE DOT WHEN CHANGING LAYERS GOSUB SHOWIT ' GET NEW PATTERN L4R=1 ' TURN ON LAYER 4 PAUSE 3 ' WAIT L4R=0 ' TURN OFF LAYER 4 PAUSE 3 ' WAIT NEXT X ' LOOP AGAIN ' FOR X = 1 TO 10 PATTERN = S_10 ' ONLY ONE DOT WHEN CHANGING LAYERS GOSUB SHOWIT ' NOW PREPARE FOR NEXT LAYER SHIFT L3R=1 ' TURN LAYER 3 BACK ON PAUSE 3 L3R=0 PATTERN = S_11 GOSUB SHOWIT ' GET THE NEW PATTERN L4R=1 ' TURN LAYER 4 ON PAUSE 3 L4R=0 'TURN LAYER 4 OFF PAUSE 3 ' WAIT NEXT X ' LOOP AGAIN ' LENGTH = 11 ' NOW LEVEL 4, START AT S_12 L3R=0 : L4R=1 ' AND END AT S_20 GOSUB SNAKE_2 ' THIS PART DOES NOT LEND ITSELF TO LOOKUP FOR X = 1 TO 10 ' S_21 AND S_22 PATTERN = S_21 ' GO FROM LEVEL 4 TO LEVEL 5 GOSUB SHOWIT L4R=1 PAUSE 3 L4R=0 PATTERN = $0100000 ' LED 21 GOSUB SHOWIT L5R=1 PAUSE 3 L5R=0 PAUSE 3 NEXT X ' FOR X = 1 TO 10 PATTERN = $0100000 GOSUB SHOWIT L4R=1 PAUSE 3 L4R=0 PATTERN = S_22 GOSUB SHOWIT L5R=1 PAUSE 3 L5R=0 PAUSE 3 NEXT X ' LENGTH = 22 ' NOW AT LEVEL 5, S_22 TO S_34 L4R=0 : L5R=1 ' THEN WE GO BACK TO LEVEL 1 GOSUB SNAKE_3 '****************** NOW WE GO BACK TO LEVEL 1 FOR X = 1 TO 4 PATTERN = S_35 GOSUB SHOWIT ' L5 IS ON YET L5R=1 PAUSE 5 L5R=0 PAUSE 5 ' PATTERN = $0200000 GOSUB SHOWIT L4R=1 : L5R=1 PAUSE 5 L4R=0 : L5R=0 PAUSE 5 NEXT X ' L4R=1 ' LEVEL 4 AND 5 0N PAUSE 80 L3R=1 ' LEVEL 5 , 4 , AND 3 0N PAUSE 80 L2R=1 ' LEVEL 5 OFF, 4 , 3 , AND 2 ON PAUSE 80 L4R=0 L1R=1 ' LEVEL 4 OFF, 3, 2, AND 1 ON PAUSE 80 L3R=0 PAUSE 80 L2R=0 PAUSE 80 L1R=0 '******************************************** LAYER ONE MOVE FOR X = 1 TO 4 PATTERN = $0200000 GOSUB SHOWIT L2R=1 : L1R=1 PAUSE 5 L2R=0 : L1R=0 PAUSE 5 ' PATTERN = S_35 GOSUB SHOWIT ' L5 IS ON YET L1R=1 PAUSE 5 L1R=0 PAUSE 5 NEXT X '************************** L1R = 1 'TURN LAYER ONE BACK ON FOR X = 1 TO Z PATTERN = S_34 GOSUB SHOWIT PAUSE 3 NEXT X '********************** LENGTH = 35 GOSUB SNAKE_4 NEXT Y GOSUB CLR_LEVELS '************************** '****************************** RD_GRN_SQ: 'GREEN OUTER SQUARE, THEN A RED INNER SQUARE TIME = 1 FOR Y = 1 TO 4 PATTERN = OUTSQUARE ' THIS IS THE OUTER SQUARE GOSUB SHOWIT FOR X = 1 TO 50 L1G=1 PAUSE TIME L1G=0 PAUSE TIME NEXT X ' FOR X = 1 TO 40 L1G = 1 PAUSE TIME L1G=0 PAUSE TIME L2G=1 PAUSE TIME L2G=0 PAUSE TIME NEXT X ' FOR X = 1 TO 30 L1G=1 PAUSE TIME L1G=0 PAUSE TIME L2G=1 PAUSE TIME L2G=0 PAUSE TIME L3G=1 PAUSE TIME L3G=0 PAUSE TIME NEXT X ' FOR X = 1 TO 50 L1G=1 PAUSE TIME L1G=0 PAUSE TIME L2G=1 PAUSE TIME L2G=0 PAUSE TIME L3G=1 PAUSE TIME L3G=0 PAUSE TIME L4G=1 PAUSE TIME L4G=0 PAUSE TIME L5G=1 PAUSE TIME L5G=0 PAUSE TIME NEXT X ' PATTERN = INSQ ' THIS IS THE RED INNER SQUARE GOSUB SHOWIT L1R=1 : L2R=1 : L3R=1 : L4R=1 : L5R=1 PAUSE 750 L1R=0 : L2R=0 : L3R=0 : L4R=0 : L5R=0 NEXT Y '*********************************** '************************************** SPEAR: TIME = 100 FOR Z = 1 TO 3 X=0 : Y=4 ' X AND Y ARE USED TO SET THE INDEX "LENGTH" ' FOR THE LOOKUP TABLE "SPEAR" VIA SPEAR_1 L1R=1 GOSUB SPEAR_1 L1R=0 : L1G=1 PAUSE TIME L1G=0 ' X=5 : Y=9 L3R=1 GOSUB SPEAR_1 L3R=0 : L3G=1 PAUSE TIME L3G=0 ' X=10 : Y=14 L2R=1 GOSUB SPEAR_1 L2R=0 : L2G=1 PAUSE TIME L2G=0 ' X=15 : Y=19 L5R=1 GOSUB SPEAR_1 L5R=0 : L5G=1 PAUSE TIME L5G=0 ' X=20: Y=24 L3R=1 GOSUB SPEAR_1 L3R=0 : L3G=1 PAUSE TIME L3G=0 ' X=25 : Y = 29 L1R=1 gosub spear_1 PAUSE time L1R=0 : L1G=1 PAUSE TIME L1G=0 ' X=30 : Y=34 L5R=1 GOSUB SPEAR_1 L5R=0 : L5G=1 PAUSE TIME L5G=0 NEXT Z '************************ '************************ SLOPE: LENGTH = 0 : W=0 : X=0 : Y=0 : Z=0 TIME = 2000 ' TIME FOR BEST MUX POV GOSUB CLR_LEVELS 'CLEAR THE PORTS '************** ' MUST LOOP THROUGH THE GETSLOPE ROUTINE ~ 8 TIMES OR SO FOR BEST POV ' VARIABLE USED FOR THIS IS W ' THESE ROUTINES UTILIZE INDEXED PORT ADDRESSING TO REDUCE CODE '*********************************************** SLOPE_1: FOR W = 1 TO 4 ' REPEAT EACH LED SET 4 TIMES BEFORE NEXT SET FOR X = 0 TO 4 ' TOTAL OF 5 LEVELS... 0 = LEV 1 ; 4 = LEV 5 GOSUB GETSLOPE 'THIS GETS THE LED GOSUB SHOWIT LEVELR.0[X]=1 PAUSEUS TIME LEVELR.0[X]=0 PAUSEUS TIME LENGTH = LENGTH + 1 NEXT X LENGTH = Y ' Y HOLDS THE NEXT VALUE OF LENGTH, WHERE TO START NEXT W ' NOW GET THE NEXT LED SET Y = Y + 1 ' RESET INDEX TO GET THE NEXT SET OF 5 LED'S LENGTH = Y IF Y = 16 THEN Y=0 IF Y = 0 THEN LENGTH = 0 IF Y = 0 THEN Z = Z+1 IF Z < 3 THEN SLOPE_1 LENGTH = 0 : W=0 : X=0 : Y=0 : Z=0 '*********************************************** 'NOW DO GREEN LED'S IN REVERSE SLOPE SLOPE_2: FOR W = 1 TO 4 ' REPEAT EACH LED SET 8 TIMES BEFORE NEXT SET FOR X = 0 TO 4 ' TOTAL OF 5 LEVELS... 0 = LEV 1 ; 4 = LEV 5 GOSUB GETSLOPE_1 'THIS WILL REVERSE THE SLOPE DIRECTION GOSUB SHOWIT LEVELG.0[X]=1 PAUSEUS TIME LEVELG.0[X]=0 PAUSEUS TIME LENGTH = LENGTH + 1 NEXT X LENGTH = Y ' Y HOLDS THE NEXT VALUE OF LENGTH (INDEX) , WHERE TO START NEXT W ' NOW GET THE NEXT LED SET Y = Y + 1 ' RESET LENGTH (INDEX) TO GET THE NEXT SET OF 5 LED'S LENGTH = Y IF Y = 16 THEN Y=0 IF Y = 0 THEN LENGTH = 0 IF Y = 0 THEN Z = Z+1 IF Z < 3 THEN SLOPE_2 '************************************ '******************************************* FILL_LAYER: ' FILLS LEVEL 1 AND FIVE, THEN LEVEL 1-2 AND 4-5 RED ' THEN FILLS INNER LAYER GREEN FOR X = 1 TO 2 LENGTH=0 TIME = 80 L1R=1 : L5R=1 GOTO RING_1 ' FIRST FILL LAYER 1 AND 5 TWO_LEVELS: L2R=1 : L4R=1 GOTO RING_1 'NOW FILL LAYERS 1 -2 AND 4 - 5 ' GREEN_LEVEL: ' NOW ONLY LAYER 3 WITH GREEN GOSUB CLR_LEVELS L3G=1 RING_1: GOSUB RINGPAT_A GOSUB SHOWIT PAUSE TIME LENGTH = LENGTH+1 IF LENGTH < 25 THEN RING_1 PAUSE 100 LENGTH = 0 PATTERN = $0000000 GOSUB SHOWIT Y=Y+1 IF Y = 1 THEN TWO_LEVELS IF Y = 2 THEN GREEN_LEVEL PAUSE 100 GOSUB CLR_LEVELS Y=0 NEXT X '************************************************ '*********************************************** SPINNER: ' COUNTER-ROTATING VERTICAL LINES TIME = 60 ' PAUSE TIME USED IN "SHOWME" L1R=1 : L2R=1 : l3r=1 : l4r=1 : l5r=1 FOR Y = 1 TO 6 PATTERN = $0000041 GOSUB SHOWME ' SHOWME IS SHOWIT WITH A "PAUSE TIME " AT THE END PATTERN = $00000A8 GOSUB SHOWME PATTERN = $0000500 GOSUB SHOWME PATTERN = $000A000 GOSUB SHOWME PATTERN = $0140000 GOSUB SHOWME PATTERN = $0220000 GOSUB SHOWME PATTERN = $0410000 GOSUB SHOWME PATTERN = $0800800 GOSUB SHOWME PATTERN = $1000040 GOSUB SHOWME PATTERN = $0080080 GOSUB SHOWME PATTERN = $0004100 GOSUB SHOWME PATTERN = $0002200 GOSUB SHOWME PATTERN = $0040010 GOSUB SHOWME PATTERN = $0020008 GOSUB SHOWME PATTERN = $0010004 GOSUB SHOWME PATTERN = $0000802 GOSUB SHOWME PATTERN = $0000041 GOSUB SHOWIT PAUSE 30 NEXT Y '*********************************** '*********************************** INSIDE_SPIN: Z = 0 ' SPINNING GREEN FULL "X" FROM BOTTOM TO TOP TIME = 8 FOR W = 1 TO 3 FOR Y = 1 TO 5 IN_1: IF Z=2 THEN GOTO Z_0 ' LINGER ON LEVEL 5 FOR X = 1 TO 5 PATTERN = LFTSLSH GOSUB GREEN_IN NEXT X ' FOR X = 1 TO 5 PATTERN = COL_3 GOSUB GREEN_IN NEXT X ' FOR X = 1 TO 5 PATTERN = RTSLSH GOSUB GREEN_IN NEXT X ' FOR X = 1 TO 5 PATTERN = ROW_3 GOSUB GREEN_IN NEXT X ' FOR X = 1 TO 5 PATTERN = LFTSLSH GOSUB GREEN_IN NEXT X ' FOR X = 1 TO 5 PATTERN = COL_3 GOSUB GREEN_IN NEXT X ' FOR X =1 TO 5 PATTERN = RTSLSH GOSUB GREEN_IN NEXT X ' FOR X = 1 TO 5 PATTERN = ROW_3 GOSUB GREEN_IN ' GO TO SUBROUTINE WITH LEVEL SET IN Y NEXT X IF Y = 5 THEN Z=Z+1 : GOTO IN_1 ' WE LINGER ON LEVEL 5 DOUBLE NEXT Y Z_0: Z=0 NEXT W GOSUB CLR_LEVELS '************************************ '************************************ RED_CROSS: ' THIS DISPLAYS A RED CROSS INSIDE A GREEN OPEN SQUARE FOR W = 1 TO 6 ' DO IT 6 TIMES FOR Y = 1 TO 25 FOR X = 1 TO 5 PATTERN = CORNERS ' GENERATE THE SQUARE VERTICAL CORNERS GOSUB SHOWIT L1G=1 : L2G=1 : L3G=1 : L4G=1 : L5G=1 PAUSE 2 L2G=0 : L3G=0 : L4G=0 NEXT X NEXT Y '******************** NOW DO IT AGAIN, BUT ADD THE INSIDE RED CROSS FOR Y = 1 TO 25 FOR X = 1 TO 5 PATTERN = CORNERS GOSUB SHOWIT L1G=1 : L2G=1 : L3G=1 : L4G=1 : L5G=1 PAUSE 2 L2G=0 : L3G=0 : L4G=0 NEXT X ' L1G=0 : L5G=0 FOR X = 1 TO 20 PATTERN = cross ' THIS ADDS THE CROSS GOSUB SHOWIT L2R=1 : L3R=1 : L4R=1 PAUSEUS 100 L2R=0 :L3R=0 : L4R=0 NEXT X NEXT Y NEXT W W=0 PAUSE 250 '*************************** '************************ RISER: ' RISING RED FLAT TIME = 150 ' PAUSE TIME IN "SHOWME" X=0 FOR X = 1 TO 5 GOSUB CLR_LEVELS PATTERN = SML_CROSS L1R=1 GOSUB SHOWME ' THERE IS A PAUSE TIME AFTER SHOWME PATTERN = INX L1R=0 : L2R=1 GOSUB SHOWME PATTERN = INSQUARE L2R=0 : L3R=1 GOSUB SHOWME PATTERN = INSQOUTCOR L3R=0 : L4R=1 GOSUB SHOWME PATTERN = XPAT GOSUB SHOWIT L4R=0 : L5R=1 PATTERN = FULL GOSUB SHOWIT PAUSE 50 GOSUB CLR_LEVELS PAUSE 50 PATTERN = FULL GOSUB SHOWIT L5G=1 PAUSE 50 GOSUB CLR_LEVELS PAUSE 50 PATTERN = FULL GOSUB SHOWIT L5R=1 PAUSE 100 NEXT X X=0 L5G=0 GOSUB CLR_LEVELS '*****************"GO PACK GO"************* '******************************************** GOSUB GOPACK 'SUBROUTINE TO SPELL "GO" W=0 PAUSE 500 GOSUB PACK 'SUBROUTINE TO SPELL "PACKERS GOSUB GOPACK ' "GO" AGAIN W=0 PAUSE 100 '***************************** '************************************** EXPLODE: TIME = 70 FOR X = 1 TO 3 GOSUB CLR_LEVELS PAUSE TIME PATTERN = LED_13 GOSUB SHOWIT 'INSIDE DOT LEVEL 3 ONLY L3R=1 PAUSE TIME PATTERN = INX GOSUB SHOWIT 'INSIDE X LEVEL 3 ONLY PAUSE TIME PATTERN = INSQUARE 'SOLID INSIDE SQUARE LEVEL 3 ONLY GOSUB SHOWIT PAUSE TIME L2R=1 : L4R=1 'EXPAND TO LEVELS 2 - 3 - 4 PAUSE TIME PATTERN = INSQOUTCOR GOSUB SHOWIT 'NOW INSIDE SQUARE PLUS 4 CORNERS ON 2 - 4 PAUSE TIME PATTERN = $1577DD5 GOSUB SHOWIT 'PATTERN WITH JAGGED EDGES LEVELS 2 - 3 - 4 PAUSE TIME PATTERN = FULL GOSUB SHOWIT 'FULL LEVELS 2 - 3 - 4 PAUSE TIME L1R=1 : L5R=1 PAUSE TIME NEXT X FOR W = 1 TO 15 'NOW FLASH THE CUBE L1R=1 : L2R=1 : L3R=1 : L4R=1 : L5R=1 L1G=1 : L2G=1 : L3G=1 : L4G=1 : L5G=1 PAUSE 20 GOSUB CLR_LEVELS PAUSE 20 NEXT W '***************************** '************************************** ROLL_RED__X: ' THIS SPINS A RED X AROUND THE ROWS TIME = 400 ' PAUSE TIME WILL BE IN MICROSECONDS FOR Y = 1 TO 10 FOR X = 1 TO 40 'NEED TO GET THE PATTERN, SHIFT IT OUT, TURN ON, AND TURN IT OFF IN THAT ORDER ' TO PREVENT "GHOSTING" PAUSE TIMES DETERMINE TIME AT EACH PATTERN PATTERN = ROW_1 GOSUB SHOWIT L1R=1 PAUSEUS TIME L1R=0 PATTERN = ROW_2 GOSUB SHOWIT L2R=1 PAUSEUS TIME L2R=0 PATTERN = ROW_3 GOSUB SHOWIT L3R=1 PAUSEUS TIME L3R=0 PATTERN = ROW_4 GOSUB SHOWIT L4R=1 PAUSEUS TIME L4R=0 PATTERN = ROW_5 GOSUB SHOWIT L5R=1 PAUSEUS TIME L5R=0 NEXT X FOR X = 1 TO 220 PATTERN = ROW_3 GOSUB SHOWIT L1R=1 : L2R=1 : L3R=1 : L4R=1 : L5R=1 PAUSEUS TIME L1R=0 : L2R=0 : L3R=0 : L4R=0 : L5R=0 NEXT X FOR X = 1 TO 40 PATTERN = ROW_5 GOSUB SHOWIT L1R=1 PAUSEUS TIME L1R=0 PATTERN = ROW_4 GOSUB SHOWIT L2R=1 PAUSEUS TIME L2R=0 PATTERN = ROW_3 GOSUB SHOWIT L3R=1 PAUSEUS TIME L3R=0 PATTERN = ROW_2 GOSUB SHOWIT L4R=1 PAUSEUS TIME L4R=0 PATTERN = ROW_1 GOSUB SHOWIT L5R=1 PAUSEUS TIME L5R=0 NEXT X FOR X = 1 TO 80 PATTERN = FULL GOSUB SHOWIT L3R=1 PAUSEUS TIME L3R=0 PAUSEUS TIME NEXT X NEXT Y '************************************** '*************************************** LEVEL_REVERSE: ' BACK AND FORTH, UP AND DOWN LEVELS GOSUB CLR_LEVELS TIME = 80 ' PAUSE TIME FOR "SHOWME" FOR Y = 0 TO 1 L5R=0 LENGTH = 1 l1r=1 'LEVEL 1 ON LEV1: GOSUB BACK_FORTH GOSUB SHOWME LENGTH = LENGTH + 1 IF LENGTH < 6 THEN LEV1 l1r=0 'LEVEL 1 OFF l2r=1 'LEVEL 2 ON LENGTH = LENGTH - 1 'REVERSE DIRECTION LEV2: GOSUB BACK_FORTH GOSUB SHOWME LENGTH = LENGTH - 1 IF LENGTH > 0 THEN LEV2 LENGTH = 1 l2r=0 'LEVEL 2 OFF l3r=1 'LEVEL 3 ON LEV3: GOSUB BACK_FORTH GOSUB SHOWME LENGTH = LENGTH + 1 IF LENGTH <6 THEN LEV3 LEVELR.0[X]=0 'CLEAR LEVEL 3 l3r=0 'LEVEL 3 OFF L4R=1 'LEVEL 4 ON LENGTH = LENGTH - 1 LEV4: GOSUB BACK_FORTH GOSUB SHOWME LENGTH = LENGTH - 1 IF LENGTH > 0 THEN LEV4 LENGTH = 1 L4R=0 'LEVEL 4 OFF L5R=1 'LEVEL 5 ON LEV5: GOSUB BACK_FORTH GOSUB SHOWME LENGTH = LENGTH + 1 IF LENGTH <6 THEN LEV5 L5R=0 L4R=1 LENGTH = 5 'RESET LENGTH (RESTART) LEV4_1: GOSUB BACK_FORTH GOSUB SHOWME LENGTH = LENGTH-1 IF LENGTH >0 THEN LEV4_1 L4R=0 L3R=1 LENGTH = 1 'RESET LENGTH LEV3_1: GOSUB BACK_FORTH GOSUB SHOWME LENGTH = LENGTH +1 IF LENGTH < 6 THEN LEV3_1 L3R=0 L2R=1 LENGTH = 5 'RESET LENGTH (INDEX) LEV2_1: GOSUB BACK_FORTH GOSUB SHOWME LENGTH = LENGTH-1 IF LENGTH >0 THEN LEV2_1 L2R=0 L1R=1 LENGTH = 1 'RESET LENGTH NEXT Y '*************************************** '************************************* FRONT_BACK: time = 80 'PAUSE TIME USED IN "SHOWME" L5G=1 : L4G=1 : L3G=1 : L2G=1 : L1G=1 L5R=0 : L4R=0 : L3R=0 : L2R=0 : L1R=0 FOR Y = 1 TO 2 FOR X = 0 TO 1 PATTERN = COL_3 GOSUB SHOWME PATTERN = $1000001 GOSUB SHOWME PATTERN = $0800002 GOSUB SHOWME PATTERN = $0400004 GOSUB SHOWME PATTERN = $0200008 GOSUB SHOWME PATTERN = $0100010 GOSUB SHOWME L5G=0 : L4G=0 : L3G=0 : L2G=0 : L1G=0 L5R=1 : L4R=1 : L3R=1 : L2R=1 : L1R=1 PATTERN = COL_3 GOSUB SHOWME PATTERN = $0008200 GOSUB SHOWME PATTERN = $0010100 GOSUB SHOWME PATTERN = $0020080 GOSUB SHOWME PATTERN = $0040040 GOSUB SHOWME PATTERN = $0080020 GOSUB SHOWME L5G=1 : L4G=1 : L3G=1 : L2G=1 : L1G=1 L5R=0 : L4R=0 : L3R=0 : L2R=0 : L1R=0 NEXT X NEXT Y GOSUB CLR_LEVELS '******************************** '*********************************** RISING_PLATE: ' RISING GREEN "PLATE" INSIDE RED BOX TIME = 8 FOR W = 1 TO 8 FOR Y = 1 TO 8 FOR X = 1 TO 5 PATTERN = INSQUARE GOSUB GREEN_IN NEXT X NEXT Y NEXT W GOSUB CLR_LEVELS '***************************** '***************************** ' "PACKERS RULE BEARS SUCK" LENGTH = 0 : X = 0 GOSUB PACKERSRULE '************************************* '**************************************** GOTO MAIN ' DO EVERYTHING AGAIN END
Re: K42 and Timer Interrupts
Thanks for the explanation.
Ioannis - 28th April 2025, 19:28I misinterpreted these paragraphs. My understanding was to have ASYNC cleared and use Fosc/4.
Ioannis