#define clock_delay 10
//PROGRAM TO DISPLAY SB USING 16X16 PIXEL RESOLUTION
//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;
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();
}
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){
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){
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){
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){
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){
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){
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){
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){
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;
}
}