#define clock_delay 10
//PROGRAM TO GLOW DIAGONAL LEDS ONE BY ONE on 32x32 led matrix
volatile uint8_t *outa,*outc;
volatile uint8_t arr[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
volatile long i,j,k,m;
volatile uint8_t address=0x01,store=0x00;
void setup() {
// put your setup code here, to run once:
volatile uint8_t *dira,*dirc;
dira=0x21;*dira=0xff;
dirc=0x27;*dirc=0xff;
}
void loop() {
// put your main code here, to run repeatedly:
outa=0x22;
outc=0x28;
display1();
display2();
display3();
display4();
}
void display1(){
for(k=0;k<8;k++){
for(m=0;m<4;m++){
*outc&=~0x10;
address=0x01;
address=address+k;;
for(i=7;i>=0;i--){
store=(address>>i)&0x01;
if(store)*outc|=0x08;
else *outc&=~0x08;
*outc|=0x20;
for(j=0;j<clock_delay;j++);
*outc&=~0x20;
}
if(m==0){
for(i=7;i>=0;i--){
store=(arr[k]>>i)&0x01;
if(store)*outc|=0x08;
else *outc&=~0x08;
*outc|=0x20;
for(j=0;j<clock_delay;j++);
*outc&=~0x20;
}
}
else{
for(i=0;i<8;i++){
*outc&=~0x08;
*outc|=0x20;
for(j=0;j<clock_delay;j++);
*outc&=~0x20;
}
}
}
*outc|=0x10;
for(j=0;j<100000;j++);//delay for one by one pattern
}
}
void display2(){
for(k=0;k<8;k++){
for(m=0;m<4;m++){
*outc&=~0x02;
address=0x01;
address=address+k;;
for(i=7;i>=0;i--){
store=(address>>i)&0x01;
if(store)*outc|=0x01;
else *outc&=~0x01;
*outc|=0x04;
for(j=0;j<clock_delay;j++);
*outc&=~0x04;
}
if(m==1){
for(i=7;i>=0;i--){
store=(arr[k]>>i)&0x01;
if(store)*outc|=0x01;
else *outc&=~0x01;
*outc|=0x04;
for(j=0;j<clock_delay;j++);
*outc&=~0x04;
}
}
else{
for(i=0;i<8;i++){
*outc&=~0x01;
*outc|=0x04;
for(j=0;j<clock_delay;j++);
*outc&=~0x04;
}
}
}
*outc|=0x02;
for(j=0;j<100000;j++);//delay for one by one pattern
}
}
void display3(){
for(k=0;k<8;k++){
for(m=0;m<4;m++){
*outa&=~0x10;
address=0x01;
address=address+k;;
for(i=7;i>=0;i--){
store=(address>>i)&0x01;
if(store)*outa|=0x08;
else *outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
if(m==2){
for(i=7;i>=0;i--){
store=(arr[k]>>i)&0x01;
if(store)*outa|=0x08;
else *outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
else{
for(i=0;i<8;i++){
*outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
}
*outa|=0x10;
for(j=0;j<100000;j++);//delay for one by one pattern
}
}
void display4(){
for(k=0;k<8;k++){
for(m=0;m<4;m++){
*outa&=~0x02;
address=0x01;
address=address+k;;
for(i=7;i>=0;i--){
store=(address>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
if(m==3){
for(i=7;i>=0;i--){
store=(arr[k]>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
else{
for(i=0;i<8;i++){
*outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
}
*outa|=0x02;
for(j=0;j<100000;j++);//delay for one by one pattern
}
}