Skip to content

Instantly share code, notes, and snippets.

@jaymcgavren
Last active January 2, 2026 21:19
Show Gist options
  • Select an option

  • Save jaymcgavren/396dbc69088e0119fc6c6f400fafe22d to your computer and use it in GitHub Desktop.

Select an option

Save jaymcgavren/396dbc69088e0119fc6c6f400fafe22d to your computer and use it in GitHub Desktop.
Linwood Whaley's assembly code to run animations on his 4 x 4 x 4 LED cube
/*
led-cube-4x4x4-6.5
Arduino UNO or Nano
MCP23017 I/O expander controlled by I2C
MCP23017 address is 0x20
64 leds in a 4 by 4 by 4 by 4 arrangement
16 2N3906 PNP transistors controlling led anodes connected to MCP23017 GPIO port
outputs---low on output turns transistors on
4 2N4401 NPN transistors controlling cube levels (led cathodes) connected to 4
pins of Arduino board---high on output turns transistors on
ATMEGA328P assembly language used in this program---for speed and memory savings
THIS
digitalWrite(Level_1, LOW); // start off
digitalWrite(Level_2, LOW); // with all
digitalWrite(Level_3, LOW); // cathodes
digitalWrite(Level_4, LOW); // off
TO THIS
PORTB = B0000; // turn off all levels
SAVES 30 BYTES
Each of the four levels has its leds arranged in 4x4 matrix with the cathodes
wired together
TOP VIEW of CUBE
|B7_____B6_____B5_____B4|
| | | |
|B3_____B2_____B1_____B0|
| | | |
|A7_____A6_____A5_____A4|
| | | |
|A3_____A2_____A1_____A0|
Four levels are stacked; each led has its anode wired to anode of led of
the next level
FRONT VIEW of CUBE
A3 A2 A1 A0 Level 4 --- Arduino Pin - D11(PORTB Bit 3)
| | | |
A3 A2 A1 A0 Level 3 --- Arduino Pin - D10(PORTB Bit 2)
| | | |
A3 A2 A1 A0 Level 2 --- Arduino Pin - D9(PORTB BIT 1)
| | | |
A3 A2 A1 A0 Level 1 --- Arduino Pin - D8(PORTB Bit 0)
| | | |
| | | |
TOP VIEW of CUBE
Wire.write(0x13); MCP23017 register address of GPIOB
B7 B6 B5 B4 Wire.write(0x7f); make port B pins HIGH----except B7
PNP transistors---HiGH turns them off---LOW turns then on
B3 B2 B1 B0 0x7f --- B0111 1111 --- B7 is LOW---B7 LED anode has power
A7 A6 A5 A4 Wire.write(0x12); MCP23017 register address of GPIOA
Wire.write(0xff); make port A pins HIGH
A3 A2 A1 A0 PNP transistors---HiGH turns them off---LOW turns then on
0xff --- B1111 1111---All GPIOA anodes, no power
MCP23017 Pin Assignment of LEDS
digital.Write(Level_4, HIGH); a HIGH to level 4 transistor will turn it on --- supplying
ground to all level 4 leds --- so any that have anode voltage
will turn on
PORTB = B1000; Does the same thing
Date Start: 8/20-2025
: 8/26/2025 add display functions
: 10/09/2025 add display functions
: 11/16/2025 clean, change, comments
: 12/5/2025 add comments, clean up, assembly language
: 12/17/2025 add new function for I2C cube display
: 12/18/2025 more comments, changed picLvlSpd to cube_LvL_Spd
: 12/19/2025 more change, clean up
: 12/21/2025 add wallFlip(); and spinUp(); to loop();
add more assembly languge, include more function
calls in program --- save bytes --- add more comments
update --- cube_LvL_Spd() - if else statements
: still need alot more comments!
*/
#include "Wire.h"
void topBottomTop(); /// Line number 215
void diagonal(); /// Line number 249
void wallLeftRightLeft(); /// Line number 366
void wallFrontBack(); /// Line number 393
void wallAround(); /// Line number 420
void ELECTRON(); /// Line number 498
void squareSmallLarge(); /// Line number 709
void wallFlip(); /// Line number 728 ---Needs work
void spinUp(); /// Line number 766 ---Needs work
const int diagsped = 135;
const int electSped = 15; // 15 looks good
const int wallSped = 45;
const int spinSped = 75;
const int topbotSped = 125;
byte Lvl;
void setup() {
Wire.begin(); // wake i2c
Wire.beginTransmission(0x20); // i2c address of i/o expander
Wire.write(0x00); // register address of IODIRA--port A input/output direction
Wire.write(0x00); // make all port A pins outputs
Wire.write(0x00); // make all port B pins outputs
Wire.endTransmission();
/////////////////////////////Start with all leds off/////////////////////////////////
Wire.beginTransmission(0x20); // address i/o expander
Wire.write(0x12); // register address of GPIOA---port A output pins
Wire.write(0xff); // make all port A pins HIGH---turn off transistors
Wire.write(0xff); // make all port B pins HIGH---turn off transistors
Wire.endTransmission();
/////////////////////////////////////////////////////////////////////////////////////
DDRB = B1111; // Pin D8; Pin D9; Pin D11; Pin D12 are outputs
// replaces the pinMode(8, OUTPUT) function--a one(1) makes them outputs
PORTB = B0000; // replaces the digitalWrite(8, LOW) function--a zero(0) is a LOW
// a one(1) is a HIGH
// all outputs LOW --- cube Levels off
} // end---void setup ////////////////////////////
void columnWrite(byte Aport, byte Bport) {
Wire.beginTransmission(0x20); // I2C address of i/o expander
Wire.write(0x12); // address of port A i/o register --- GPIOA
Wire.write(Aport); // make selected port A pins LOW---turn on transistors
Wire.write(Bport); // make selected port B pins LOW---turn on transistors
Wire.endTransmission(); // voltage to led anodes on port A
} // end---void columnWrite ////////////////////////////////////////////////////
void allLevelsOn_Off(int spdVar) {
PORTB = B1111; // enable ground to all levels
delay(spdVar);
PORTB = B0000; // disable ground to all levels
} // end---void levelsOn ///////////////////////////////////////////////////////////
void cube_LvL_Spd(byte level, int spd) {
if(level == 1) {
Lvl = 1;
}
else if(level == 2) {
Lvl = 2;
}
else if(level == 3) {
Lvl = 4;
}
else {
Lvl = 8;
}
PORTB = Lvl;
delay(spd);
PORTB = 0;
} // end---void cube_LvL_Spd ///////////////////////////////////////////////////
void loop() {
topBottomTop();
for(int i = 0; i < 3; i++) {
wallLeftRightLeft();
}
for(int i = 0; i < 2; i++) {
wallFrontBack();
}
for(int i = 0; i < 3; i++) {
wallAround();
}
squareSmallLarge();
for(int i = 0; i < 2; i++) {
diagonal();
}
ELECTRON();
wallFlip();
spinUp();
}
void topBottomTop() { //////////////////////////////////////////////////////////////////
PORTB = B0000; // start with all levels off -- digitalWrite pis 8, 9, 10, 11 -- LOW
columnWrite(0x00, 0x00); // all LED anodes on
for(int i = 0; i < 4; i++) { // loop ten times
//////////////////////////// Bottom to Top /////////////////////////////
cube_LvL_Spd(1, topbotSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, topbotSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, topbotSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(4, topbotSped); // cube_LvL_Spd(cube level[1-4], speed of display)
//////////////////////////// Top to Bottom /////////////////////////////
cube_LvL_Spd(4, topbotSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, topbotSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, topbotSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(1, topbotSped); // cube_LvL_Spd(cube level[1-4], speed of display)
} // end---for loop
columnWrite(0xff, 0xff); // all LED anodes off
} // end---void topBottomTop()
void diagonal() { //////////////////////////////////////////////////////////////////////
PORTB = B0000; // turn off all levels
columnWrite(0xee, 0xee); // 1110 1110 --- A4, A0 and B4, B0
cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xdd, 0xdd); // 1101 1101 --- A5, A1 and B5, B1
cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xbb, 0xbb); // 1011 1011 --- A6, A2 and B6, B2
cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0x77, 0x77); // 0111 0111 --- A7, A3 and B7, B3
cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xbb, 0xbb); // 1011 1011 --- A6, A2 and B6, B2
cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xdd, 0xdd); // 1101 1101 --- A5, A1 and B5, B1
cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xee, 0xee); // 1110 1110 --- A4, A0 and B4, B0
cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xdd, 0xdd); // 1101 1101 --- A5, A1 and B5, B1
cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xbb, 0xbb); // 1011 1011 --- A6, A2 and B6, B2
cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0x77, 0x77); // 0111 0111 --- A7, A3 and B7, B3
cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xbb, 0xbb); // 1011 1011 --- A6, A2 and B6, B2
cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xdd, 0xdd); // 1101 1101 --- A5, A1 and B5, B1
cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xee, 0xee); // 1110 1110 --- A4, A0 and B4, B0
cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xdd, 0xdd); // 1101 1101 --- A5, A1 and B5, B1
cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xbb, 0xbb); ///// 1011 1011 --- A6, A2 and B6, B2
cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0x77, 0x77); ///// 0111 0111 --- A7, A3 and B7, B3
cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xbb, 0xbb); ///// 1011 1011 --- A6, A2 and B6, B2
cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xdd, 0xdd); ///// 1101 1101 --- A5, A1 and B5, B1
cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xee, 0xee); ///// 1110 1110 --- A4, A0 and B4, B0
cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xdd, 0xdd); ///// 1101 1101 --- A5, A1 and B5, B1
cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xbb, 0xbb); ///// 1011 1011 --- A6, A2 and B6, B2
cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0x77, 0x77); ///// 0111 0111 --- A7, A3 and B7, B3
cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xbb, 0xbb); ///// 1011 1011 --- A6, A2 and B6, B2
cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xdd, 0xdd); ///// 1101 1101 --- A5, A1 and B5, B1
cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xee, 0xee); ///// 1110 1110 --- A4, A0 and B4, B0
cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xdd, 0xdd); ///// 1101 1101 --- A5, A1 and B5, B1
cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xbb, 0xbb); ///// 1011 1011 --- A6, A2 and B6, B2
cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0x77, 0x77); ///// 0111 0111 --- A7, A3 and B7, B3
cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xbb, 0xbb); ///// 1011 1011 --- A6, A2 and B6, B2
cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xdd, 0xdd); ///// 1101 1101 --- A5, A1 and B5, B1
cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xee, 0xee); ///// 1110 1110 --- A4, A0 and B4, B0
cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display)
} // end---void diagonal()
void wallLeftRightLeft() { ///////////////////////////////////////////////////////////////////
PORTB = B0000; // disable ground to all levels
columnWrite(0xee, 0xee); ///// 1110 1110 --- A4, A0 and B4, B0
allLevelsOn_Off(125);
columnWrite(0xdd, 0xdd); ///// 1101 1101 --- A5, A1 and B5, B1
allLevelsOn_Off(125);
columnWrite(0xbb, 0xbb); ///// 1011 1011 --- A6, A2 and B6, B2
allLevelsOn_Off(125);
columnWrite(0x77, 0x77); ///// 0111 0111 --- A7, A3 and B7, B3
allLevelsOn_Off(125);
columnWrite(0xbb, 0xbb); ///// 1011 1011 --- A6, A2 and B6, B2
allLevelsOn_Off(125);
columnWrite(0xdd, 0xdd); ///// 1101 1101 --- A5, A1 and B5, B1
allLevelsOn_Off(125);
columnWrite(0xee, 0xee); ///// 1110 1110 --- A4, A0 and B4, B0
allLevelsOn_Off(125);
} // end---void wallLeftRightLeft()
void wallFrontBack() { ////////////////////////////////////////////////////////////////////////////////
PORTB = B0000; // disable ground to all levels
columnWrite(0xf0, 0xff); // 1111 0000 --- A3, A2, A1, A0 --- 1111 1111 --- No B
allLevelsOn_Off(125);
columnWrite(0x0f, 0xff); // 0000 1111 --- A7, A6, A5, A4 --- 1111 1111 --- No B
allLevelsOn_Off(125);
columnWrite(0xff, 0xf0); // 1111 1111 --- No A --- 1111 0000 --- B3, B2, B1, B0
allLevelsOn_Off(125);
columnWrite(0xff, 0x0f); // 1111 1111 --- No A --- 0000 1111 --- B7, B6, B5, B4
allLevelsOn_Off(125);
columnWrite(0xff, 0xf0); // 1111 1111 --- No A --- 1111 0000 --- B3, B2, B1, B0
allLevelsOn_Off(125);
columnWrite(0x0f, 0xff); // 0000 1111 --- A7, A6, A5, A4 --- 1111 1111 --- No B
allLevelsOn_Off(125);
columnWrite(0xf0, 0xff); // 1111 0000 --- A3, A2, A1, A0 --- 1111 1111 --- No B
allLevelsOn_Off(125);
} // end---void wallFrontBack()
void wallAround() { ///////////////////////////////////////////////////////////////////////////
PORTB = B0000; // all levels off
columnWrite(0xf7, 0xff);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0xf3, 0xff);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0xf1, 0xff);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0xf0, 0xff);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0xe0, 0xff);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0xe0, 0xfe);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0xe0, 0xee);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0xe0, 0xce);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0xe0, 0x8e);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0xe0, 0x0e);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0xe0, 0x06);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0x60, 0x06);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0x68, 0x06);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0x6c, 0x06);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0x6e, 0x06);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0x6f, 0x06);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0x7f, 0x06);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0x7f, 0x07);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0x7f, 0x17);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0x7f, 0x37);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0x7f, 0x77);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0x7f, 0xf7);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0x7f, 0xff);
allLevelsOn_Off(75); // all levels on, delay, all levels off
columnWrite(0xff, 0xff);
allLevelsOn_Off(75); // all levels on, delay, all levels off
} // end---wallAround //////////////////////////////
void ELECTRON() { //////////////////////////////////////////////////////////////////////////////////////// ELECTRON
PORTB = B0000;
for(int x =1; x <= 6; x++) {
columnWrite(0xfe, 0xff);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xdf, 0xff);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0xfb);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0x7f);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0xfb);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xdf, 0xff);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xfe, 0xff);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) ***11111111111
//////**************************** next electron ***************************22222222222
columnWrite(0xff, 0xdf);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0xfd);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xdf, 0xff);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xfd, 0xff);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xdf, 0xff);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0xfd);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0xdf);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)************2222222
//////**************************** next electron ***************************33333333333333333
columnWrite(0x7f, 0xff);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xbf, 0xff);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xdf, 0xff);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xef, 0xff);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xdf, 0xff);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xbf, 0xff);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0x7f, 0xff);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)******3333333333
////**************************** next electron ********************************444444444444
columnWrite(0xff, 0xef);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0xfd);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xbf, 0xff);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xf7, 0xff);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xbf, 0xff);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0xfd);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0x2f);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) *********444444444444
////****************************** next electron **********************************55555555555
columnWrite(0xfb, 0xff);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xbf, 0xff);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0xfb);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0xbf);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0xfb);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xbf, 0xff);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xfb, 0xff);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)***********555555555555
////****************************** next electron *************************************6666666666
columnWrite(0xff, 0xf7);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0xfb);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0xfd);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0xfe);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0xfd);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0xfb);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xff, 0xf7);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)************666666666666
////********************************next ELECRTON*************************************7777777777777
columnWrite(0xf7, 0xff);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xfb, 0xff);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xfd, 0xff);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xfe, 0xff);
cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xfd, 0xff);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xfb, 0xff);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)
columnWrite(0xf7, 0xff);
cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)**********77777777777
}
} //end-----Electron /////////////////////////////
void squareSmallLarge() { //////////////////////////////////////////////////////////////////////////
PORTB = B0000; // turn off all levels
for(int i = 0; i < 4; i++) {
columnWrite(0x60, 0x06);
allLevelsOn_Off(500);
columnWrite(0x9f, 0xf9);
allLevelsOn_Off(500);
columnWrite(0x60, 0x06);
allLevelsOn_Off(500);
}
}
void wallFlip() { ///////////////////////////////////////////////////////////////////////////
PORTB = B0000; // turn off all levels
for(int i = 0; i < 2; i++) {
columnWrite(0xf0, 0xff);
allLevelsOn_Off(750);
columnWrite(0xb7, 0xed);
allLevelsOn_Off(750);
columnWrite(0x77, 0x77);
allLevelsOn_Off(750);
columnWrite(0xde, 0x7b);
allLevelsOn_Off(750);
columnWrite(0xff, 0x0f);
allLevelsOn_Off(750);
columnWrite(0xb7, 0xed);
allLevelsOn_Off(750);
columnWrite(0xee, 0xee);
allLevelsOn_Off(750);
columnWrite(0xde, 0x7b);
allLevelsOn_Off(750);
}
columnWrite(0xf0, 0xff);
allLevelsOn_Off(750);
} // end---wallFlip()////////////////////////////////////////////////////////
void spinUp() { ////////////////////////////////////////////////////////////////////
PORTB = B0000; // turn off all levels
// LEVEL ONE //
columnWrite(0xbf, 0xff);
cube_LvL_Spd(1, spinSped);
columnWrite(0x9f, 0xff);
cube_LvL_Spd(1, spinSped);
columnWrite(0x9f, 0xfd);
cube_LvL_Spd(1, spinSped);
columnWrite(0x9f, 0xf9);
cube_LvL_Spd(1, spinSped);
columnWrite(0x9f, 0xf1);
cube_LvL_Spd(1, spinSped);
columnWrite(0x1f, 0xf1);
cube_LvL_Spd(1, spinSped);
columnWrite(0x17, 0xf1);
cube_LvL_Spd(1, spinSped);
columnWrite(0x13, 0xf1);
cube_LvL_Spd(1, spinSped);
columnWrite(0x11, 0xf1);
cube_LvL_Spd(1, spinSped);
columnWrite(0x10, 0xf1);
cube_LvL_Spd(1, spinSped);
columnWrite(0x00, 0xf1);
cube_LvL_Spd(1, spinSped);
columnWrite(0x00, 0xf0);
cube_LvL_Spd(1, spinSped);
columnWrite(0x00, 0xe0);
cube_LvL_Spd(1, spinSped);
columnWrite(0x00, 0xc0);
cube_LvL_Spd(1, spinSped);
columnWrite(0x00, 0x80);
cube_LvL_Spd(1, spinSped);
columnWrite(0x00, 0x00);
cube_LvL_Spd(1, spinSped);
// LEVEL TWO //
columnWrite(0xff, 0x7f);
cube_LvL_Spd(2, spinSped);
columnWrite(0xff, 0x77);
cube_LvL_Spd(2, spinSped);
columnWrite(0x7f, 0x77);
cube_LvL_Spd(2, spinSped);
columnWrite(0x77, 0x77);
cube_LvL_Spd(2, spinSped);
columnWrite(0x73, 0x77);
cube_LvL_Spd(2, spinSped);
columnWrite(0x71, 0x77);
cube_LvL_Spd(2, spinSped);
columnWrite(0x70, 0x77);
cube_LvL_Spd(2, spinSped);
columnWrite(0x60, 0x77);
cube_LvL_Spd(2, spinSped);
columnWrite(0x60, 0x76);
cube_LvL_Spd(2, spinSped);
columnWrite(0x60, 0x66);
cube_LvL_Spd(2, spinSped);
columnWrite(0x60, 0x46);
cube_LvL_Spd(2, spinSped);
columnWrite(0x60, 0x06);
cube_LvL_Spd(2, spinSped);
columnWrite(0x60, 0x02);
cube_LvL_Spd(2, spinSped);
columnWrite(0x20, 0x02);
cube_LvL_Spd(2, spinSped);
columnWrite(0x00, 0x02);
cube_LvL_Spd(2, spinSped);
columnWrite(0x00, 0x00);
cube_LvL_Spd(2, spinSped);
// LEVEL THREE //
columnWrite(0xff, 0xfd);
cube_LvL_Spd(3, spinSped);
columnWrite(0xff, 0xf9);
cube_LvL_Spd(3, spinSped);
columnWrite(0xbf, 0xf9);
cube_LvL_Spd(3, spinSped);
columnWrite(0x9f, 0xf9);
cube_LvL_Spd(3, spinSped);
columnWrite(0x8f, 0xf9);
cube_LvL_Spd(3, spinSped);
columnWrite(0x8f, 0xf8);
cube_LvL_Spd(3, spinSped);
columnWrite(0x8f, 0xe8);
cube_LvL_Spd(3, spinSped);
columnWrite(0x8f, 0xc8);
cube_LvL_Spd(3, spinSped);
columnWrite(0x8f, 0x88);
cube_LvL_Spd(3, spinSped);
columnWrite(0x8f, 0x08);
cube_LvL_Spd(3, spinSped);
columnWrite(0x8f, 0x00);
cube_LvL_Spd(3, spinSped);
columnWrite(0x0f, 0x00);
cube_LvL_Spd(3, spinSped);
columnWrite(0x07, 0x00);
cube_LvL_Spd(3, spinSped);
columnWrite(0x03, 0x00);
cube_LvL_Spd(3, spinSped);
columnWrite(0x01, 0x00);
cube_LvL_Spd(3, spinSped);
columnWrite(0x00, 0x00);
cube_LvL_Spd(3, spinSped);
// LEVEL FOUR //
columnWrite(0xfe, 0xff);
cube_LvL_Spd(4, spinSped);
columnWrite(0xee, 0xff);
cube_LvL_Spd(4, spinSped);
columnWrite(0xee, 0xfe);
cube_LvL_Spd(4, spinSped);
columnWrite(0xee, 0xee);
cube_LvL_Spd(4, spinSped);
columnWrite(0xee, 0xce);
cube_LvL_Spd(4, spinSped);
columnWrite(0xee, 0x8e);
cube_LvL_Spd(4, spinSped);
columnWrite(0xee, 0x0e);
cube_LvL_Spd(4, spinSped);
columnWrite(0xee, 0x06);
cube_LvL_Spd(4, spinSped);
columnWrite(0x6e, 0x006);
cube_LvL_Spd(4, spinSped);
columnWrite(0x66, 0x06);
cube_LvL_Spd(4, spinSped);
columnWrite(0x62, 0x06);
cube_LvL_Spd(4, spinSped);
columnWrite(0x60, 0x06);
cube_LvL_Spd(4, spinSped);
columnWrite(0x40, 0x06);
cube_LvL_Spd(4, spinSped);
columnWrite(0x40, 0x04);
cube_LvL_Spd(4, spinSped);
columnWrite(0x40, 0x00);
cube_LvL_Spd(4, spinSped);
columnWrite(0x00, 0x00);
cube_LvL_Spd(4, spinSped);
} // end---spinUp() ///////////////////////////////////////////////////
//////
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment