#define clock_delay 10
//PROGRAM TO DISPLAY ETAL on TOP display by entering from top and 1234 at bottom display entering from bottom simultaneoulsy
//GLOBAL DECLARATION
volatile uint8_t *outa;
volatile uint8_t address=0x01,store=0x00;
volatile uint8_t dum=0x00,dum2=0x00;
volatile long i,j,k,m,n,d=7,e=0;
void setup() {
// put your setup code here, to run once:
volatile uint8_t *dira;
dira=0x21;*dira=0xff;
outa=0x22;
for(m=0;m<8;m++){
for(k=0;k<8;k++){
display_2();
display_1();
d=7;
}
dum=0x00;dum2=0x00;e=0;
for(j=0;j<100000;j++);
}
}
void loop() {
// put your main code here, to run repeatedly:
}
void display_1(){
volatile uint8_t arr_pattern[]={0x10,0x30,0x10,0x10,0x10,0x10,0x38,0x00};
volatile uint8_t arr_pattern2[]={0x38,0x44,0x04,0x08,0x10,0x20,0x7c,0x00};
volatile uint8_t arr_pattern3[]={0x38,0x44,0x04,0x18,0x04,0x44,0x38,0x00};
volatile uint8_t arr_pattern4[]={0x08,0x18,0x28,0x48,0x7c,0x08,0x08,0x00};
*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_pattern[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_pattern2[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_pattern3[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_pattern4[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;
}
void display_2(){
volatile uint8_t arr_pattern[]={0x7c,0x40,0x40,0x78,0x40,0x40,0x7c,0x00};
volatile uint8_t arr_pattern2[]={0x7c,0x10,0x10,0x10,0x10,0x10,0x10,0x00};
volatile uint8_t arr_pattern3[]={0x38,0x44,0x44,0x7c,0x44,0x44,0x44,0x00};
volatile uint8_t arr_pattern4[]={0x40,0x40,0x40,0x40,0x40,0x40,0x7c,0x00};
*outa&=~0x10;
//disp1
//address
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;
}
//zero transmission
if(m+k<=6){
for(n=0;n<8;n++){
*outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
else{
for(i=7;i>=0;i--){
store=(arr_pattern[e]>>i)&0x01;
if(store)*outa|=0x08;
else *outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
//disp2
//address
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;
}
//zero transmission
if(m+k<=6){
for(n=0;n<8;n++){
*outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
else{
for(i=7;i>=0;i--){
store=(arr_pattern2[e]>>i)&0x01;
if(store)*outa|=0x08;
else *outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
//disp3
//address
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;
}
//zero transmission
if(m+k<=6){
for(n=0;n<8;n++){
*outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
else{
for(i=7;i>=0;i--){
store=(arr_pattern3[e]>>i)&0x01;
if(store)*outa|=0x08;
else *outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
//disp4
//address
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;
}
//zero transmission
if(m+k<=6){
for(n=0;n<8;n++){
*outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
}
else{
for(i=7;i>=0;i--){
store=(arr_pattern4[e]>>i)&0x01;
if(store)*outa|=0x08;
else *outa&=~0x08;
*outa|=0x20;
for(j=0;j<clock_delay;j++);
*outa&=~0x20;
}
e++;
}
*outa|=0x10;
}