#define clock_delay 10
//PROGRAM TO DISPLAY WELC ENTERING FROM TOP AND LEAVING BY BOTTOM REVOLVING CONTINOULSY
//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,d=7;
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_char_entertop();
display_char_leaveleft();
}
void display_char_entertop(){
for(m=0;m<8;m++){
for(k=0;k<8;k++){
*outa&=~0x02;
d=((d-m)+k);
//disp4
//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 transmission from top to bottom
if(k<=m){
for(i=7;i>=0;i--){
store=(arr_patternW[d]>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
else{
for(n=0;n<8;n++){
*outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
//disp3
//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 transmission
if(k<=m){
for(i=7;i>=0;i--){
store=(arr_patternE[d]>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
else{
for(n=0;n<8;n++){
*outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
//disp2
//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 transmission
if(k<=m){
for(i=7;i>=0;i--){
store=(arr_patternL[d]>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
else{
for(n=0;n<8;n++){
*outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
//disp1
//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 transmission
if(k<=m){
for(i=7;i>=0;i--){
store=(arr_patternC[d]>>i)&0x01;
if(store)*outa|=0x01;
else *outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
else{
for(n=0;n<8;n++){
*outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
*outa|=0x02;
d=7;
}
for(j=0;j<100000;j++);
}
}
void display_char_leaveleft(){
for(m=31;m<63;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);
}
}
}
}
//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);
}
}
}
}
//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);
}
}
}
}
//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);
}
}
}
}
//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<10000;j++);
}
}