#define clock_delay 10
//PROGRAM TO DISPLAY WELCOME BY ENTERING FROM LEFT AND LEAVING FROM RIGHT,REVOLVING CONTINUOSLY
//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_left_to_right();
}
void display_left_to_right(){
for(m=0;m<88;m++){
for(k=0;k<8;k++){
*outa&=~0x02;
//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 left to right
if(m<=7){
dum=arr_patternE[k]<<(7-m);
}
//data transfer from right to left
else{
dum=arr_patternE[k]>>(m-7);
if(m<=15){
dum2=arr_patternM[k]<<(15-m);
dum=dum|dum2;
}
else{
dum=arr_patternM[k]>>(m-15);
if(m<=23){
dum2=arr_patternO[k]<<(23-m);
dum=dum|dum2;
}
else{
dum=arr_patternO[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_patternL[k]<<(39-m);
dum=dum|dum2;
}
else{
dum=arr_patternL[k]>>(m-39);
if(m<=47){
dum2=arr_patternE[k]<<(47-m);
dum=dum|dum2;
}
else{
dum=arr_patternE[k]>>(m-47);
if(m<=55){
dum2=arr_patternW[k]<<(55-m);
dum=dum|dum2;
}
else{
dum=arr_patternW[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;
}
//3 displays zeroes
if(m<8){
for(j=0;j<3;j++){
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;
}
for(n=0;n<8;n++){
*outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
}
else{
//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 left to right
if(m<=14){
dum=arr_patternE[k]<<(15-m);
}
//data transfer from right to left
else{
dum=arr_patternE[k]>>(m-15);
if(m<=23){
dum2=arr_patternM[k]<<(23-m);
dum=dum|dum2;
}
else{
dum=arr_patternM[k]>>(m-23);
if(m<=31){
dum2=arr_patternO[k]<<(31-m);
dum=dum|dum2;
}
else{
dum=arr_patternO[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_patternL[k]<<(47-m);
dum=dum|dum2;
}
else{
dum=arr_patternL[k]>>(m-47);
if(m<=55){
dum2=arr_patternE[k]<<(55-m);
dum=dum|dum2;
}
else{
dum=arr_patternE[k]>>(m-55);
if(m<=63){
dum2=arr_patternW[k]<<(63-m);
dum=dum|dum2;
}
else{
dum=arr_patternW[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;
}
}
//2 displays zeroes
if(m<16){
for(j=0;j<2;j++){
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;
}
for(n=0;n<8;n++){
*outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
}
else{
//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 left to right
if(m<=22){
dum=arr_patternE[k]<<(23-m);
}
//data transfer from right to left
else{
dum=arr_patternE[k]>>(m-23);
if(m<=31){
dum2=arr_patternM[k]<<(31-m);
dum=dum|dum2;
}
else{
dum=arr_patternM[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_patternC[k]<<(47-m);
dum=dum|dum2;
}
else{
dum=arr_patternC[k]>>(m-47);
if(m<=55){
dum2=arr_patternL[k]<<(55-m);
dum=dum|dum2;
}
else{
dum=arr_patternL[k]>>(m-55);
if(m<=63){
dum2=arr_patternE[k]<<(63-m);
dum=dum|dum2;
}
else{
dum=arr_patternE[k]>>(m-63);
if(m<=71){
dum2=arr_patternW[k]<<(71-m);
dum=dum|dum2;
}
else{
dum=arr_patternW[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;
}
}
//1 displays zeroes
if(m<24){
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;
}
for(n=0;n<8;n++){
*outa&=~0x01;
*outa|=0x04;
for(j=0;j<clock_delay;j++);
*outa&=~0x04;
}
}
else{
//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 left to right
if(m<=30){
dum=arr_patternE[k]<<(31-m);
}
//data transfer from right to left
else{
dum=arr_patternE[k]>>(m-31);
if(m<=39){
dum2=arr_patternM[k]<<(39-m);
dum=dum|dum2;
}
else{
dum=arr_patternM[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_patternC[k]<<(55-m);
dum=dum|dum2;
}
else{
dum=arr_patternC[k]>>(m-55);
if(m<=63){
dum2=arr_patternL[k]<<(63-m);
dum=dum|dum2;
}
else{
dum=arr_patternL[k]>>(m-63);
if(m<=71){
dum2=arr_patternE[k]<<(71-m);
dum=dum|dum2;
}
else{
dum=arr_patternE[k]>>(m-71);
if(m<=79){
dum2=arr_patternW[k]<<(79-m);
dum=dum|dum2;
}
else{
dum=arr_patternW[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;
}
}
*outa|=0x02;
}
dum=0x00;dum2=0x00;
for(j=0;j<100000;j++);
}
}