#define clock_delay 10
//PROGRAM TO DISPLAY WELCOME ENTERING FROM RIGHT AND LEAVING BY LEFT, REVOLVING CONTINOUSLY
//global declaration
volatile uint8_t *outa;
volatile uint8_t address=0x01,store=0x00;
volatile uint8_t arr_patternW[]={0x44,0x44,0x44,0x44,0x54,0x6c,0x44,0x00};
volatile uint8_t arr_patternE[]={0x7c,0x40,0x40,0x78,0x40,0x40,0x7c,0x00};
volatile uint8_t arr_patternL[]={0x40,0x40,0x40,0x40,0x40,0x40,0x7c,0x00};
volatile uint8_t arr_patternC[]={0x38,0x44,0x40,0x40,0x40,0x44,0x38,0x00};
volatile uint8_t arr_patternO[]={0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00};
volatile uint8_t arr_patternM[]={0x44,0x6c,0x54,0x44,0x44,0x44,0x44,0x00};
volatile uint8_t dum=0x00,dum2=0x00;
volatile long i,j,k,m,n;
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_right_to_left();
}
void display_right_to_left(){
for(m=0;m<88;m++){
for(k=0;k<8;k++){
*outa&=~0x02;
if(m>=24){
//display4
//address
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;
}
//data transfer for right to left
if(m<=30){
dum=arr_patternW[k]>>(31-m);
}
//data transfer from left to right
else{
dum=arr_patternW[k]<<(m-31);
if(m<=39){
dum2=arr_patternE[k]>>(39-m);
dum=dum|dum2;
}
else{
dum=arr_patternE[k]<<(m-39);
if(m<=47){
dum2=arr_patternL[k]>>(47-m);
dum=dum|dum2;
}
else{
dum=arr_patternL[k]<<(m-47);
if(m<=55){
dum2=arr_patternC[k]>>(55-m);
dum=dum|dum2;
}
else{
dum=arr_patternC[k]<<(m-55);
if(m<=63){
dum2=arr_patternO[k]>>(63-m);
dum=dum|dum2;
}
else{
dum=arr_patternO[k]<<(m-63);
if(m<=71){
dum2=arr_patternM[k]>>(71-m);
dum=dum|dum2;
}
else{
dum=arr_patternM[k]<<(m-71);
if(m<=79){
dum2=arr_patternE[k]>>(79-m);
dum=dum|dum2;
}
else{
dum=arr_patternE[k]<<(m-79);
}
}
}
}
}
}
}
//data transmission
for(i=7;i>=0;i--){
store=(dum>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
if(m>=16){
//display3
//address
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;
}
//data transfer for right to left
if(m<=22){
dum=arr_patternW[k]>>(23-m);
}
//data transfer from left to right
else{
dum=arr_patternW[k]<<(m-23);
if(m<=31){
dum2=arr_patternE[k]>>(31-m);
dum=dum|dum2;
}
else{
dum=arr_patternE[k]<<(m-31);
if(m<=39){
dum2=arr_patternL[k]>>(39-m);
dum=dum|dum2;
}
else{
dum=arr_patternL[k]<<(m-39);
if(m<=47){
dum2=arr_patternC[k]>>(47-m);
dum=dum|dum2;
}
else{
dum=arr_patternC[k]<<(m-47);
if(m<=55){
dum2=arr_patternO[k]>>(55-m);
dum=dum|dum2;
}
else{
dum=arr_patternO[k]<<(m-55);
if(m<=63){
dum2=arr_patternM[k]>>(63-m);
dum=dum|dum2;
}
else{
dum=arr_patternM[k]<<(m-63);
if(m<=71){
dum2=arr_patternE[k]>>(71-m);
dum=dum|dum2;
}
else{
dum=arr_patternE[k]<<(m-71);
}
}
}
}
}
}
}
//data transmission
for(i=7;i>=0;i--){
store=(dum>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
if(m>=8){
//display2
//address
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;
}
//data transfer for right to left
if(m<=14){
dum=arr_patternW[k]>>(15-m);
}
//data transfer from left to right
else{
dum=arr_patternW[k]<<(m-15);
if(m<=23){
dum2=arr_patternE[k]>>(23-m);
dum=dum|dum2;
}
else{
dum=arr_patternE[k]<<(m-23);
if(m<=31){
dum2=arr_patternL[k]>>(31-m);
dum=dum|dum2;
}
else{
dum=arr_patternL[k]<<(m-31);
if(m<=39){
dum2=arr_patternC[k]>>(39-m);
dum=dum|dum2;
}
else{
dum=arr_patternC[k]<<(m-39);
if(m<=47){
dum2=arr_patternO[k]>>(47-m);
dum=dum|dum2;
}
else{
dum=arr_patternO[k]<<(m-47);
if(m<=55){
dum2=arr_patternM[k]>>(55-m);
dum=dum|dum2;
}
else{
dum=arr_patternM[k]<<(m-55);
if(m<=63){
dum2=arr_patternE[k]>>(63-m);
dum=dum|dum2;
}
else{
dum=arr_patternE[k]<<(m-63);
}
}
}
}
}
}
}
//data transmission
for(i=7;i>=0;i--){
store=(dum>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
//display1
//address
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;
}
//data transfer for right to left
if(m<=7){
dum=arr_patternW[k]>>(7-m);
}
//data transfer from left to right
else{
dum=arr_patternW[k]<<(m-7);
if(m<=15){
dum2=arr_patternE[k]>>(15-m);
dum=dum|dum2;
}
else{
dum=arr_patternE[k]<<(m-15);
if(m<=23){
dum2=arr_patternL[k]>>(23-m);
dum=dum|dum2;
}
else{
dum=arr_patternL[k]<<(m-23);
if(m<=31){
dum2=arr_patternC[k]>>(31-m);
dum=dum|dum2;
}
else{
dum=arr_patternC[k]<<(m-31);
if(m<=39){
dum2=arr_patternO[k]>>(39-m);
dum=dum|dum2;
}
else{
dum=arr_patternO[k]<<(m-39);
if(m<=47){
dum2=arr_patternM[k]>>(47-m);
dum=dum|dum2;
}
else{
dum=arr_patternM[k]<<(m-47);
if(m<=55){
dum2=arr_patternE[k]>>(55-m);
dum=dum|dum2;
}
else{
dum=arr_patternE[k]<<(m-55);
}
}
}
}
}
}
}
//data transmission
for(i=7;i>=0;i--){
store=(dum>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
*outa|=0x02;
}
dum=0x00;dum2=0x00;
for(j=0;j<100000;j++);
}
}