#define clock_delay 10
//PROGRAM TO DISPLAY SB using 16x16 pixel resolution after 10 seconds wipe display from left
//GLOBAL DECLARATION
volatile uint8_t *outa;
volatile uint8_t address=0x01,store=0x00;
volatile uint16_t S[16]={0x1FF8,0x3FFC,0x780E,0x7006,0x7000,0x7800,0x3FF8,0x1FFC,0x000E,0x0006,0x0006,0x7006,0x780E,0x3FFC,0x1FF8,0x0000};
volatile uint16_t B[16]={0x0000,0x7FF0,0x7FF8,0x700C,0x7006,0x7006,0x700C,0x7FF8,0x7FF0,0x700C,0x7006,0x7006,0x700C,0x7FF8,0x7FF0,0x0000};
volatile long i,j,k,m,z=0;
void setup() {
// put your setup code here, to run once:
volatile uint8_t *dira;
dira=0x21;*dira=0xff;
}
void loop() {
// put your main code here, to run repeatedly:
outa=0x22;
display_2();
display_1();
for(j=0;j<1900000;j++);
for(z=1;z<33;z++){
display_2();
display_1();
for(j=0;j<100000;j++);
}
}
void display_1(){
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==0){
if(z!=0 && z<=8){
for(i=z;i>0;i--){
*outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
for(i=15-z;i>=8;i--){
store=(S[k+8]>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
else if(z>8){
for(i=7;i>=0;i--){
*outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
else{
for(i=15;i>=8;i--){
store=(S[k+8]>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
}
if(m==1){
if(z>8 && z<=16){
for(i=z-8;i>0;i--){
*outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
for(i=15-z;i>=0;i--){
store=(S[k+8]>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
else if(z>16){
for(i=7;i>=0;i--){
*outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
else{
for(i=7;i>=0;i--){
store=(S[k+8]>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
}
if(m==2){
if(z>16 && z<=24){
for(i=z-16;i>0;i--){
*outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
for(i=31-z;i>=8;i--){
store=(B[k+8]>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
else if(z>24){
for(i=7;i>=0;i--){
*outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
else{
for(i=15;i>=8;i--){
store=(B[k+8]>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
}
if(m==3){
if(z>24){
for(i=z-24;i>0;i--){
*outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
for(i=31-z;i>=0;i--){
store=(B[k+8]>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
else{
for(i=7;i>=0;i--){
store=(B[k+8]>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
}
}
*outa|=0x02;
}
}
void display_2(){
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==0){
if(z!=0 && z<=8){
for(i=z;i>0;i--){
*outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
for(i=15-z;i>=8;i--){
store=(S[k]>>i)&0x01;
if(store)*outa|=0x08;
else *outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
else if(z>8){
for(i=7;i>=0;i--){
*outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
else{
for(i=15;i>=8;i--){
store=(S[k]>>i)&0x01;
if(store)*outa|=0x08;
else *outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
}
if(m==1){
if(z>8 && z<=16){
for(i=z-8;i>0;i--){
*outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
for(i=15-z;i>=0;i--){
store=(S[k]>>i)&0x01;
if(store)*outa|=0x08;
else *outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
else if(z>16){
for(i=7;i>=0;i--){
*outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
else{
for(i=7;i>=0;i--){
store=(S[k]>>i)&0x01;
if(store)*outa|=0x08;
else *outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
}
if(m==2){
if(z>16 && z<=24){
for(i=z-16;i>0;i--){
*outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
for(i=31-z;i>=8;i--){
store=(B[k]>>i)&0x01;
if(store)*outa|=0x08;
else *outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
else if(z>24){
for(i=7;i>=0;i--){
*outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
else{
for(i=15;i>=8;i--){
store=(B[k]>>i)&0x01;
if(store)*outa|=0x08;
else *outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
}
if(m==3){
if(z>24){
for(i=z-24;i>0;i--){
*outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
for(i=31-z;i>=0;i--){
store=(B[k]>>i)&0x01;
if(store)*outa|=0x08;
else *outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
else{
for(i=7;i>=0;i--){
store=(B[k]>>i)&0x01;
if(store)*outa|=0x08;
else *outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
}
}
*outa|=0x10;
}
}