#include <TM1637Display.h>
#include <digitalWriteFast.h>
# include <Wire.h>
# include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27,20,4);
volatile int T_FF1 = 22, CK_FF1 = 23, Q1_FF1 = 0, Q2_FF1 = 0, X1, M1_FF1 = 0, T1;
volatile int T_FF2 = 24, CK_FF2 = 25, Q1_FF2 = 0, Q2_FF2 = 0, X2, M1_FF2 = 0, T2;
volatile int T_FF3 = 26, CK_FF3 = 27, Q1_FF3 = 0, Q2_FF3 = 0, X3, M1_FF3 = 0, T3;
volatile int T_FF4 = 28, CK_FF4 = 29, Q1_FF4 = 0, Q2_FF4 = 0, X4, M1_FF4 = 0, T4;
volatile int A_AND1=32,B_AND1=33,Y_AND1, Y1 = 0, Y2 = 0;
volatile int A_AND2=34,B_AND2=35,Y_AND2, Y3 = 0, Y4 = 0;
volatile int A_AND3=36,B_AND3=37,Y_AND3, Y5 = 0, Y6 = 0;
volatile int A_AND4=38,B_AND4=39,Y_AND4, Y7 = 0, Y8 = 0;
volatile int A_AND5=40,B_AND5=41,Y_AND5, Y9 = 0, Y10 = 0;
volatile int A_AND6=42,B_AND6=43,Y_AND6, Y11 = 0, Y12 = 0;
volatile int A_OR1=44,B_OR1=45,Y_OR1, Y13 = 0, Y14 = 0;
volatile int A_OR2=46,B_OR2=47,Y_OR2, Y15 = 0, Y16 = 0;
volatile int A_OR3=48,B_OR3=49,Y_OR3, Y17 = 0, Y18 = 0;
volatile int A_NOT=11,Y_NOT, Y19 = 0;
int TT = 13, CLR = 30, XT, XC;
int CLR_FF = 2;
int Dn_Cnt = 12;
int cc = 0;
int DD;
////// TM1637 //////////////
TM1637Display display(0,1);
////////////////////////////
//const byte CLRPin = 2;
const byte interruptPin1 = 18;
const byte interruptPin2 = 19;
volatile int Row = -1;
volatile int MF =0;
volatile int Val = 0;
void setup()
{
Serial.begin(9600);
////// TM1637 //////////////
//Set the brightness of the display (0-7)
display.setBrightness(5);
byte segments[] = {B0111111, B0111111, B0111111, B0111111};
///////////////////////////////
LCD.init();
delay (1000);LCD.backlight();
// LCD.init();
// delay (1000);LCD.backlight();
// delay (2000);LCD.setCursor(0,1);LCD.print(" NORTHERN TECHNICAL ");
// delay (100);LCD.setCursor(0,2);LCD.print (" UNIVERSITY - NTU ");
// delay (4000);
// LCD.clear();
// delay (500);LCD.setCursor(0,1);LCD.print("TECHNICAL INSTITUTE");
// delay (100);LCD.setCursor(0,2);LCD.print(" OF MOSUL - TIM ");
// delay (4000);
// LCD.clear();
// delay (1000);LCD.setCursor(0,0);LCD.print(" DIGITAL ELECTRONIC");
// delay (10);LCD.setCursor(0,1);LCD.print(" LAB");
// delay (150);LCD.setCursor(0,2);LCD.print(" DESIGNED BY:");
// delay (150);LCD.setCursor(0,3);LCD.print(" AAA & HYS@ NTU/TIM");
// delay (4000);
LCD.clear();
LCD.setCursor(0,0);LCD.print(" DIGITAL ELECTRONIC");
LCD.setCursor(0,1);LCD.print(" LAB");
delay (100.0);LCD.setCursor(0,2);LCD.print("4-BITS SYNC.& ASYNC.");
delay (150);LCD.setCursor(0,3);LCD.print("UP-DOWN COUNTER KIT");
delay (500.0);LCD.clear();
pinModeFast(CLR_FF,INPUT_PULLUP);
pinModeFast(18,INPUT_PULLUP);
pinModeFast(19,INPUT_PULLUP);
//attachInterrupt(digitalPinToInterrupt(CLRPin),ISR_CLEAR,LOW);
attachInterrupt(digitalPinToInterrupt(interruptPin1),ISR_BDn,LOW);
attachInterrupt(digitalPinToInterrupt(interruptPin2),ISR_BUp,LOW);
////// T- FF1 /////
pinModeFast(T_FF1,INPUT_PULLUP);
pinModeFast(CK_FF1,INPUT_PULLUP);
pinModeFast(3,OUTPUT);
pinModeFast(4,OUTPUT);
////// T- FF2 /////
pinModeFast(T_FF2,INPUT_PULLUP);
pinModeFast(CK_FF2,INPUT_PULLUP);
pinModeFast(5,OUTPUT);
pinModeFast(6,OUTPUT);
////// T- FF3 /////
pinModeFast(T_FF3,INPUT_PULLUP);
pinModeFast(CK_FF3,INPUT_PULLUP);
pinModeFast(7,OUTPUT);
pinModeFast(8,OUTPUT);
////// T- FF4 /////
pinModeFast(T_FF4,INPUT_PULLUP);
pinModeFast(CK_FF4,INPUT_PULLUP);
pinModeFast(9,OUTPUT);
pinModeFast(10,OUTPUT);
////// T- CLR /////
pinModeFast(TT,INPUT_PULLUP);
pinModeFast(CLR,INPUT_PULLUP);
pinModeFast(Dn_Cnt,INPUT_PULLUP);
//////////// AND OR NOT ///////////
pinModeFast(A_AND1,INPUT_PULLUP);pinModeFast(B_AND1,INPUT_PULLUP);pinModeFast(A0,OUTPUT);
pinModeFast(A_AND2,INPUT_PULLUP);pinModeFast(B_AND2,INPUT_PULLUP);pinModeFast(A1,OUTPUT);
pinModeFast(A_AND3,INPUT_PULLUP);pinModeFast(B_AND3,INPUT_PULLUP);pinModeFast(A2,OUTPUT);
pinModeFast(A_AND4,INPUT_PULLUP);pinModeFast(B_AND4,INPUT_PULLUP);pinModeFast(A3,OUTPUT);
pinModeFast(A_AND5,INPUT_PULLUP);pinModeFast(B_AND5,INPUT_PULLUP);pinModeFast(A4,OUTPUT);
pinModeFast(A_AND6,INPUT_PULLUP);pinModeFast(B_AND6,INPUT_PULLUP);pinModeFast(A5,OUTPUT);
pinModeFast(A_OR1,INPUT_PULLUP);pinModeFast(B_OR1,INPUT_PULLUP);pinModeFast(A6,OUTPUT);
pinModeFast(A_OR2,INPUT_PULLUP);pinModeFast(B_OR2,INPUT_PULLUP);pinModeFast(A7,OUTPUT);
pinModeFast(A_OR3,INPUT_PULLUP);pinModeFast(B_OR3,INPUT_PULLUP);pinModeFast(A8,OUTPUT);
pinModeFast(A_NOT,INPUT_PULLUP);pinModeFast(A9,OUTPUT);
}
void loop()
{
if (digitalReadFast(TT) == HIGH){XT = 0;}else {XT = 1;}
if (digitalReadFast(CLR) == HIGH){XC = 0;}else {XC = 1;}
if (digitalReadFast(T_FF1) == HIGH){T1 = 1;}else {T1 = 0;}
if (digitalReadFast(T_FF2) == HIGH){T2 = 1;}else {T2 = 0;}
if (digitalReadFast(T_FF3) == HIGH){T3 = 1;}else {T3 = 0;}
if (digitalReadFast(T_FF4) == HIGH){T4 = 1;}else {T4 = 0;}
//if (digitalRead(CLR_FF) == LOW){T1 = 1;T2 = 1;T3 = 1;T4 = 1;}else {;}
/////////[ T-FF1 ]///////////
if (T1 == 1) {digitalWriteFast(3,HIGH);digitalWriteFast(4,LOW);}
else {
if (digitalReadFast(CK_FF1) == HIGH){X1 = 1;}else {X1 = 0;}
if (X1 == 1 && X1 != M1_FF1)
{ Q2_FF1 = !Q2_FF1;
Q1_FF1 = !Q2_FF1;
M1_FF1 = X1;
if (Q1_FF1 == 1){digitalWriteFast(3,LOW);}else {digitalWriteFast(3,HIGH);}
if (Q2_FF1 == 1){digitalWriteFast(4,LOW);}else {digitalWriteFast(4,HIGH);}
Serial.println("falling edge");
}
else {Q2_FF1 = Q2_FF1;
M1_FF1 = X1;
Q1_FF1 = !Q2_FF1;
if (Q1_FF1 == 1){digitalWriteFast(3,LOW);}else {digitalWriteFast(3,HIGH);}
if (Q2_FF1 == 1){digitalWriteFast(4,LOW);}else {digitalWriteFast(4,HIGH);}
Serial.println("Rising edge");
}
}
/////////[ T-FF2 ]///////////
if (T2 == 1) {digitalWriteFast(5,HIGH);digitalWriteFast(6,LOW);}
else {
if (digitalReadFast(CK_FF2) == HIGH){X2 = 1;}else {X2 = 0;}
if (X2 == 1 && X2 != M1_FF2)
{ Q2_FF2 = !Q2_FF2;
Q1_FF2 = !Q2_FF2;
M1_FF2 = X2;
if (Q1_FF2 == 1){digitalWriteFast(5,LOW);}else {digitalWriteFast(5,HIGH);}
if (Q2_FF2 == 1){digitalWriteFast(6,LOW);}else {digitalWriteFast(6,HIGH);}
Serial.println("falling edge");
}
else {Q2_FF2 = Q2_FF2;
M1_FF2 = X2;
Q1_FF2 = !Q2_FF2;
if (Q1_FF2 == 1){digitalWriteFast(5,LOW);}else {digitalWriteFast(5,HIGH);}
if (Q2_FF2 == 1){digitalWriteFast(6,LOW);}else {digitalWriteFast(6,HIGH);}
Serial.println("Rising edge");
}
}
/////////[ T-FF3 ]///////////
if (T3 == 1) {digitalWriteFast(7,HIGH);digitalWriteFast(8,LOW);}
else {
if (digitalReadFast(CK_FF3) == HIGH){X3 = 1;}else {X3 = 0;}
if (X3 == 1 && X3 != M1_FF3)
{ Q2_FF3 = !Q2_FF3;
Q1_FF3 = !Q2_FF3;
M1_FF3 = X3;
if (Q1_FF3 == 1){digitalWriteFast(7,LOW);}else {digitalWriteFast(7,HIGH);}
if (Q2_FF3 == 1){digitalWriteFast(8,LOW);}else {digitalWriteFast(8,HIGH);}
Serial.println("falling edge");
}
else {Q2_FF3 = Q2_FF3;
M1_FF3 = X3;
Q1_FF3 = !Q2_FF3;
if (Q1_FF3 == 1){digitalWriteFast(7,LOW);}else {digitalWriteFast(7,HIGH);}
if (Q2_FF3 == 1){digitalWriteFast(8,LOW);}else {digitalWriteFast(8,HIGH);}
Serial.println("Rising edge");
}
}
// /////////[ T-FF4 ]///////////
if (T4 == 1) {digitalWriteFast(9,HIGH);digitalWriteFast(10,LOW);}
else {
if (digitalReadFast(CK_FF4) == HIGH){X4 = 1;}else {X4 = 0;}
if (X4 == 1 && X4 != M1_FF4)
{ Q2_FF4 = !Q2_FF4;
Q1_FF4 = !Q2_FF4;
M1_FF4 = X4;
if (Q1_FF4 == 1){digitalWriteFast(9,LOW);}else {digitalWriteFast(9,HIGH);}
if (Q2_FF4 == 1){digitalWriteFast(10,LOW);}else {digitalWriteFast(10,HIGH);}
Serial.println("falling edge");
}
else {Q2_FF4 = Q2_FF4;
M1_FF4 = X4;
Q1_FF4 = !Q2_FF4;
if (Q1_FF4 == 1){digitalWriteFast(9,LOW);}else {digitalWriteFast(9,HIGH);}
if (Q2_FF4 == 1){digitalWriteFast(10,LOW);}else {digitalWriteFast(10,HIGH);}
Serial.println("Rising edge");
}
}
/////////// AND OR NOT GATESS /////////////////////
//====== [ AND Gate (1) ] ======//
if (digitalReadFast(A_AND1) == HIGH){Y1 = 0;}else {Y1 = 1;}
if (digitalReadFast(B_AND1) == HIGH){Y2 = 0;}else {Y2 = 1;}
// Bitwise Operator of AND Gate1
Y_AND1 = (Y1 && Y2);
if (Y_AND1 == 1){digitalWriteFast(A0,LOW);}else {digitalWriteFast(A0,HIGH);}
//====== [ AND Gate (2) ] ======//
if (digitalReadFast(A_AND2) == HIGH){Y3 = 0;}else {Y3 = 1;}
if (digitalReadFast(B_AND2) == HIGH){Y4 = 0;}else {Y4 = 1;}
// Bitwise Operator of AND Gate2
Y_AND2 = (Y3 && Y4);
if (Y_AND2 == 1){digitalWriteFast(A1,LOW);}else {digitalWriteFast(A1,HIGH);}
//====== [ AND Gate (3) ] ======//
if (digitalReadFast(A_AND3) == HIGH){Y5 = 0;}else {Y5 = 1;}
if (digitalReadFast(B_AND3) == HIGH){Y6 = 0;}else {Y6 = 1;}
// Bitwise Operator of AND Gate3
Y_AND3 = (Y5 && Y6);
if (Y_AND3 == 1){digitalWriteFast(A2,LOW);}else {digitalWriteFast(A2,HIGH);}
//====== [ AND Gate (4) ] ======//
if (digitalReadFast(A_AND4) == HIGH){Y7 = 0;}else {Y7 = 1;}
if (digitalReadFast(B_AND4) == HIGH){Y8 = 0;}else {Y8 = 1;}
// Bitwise Operator of AND Gate1
Y_AND4 = (Y7 && Y8);
if (Y_AND4 == 1){digitalWriteFast(A3,LOW);}else {digitalWriteFast(A3,HIGH);}
//====== [ AND Gate (5) ] ======//
if (digitalReadFast(A_AND5) == HIGH){Y9 = 0;}else {Y9 = 1;}
if (digitalReadFast(B_AND5) == HIGH){Y10 = 0;}else {Y10 = 1;}
// Bitwise Operator of AND Gate2
Y_AND5 = (Y9 && Y10);
if (Y_AND5 == 1){digitalWriteFast(A4,LOW);}else {digitalWriteFast(A4,HIGH);}
//====== [ AND Gate (6) ] ======//
if (digitalReadFast(A_AND6) == HIGH){Y11 = 0;}else {Y11 = 1;}
if (digitalReadFast(B_AND6) == HIGH){Y12 = 0;}else {Y12 = 1;}
// Bitwise Operator of AND Gate3
Y_AND6 = (Y11 && Y12);
if (Y_AND6 == 1){digitalWriteFast(A5,LOW);}else {digitalWriteFast(A5,HIGH);}
//====== [ OR Gate (1) ] ======//
if (digitalReadFast(A_OR1) == HIGH){Y13 = 0;}else {Y13 = 1;}
if (digitalReadFast(B_OR1) == HIGH){Y14 = 0;}else {Y14 = 1;}
// Bitwise Operator of OR Gate1
Y_OR1 = (Y13 || Y14);
if (Y_OR1 == 1){digitalWriteFast(A6,LOW);}else {digitalWriteFast(A6,HIGH);}
//====== [ OR Gate (2) ] ======//
if (digitalReadFast(A_OR2) == HIGH){Y15 = 0;}else {Y15 = 1;}
if (digitalReadFast(B_OR2) == HIGH){Y16 = 0;}else {Y16= 1;}
// Bitwise Operator of OR Gate2
Y_OR2 = (Y15 || Y16);
if (Y_OR2 == 1){digitalWriteFast(A7,LOW);}else {digitalWriteFast(A7,HIGH);}
//====== [ OR Gate (3) ] ======//
if (digitalReadFast(A_OR3) == HIGH){Y17 = 0;}else {Y17 = 1;}
if (digitalReadFast(B_OR3) == HIGH){Y18 = 0;}else {Y18 = 1;}
// Bitwise Operator of OR Gate3
Y_OR3 = (Y17 || Y18);
if (Y_OR3 == 1){digitalWriteFast(A8,LOW);}else {digitalWriteFast(A8,HIGH);}
//====== [ NOT Gate (1) ] ======//
if (digitalReadFast(A_NOT) == HIGH){Y19 = 0;}else {Y19 = 1;}
// Bitwise Operator of NOT Gate1
Y_NOT = !(Y19);
if (Y_NOT == 1){digitalWriteFast(A9,LOW);}else {digitalWriteFast(A9,HIGH);}
///////////////////////// TM1637 /////////////////////////////
if (digitalRead(12) == HIGH){DD = 0;}else {DD = 1;}
if (DD == 1){
if (Row <= -6 && Q1_FF4 == 0 && Q1_FF3 == 0 && Q1_FF2 == 0 && Q1_FF1 == 0) //# up:00
{byte segments[] = {B1100010, B1110011, B0111111, B10111111};
display.setSegments(segments);}
else if (Row <= -6 && Q1_FF4 == 0 && Q1_FF3 == 0 && Q1_FF2 == 0 && Q1_FF1 == 1) //# up:01
{byte segments[] = {B1100010, B1110011, B0111111, B10000110};
display.setSegments(segments);}
else if (Row <= -11 && Q1_FF4 == 0 && Q1_FF3 == 0 && Q1_FF2 == 1 && Q1_FF1 == 0) //# up:02
{byte segments[] = {B1100010, B1110011, B0111111, B11011011};
display.setSegments(segments);}
else if (Row <= -11 && Q1_FF4 == 0 && Q1_FF3 == 0 && Q1_FF2 == 1 && Q1_FF1 == 1) //# up:03
{byte segments[] = {B1100010, B1110011, B0111111, B11001111};
display.setSegments(segments);}
else if (Row <= -16 && Q1_FF4 == 0 && Q1_FF3 == 1 && Q1_FF2 == 0 && Q1_FF1 == 0) //# up:04
{byte segments[] = {B1100010, B1110011, B0111111, B11100110};
display.setSegments(segments);}
else if (Row <= -16 && Q1_FF4 == 0 && Q1_FF3 == 1 && Q1_FF2 == 0 && Q1_FF1 == 1) //# up:05
{byte segments[] = {B1100010, B1110011, B0111111, B11101101};
display.setSegments(segments);}
else if (Row <= -16 && Q1_FF4 == 0 && Q1_FF3 == 1 && Q1_FF2 == 1 && Q1_FF1 == 0) //# up:06
{byte segments[] = {B1100010, B1110011, B0111111, B11111101};
display.setSegments(segments);}
else if (Row <= -16 && Q1_FF4 == 0 && Q1_FF3 == 1 && Q1_FF2 == 1 && Q1_FF1 == 1) //# up:07
{byte segments[] = {B1100010, B1110011, B0111111, B00000111};
display.setSegments(segments);}
else if (Row <= -21 && Q1_FF4 == 1 && Q1_FF3 == 0 && Q1_FF2 == 0 && Q1_FF1 == 0) //# up:08
{byte segments[] = {B1100010, B1110011, B0111111, B11111111};
display.setSegments(segments);}
else if (Row <= -21 && Q1_FF4 == 1 && Q1_FF3 == 0 && Q1_FF2 == 0 && Q1_FF1 == 1) //# up:09
{byte segments[] = {B1100010, B1110011, B0111111, B11101111};
display.setSegments(segments);}
else if (Row <= -21 && Q1_FF4 == 1 && Q1_FF3 == 0 && Q1_FF2 == 1 && Q1_FF1 == 0) //# up:10
{byte segments[] = {B1100010, B1110011, B0000110, B10111111};
display.setSegments(segments);}
else if (Row <= -21 && Q1_FF4 == 1 && Q1_FF3 == 0 && Q1_FF2 == 1 && Q1_FF1 == 1) //# up:11
{byte segments[] = {B1100010, B1110011, B0000110, B10000110};
display.setSegments(segments);}
else if (Row <= -21 && Q1_FF4 == 1 && Q1_FF3 == 1 && Q1_FF2 == 0 && Q1_FF1 == 0) //# up:12
{byte segments[] = {B1100010, B1110011, B0000110, B11011011};
display.setSegments(segments);}
else if (Row <= 21 && Q1_FF4 == 1 && Q1_FF3 == 1 && Q1_FF2 == 0 && Q1_FF1 == 1) //# up:13
{byte segments[] = {B1100010, B1110011,B0000110, B11001111};
display.setSegments(segments);}
else if (Row <= -21 && Q1_FF4 == 1 && Q1_FF3 == 1 && Q1_FF2 == 1 && Q1_FF1 == 0) //# up:14
{byte segments[] = {B1100010, B1110011, B0000110, B11100110};
display.setSegments(segments);}
else if (Row <= -21 && Q1_FF4 == 1 && Q1_FF3 == 1 && Q1_FF2 == 1 && Q1_FF1 == 1) //# up:15
{byte segments[] = {B1100010, B1110011, B0000110, B11101101};
display.setSegments(segments);}
else{;}
;}
else
{
if (Row <= -6 && Q1_FF4 == 0 && Q1_FF3 == 0 && Q1_FF2 == 0 && Q1_FF1 == 0) //# dn:00
{byte segments[] = {B1011110, B1010100, B0111111, B10111111};
display.setSegments(segments);}
else if (Row <= -6 && Q1_FF4 == 0 && Q1_FF3 == 0 && Q1_FF2 == 0 && Q1_FF1 == 1) //# dn:01
{byte segments[] = {B1011110, B1010100, B0111111, B10000110};
display.setSegments(segments);}
else if (Row <= -11 && Q1_FF4 == 0 && Q1_FF3 == 0 && Q1_FF2 == 1 && Q1_FF1 == 0) //# dn:02
{byte segments[] = {B1011110, B1010100, B0111111, B11011011};
display.setSegments(segments);}
else if (Row <= -11 && Q1_FF4 == 0 && Q1_FF3 == 0 && Q1_FF2 == 1 && Q1_FF1 == 1) //# dn:03
{byte segments[] = {B1011110, B1010100, B0111111, B11001111};
display.setSegments(segments);}
else if (Row <= -16 && Q1_FF4 == 0 && Q1_FF3 == 1 && Q1_FF2 == 0 && Q1_FF1 == 0) //# up:04
{byte segments[] = {B1011110, B1010100, B0111111, B11100110};
display.setSegments(segments);}
else if (Row <= -16 && Q1_FF4 == 0 && Q1_FF3 == 1 && Q1_FF2 == 0 && Q1_FF1 == 1) //# dn:05
{byte segments[] = {B1011110, B1010100, B0111111, B11101101};
display.setSegments(segments);}
else if (Row <= -16 && Q1_FF4 == 0 && Q1_FF3 == 1 && Q1_FF2 == 1 && Q1_FF1 == 0) //# dn:06
{byte segments[] = {B1011110, B1010100, B0111111, B11111101};
display.setSegments(segments);}
else if (Row <= -16 && Q1_FF4 == 0 && Q1_FF3 == 1 && Q1_FF2 == 1 && Q1_FF1 == 1) //# dn:07
{byte segments[] = {B1011110, B1010100, B0111111, B00000111};
display.setSegments(segments);}
else if (Row <= -21 && Q1_FF4 == 1 && Q1_FF3 == 0 && Q1_FF2 == 0 && Q1_FF1 == 0) //# dn:08
{byte segments[] = {B1011110, B1010100, B0111111, B11111111};
display.setSegments(segments);}
else if (Row <= -21 && Q1_FF4 == 1 && Q1_FF3 == 0 && Q1_FF2 == 0 && Q1_FF1 == 1) //# dn:09
{byte segments[] = {B1011110, B1010100, B0111111, B11101111};
display.setSegments(segments);}
else if (Row <= -21 && Q1_FF4 == 1 && Q1_FF3 == 0 && Q1_FF2 == 1 && Q1_FF1 == 0) //# dn:10
{byte segments[] = {B1011110, B1010100,B0000110, B10111111};
display.setSegments(segments);}
else if (Row <= -21 && Q1_FF4 == 1 && Q1_FF3 == 0 && Q1_FF2 == 1 && Q1_FF1 == 1) //# dn:11
{byte segments[] = {B1011110, B1010100, B0000110, B10000110};
display.setSegments(segments);}
else if (Row <= -21 && Q1_FF4 == 1 && Q1_FF3 == 1 && Q1_FF2 == 0 && Q1_FF1 == 0) //# dn:12
{byte segments[] = {B1011110, B1010100, B0000110, B11011011};
display.setSegments(segments);}
else if (Row <= -21 && Q1_FF4 == 1 && Q1_FF3 == 1 && Q1_FF2 == 0 && Q1_FF1 == 1) //# dn:13
{byte segments[] = {B1011110, B1010100, B0000110, B11001111};
display.setSegments(segments);}
else if (Row <= -21 && Q1_FF4 == 1 && Q1_FF3 == 1 && Q1_FF2 == 1 && Q1_FF1 == 0) //# dn:14
{byte segments[] = {B1011110, B1010100, B0000110, B11100110};
display.setSegments(segments);}
else if (Row <= -21 && Q1_FF4 == 1 && Q1_FF3 == 1 && Q1_FF2 == 1 && Q1_FF1 == 1) //# dn:15
{byte segments[] = {B1011110, B1010100, B0000110, B11101101};
display.setSegments(segments);}
;}
/////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
MF = 0;
Serial.print("Row = ");Serial.println(Row);
////////////////////////////////////////////////////////////////////////////////////
LCD.init();
if (Row >= -1 && Row+1<=3){LCD.setCursor(0,Row+1);LCD.print(" ==[LAB Starting]== ");}
if (Row >= -2 && Row+2<=3){LCD.setCursor(0,Row+2);LCD.print(" Press Button ");}
if (Row >= -3 && Row+3<=3){LCD.setCursor(0,Row+3);LCD.print(" [LCD PgDn] ");}
if (Row >= -4 && Row+4<=3){LCD.setCursor(0,Row+4);LCD.print(" To See I/Os Status ");}
if (Row == -1) {delay (1000);} else {;}
if (Row >= -1 && Row+1<=3){LCD.setCursor(0,Row+1);LCD.print(" ==[LAB Starting]== ");}
if (Row >= -2 && Row+2<=3){LCD.setCursor(0,Row+2);LCD.print(" Press Button ");}
if (Row >= -3 && Row+3<=3){LCD.setCursor(0,Row+3);LCD.print(" ");}
if (Row >= -4 && Row+4<=3){LCD.setCursor(0,Row+4);LCD.print(" To See I/Os Status ");}
if (Row == -1) {delay (500);} else {;}
if (Row >= -1 && Row+1<=3){LCD.setCursor(0,Row+1);LCD.print(" ==[LAB Starting]== ");}
if (Row >= -2 && Row+2<=3){LCD.setCursor(0,Row+2);LCD.print(" Press Button ");}
if (Row >= -3 && Row+3<=3){LCD.setCursor(0,Row+3);LCD.print(" [LCD PgDn] ");}
if (Row >= -4 && Row+4<=3){LCD.setCursor(0,Row+4);LCD.print(" To See I/Os Status ");}
// /////////////////////////////////////////////////////////////////////////////////////
if (digitalReadFast(Dn_Cnt) == HIGH){
if (Row >= -6 && Row+6<=3) {LCD.setCursor(0,Row+6);LCD.print(" [1-Bit Up Cnt] #1");}
if (Row >= -7 && Row+7<=3) {LCD.setCursor(1,Row+7);LCD.print("T=");}
if (Row >= -7 && Row+7<=3) {LCD.setCursor(3,Row+7);LCD.print(XT,BIN);}
if (Row >= -7 && Row+7<=3) {LCD.setCursor(6,Row+7);LCD.print("CLK=");}
if (Row >= -7 && Row+7<=3) {LCD.setCursor(10,Row+7);LCD.print(X1,BIN);}
if (Row >= -7 && Row+7<=3){LCD.setCursor(12,Row+7);LCD.print("!CLR=");}
if (Row >= -7 && Row+7<=3){LCD.setCursor(17,Row+7);LCD.print(XT,BIN);}
if (Row >= -8 && Row+8 <=3){LCD.setCursor(0,Row+8);LCD.print(" Q1=");}
if (Row >= -8 && Row+8 <=3){LCD.setCursor(4,Row+8);LCD.print(Q1_FF1);}
if (Row >= -8 && Row+8 <=3){LCD.setCursor(5,Row+8);LCD.print(" Q2=");}
if (Row >= -8 && Row+8 <=3){LCD.setCursor(9,Row+8);LCD.print("x");}
if (Row >= -8 && Row+8 <=3){LCD.setCursor(10,Row+8);LCD.print(" |BIN:");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(0,Row+9);LCD.print(" Q3=");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(4,Row+9);LCD.print("x");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(5,Row+9);LCD.print(" Q4=");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(9,Row+9);LCD.print("x");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(11,Row+9);LCD.print(" |[");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(14,Row+9);LCD.print("x");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(15,Row+9);LCD.print("x");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(16,Row+9);LCD.print("x");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(17,Row+9);LCD.print(Q1_FF1);}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(18,Row+9);LCD.print("]");}
////////////////////////////////////////////////////////////////////////////////////
if (Row >= -11 && Row+11<=3) {LCD.setCursor(0,Row+11);LCD.print(" [2-Bit Up Cnt] #2");}
if (Row >= -12 && Row+12<=3) {LCD.setCursor(1,Row+12);LCD.print("T=");}
if (Row >= -12 && Row+12<=3) {LCD.setCursor(3,Row+12);LCD.print(XT,BIN);}
if (Row >= -12 && Row+12<=3) {LCD.setCursor(6,Row+12);LCD.print("CLK=");}
if (Row >= -12 && Row+12<=3) {LCD.setCursor(10,Row+12);LCD.print(X1,BIN);}
if (Row >= -12 && Row+12<=3){LCD.setCursor(12,Row+12);LCD.print("!CLR=");}
if (Row >= -12 && Row+12<=3){LCD.setCursor(17,Row+12);LCD.print(XT,BIN);}
if (Row >= -13 && Row+13 <=3){LCD.setCursor(0,Row+13);LCD.print(" Q1=");}
if (Row >= -13 && Row+13 <=3){LCD.setCursor(4,Row+13);LCD.print(Q1_FF1);}
if (Row >= -13 && Row+13 <=3){LCD.setCursor(5,Row+13);LCD.print(" Q2=");}
if (Row >= -13 && Row+13 <=3){LCD.setCursor(9,Row+13);LCD.print(Q1_FF2);}
if (Row >= -13 && Row+13 <=3){LCD.setCursor(10,Row+13);LCD.print(" |BIN:");}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(0,Row+14);LCD.print(" Q3=");}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(4,Row+14);LCD.print("x");}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(5,Row+14);LCD.print(" Q4=");}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(9,Row+14);LCD.print("x");}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(11,Row+14);LCD.print(" |[");}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(14,Row+14);LCD.print("x");}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(15,Row+14);LCD.print("x");}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(16,Row+14);LCD.print(Q1_FF2);}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(17,Row+14);LCD.print(Q1_FF1);}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(18,Row+14);LCD.print("]");}
////////////////////////////////////////////////////////////////////////////
if (Row >= -16 && Row+16<=3) {LCD.setCursor(0,Row+16);LCD.print(" [3-Bit Up Cnt] #3");}
if (Row >= -17 && Row+17<=3) {LCD.setCursor(1,Row+17);LCD.print("T=");}
if (Row >= -17 && Row+17<=3) {LCD.setCursor(3,Row+17);LCD.print(XT,BIN);}
if (Row >= -17 && Row+17<=3) {LCD.setCursor(6,Row+17);LCD.print("CLK=");}
if (Row >= -17 && Row+17<=3) {LCD.setCursor(10,Row+17);LCD.print(X1,BIN);}
if (Row >= -17 && Row+17<=3){LCD.setCursor(12,Row+17);LCD.print("!CLR=");}
if (Row >= -17 && Row+17<=3){LCD.setCursor(17,Row+17);LCD.print(XT,BIN);}
if (Row >= -18 && Row+18 <=3){LCD.setCursor(0,Row+18);LCD.print(" Q1=");}
if (Row >= -18 && Row+18 <=3){LCD.setCursor(4,Row+18);LCD.print(Q1_FF1);}
if (Row >= -18 && Row+18 <=3){LCD.setCursor(5,Row+18);LCD.print(" Q2=");}
if (Row >= -18 && Row+18 <=3){LCD.setCursor(9,Row+18);LCD.print(Q1_FF2);}
if (Row >= -18 && Row+18 <=3){LCD.setCursor(10,Row+18);LCD.print(" |BIN:");}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(0,Row+19);LCD.print(" Q3=");}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(4,Row+19);LCD.print(Q1_FF3);}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(5,Row+19);LCD.print(" Q4=");}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(9,Row+19);LCD.print("x");}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(11,Row+19);LCD.print(" |[");}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(14,Row+19);LCD.print("x");}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(15,Row+19);LCD.print(Q1_FF3);}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(16,Row+19);LCD.print(Q1_FF2);}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(17,Row+19);LCD.print(Q1_FF1);}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(18,Row+19);LCD.print("]");}
/////////////////////////////////////////////////////////////////////////////////////////////
if (Row >= -21 && Row+21<=3) {LCD.setCursor(0,Row+21);LCD.print(" [4-Bit Up Cnt] #4");}
if (Row >= -22 && Row+22<=3) {LCD.setCursor(1,Row+22);LCD.print("T=");}
if (Row >= -22 && Row+22<=3) {LCD.setCursor(3,Row+22);LCD.print(XT,BIN);}
if (Row >= -22 && Row+22<=3) {LCD.setCursor(6,Row+22);LCD.print("CLK=");}
if (Row >= -22 && Row+22<=3) {LCD.setCursor(10,Row+22);LCD.print(X1,BIN);}
if (Row >= -22 && Row+22<=3){LCD.setCursor(12,Row+22);LCD.print("!CLR=");}
if (Row >= -22 && Row+22<=3){LCD.setCursor(17,Row+22);LCD.print(XT,BIN);}
if (Row >= -23 && Row+23 <=3){LCD.setCursor(0,Row+23);LCD.print(" Q1=");}
if (Row >= -23 && Row+23 <=3){LCD.setCursor(4,Row+23);LCD.print(Q1_FF1);}
if (Row >= -23 && Row+23 <=3){LCD.setCursor(5,Row+23);LCD.print(" Q2=");}
if (Row >= -23 && Row+23 <=3){LCD.setCursor(9,Row+23);LCD.print(Q1_FF2);}
if (Row >= -23 && Row+23 <=3){LCD.setCursor(10,Row+23);LCD.print(" |BIN:");}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(0,Row+24);LCD.print(" Q3=");}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(4,Row+24);LCD.print(Q1_FF3);}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(5,Row+24);LCD.print(" Q4=");}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(9,Row+24);LCD.print(Q1_FF4);}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(11,Row+24);LCD.print(" |[");}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(14,Row+24);LCD.print(Q1_FF4);}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(15,Row+24);LCD.print(Q1_FF3);}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(16,Row+24);LCD.print(Q1_FF2);}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(17,Row+24);LCD.print(Q1_FF1);}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(18,Row+24);LCD.print("]");}
;} else {
//////////////////////////////////////////////////////////////////////////////
if (Row >= -6 && Row+6<=3) {LCD.setCursor(0,Row+6);LCD.print(" [1-Bit Down Cnt] #1");}
if (Row >= -7 && Row+7<=3) {LCD.setCursor(1,Row+7);LCD.print("T=");}
if (Row >= -7 && Row+7<=3) {LCD.setCursor(3,Row+7);LCD.print(XT,BIN);}
if (Row >= -7 && Row+7<=3) {LCD.setCursor(6,Row+7);LCD.print("CLK=");}
if (Row >= -7 && Row+7<=3) {LCD.setCursor(10,Row+7);LCD.print(X1,BIN);}
if (Row >= -7 && Row+7<=3){LCD.setCursor(12,Row+7);LCD.print("!CLR=");}
if (Row >= -7 && Row+7<=3){LCD.setCursor(17,Row+7);LCD.print(XT,BIN);}
if (Row >= -8 && Row+8 <=3){LCD.setCursor(0,Row+8);LCD.print("!Q1=");}
if (Row >= -8 && Row+8 <=3){LCD.setCursor(4,Row+8);LCD.print(Q2_FF1);}
if (Row >= -8 && Row+8 <=3){LCD.setCursor(5,Row+8);LCD.print(" !Q2=");}
if (Row >= -8 && Row+8 <=3){LCD.setCursor(10,Row+8);LCD.print("x");}
if (Row >= -8 && Row+8 <=3){LCD.setCursor(12,Row+8);LCD.print("|BIN:");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(0,Row+9);LCD.print("!Q3=");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(4,Row+9);LCD.print("x");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(5,Row+9);LCD.print(" !Q4=");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(10,Row+9);LCD.print("x");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(11,Row+9);LCD.print(" |[");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(14,Row+9);LCD.print("x");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(15,Row+9);LCD.print("x");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(16,Row+9);LCD.print("x");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(17,Row+9);LCD.print(Q2_FF1);}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(18,Row+9);LCD.print("]");}
//////////////////////////////////////////////////////////////////////////////
if (Row >= -11 && Row+11<=3) {LCD.setCursor(0,Row+11);LCD.print(" [2-Bit Down Cnt] #2");}
if (Row >= -12 && Row+12<=3) {LCD.setCursor(1,Row+12);LCD.print("T=");}
if (Row >= -12 && Row+12<=3) {LCD.setCursor(3,Row+12);LCD.print(XT,BIN);}
if (Row >= -12 && Row+12<=3) {LCD.setCursor(6,Row+12);LCD.print("CLK=");}
if (Row >= -12 && Row+12<=3) {LCD.setCursor(10,Row+12);LCD.print(X1,BIN);}
if (Row >= -12 && Row+12<=3){LCD.setCursor(12,Row+12);LCD.print("!CLR=");}
if (Row >= -12 && Row+12<=3){LCD.setCursor(17,Row+12);LCD.print(XT,BIN);}
if (Row >= -13 && Row+13 <=3){LCD.setCursor(0,Row+13);LCD.print("!Q1=");}
if (Row >= -13 && Row+13 <=3){LCD.setCursor(4,Row+13);LCD.print(Q2_FF1);}
if (Row >= -13 && Row+13 <=3){LCD.setCursor(5,Row+13);LCD.print(" !Q2=");}
if (Row >= -13 && Row+13 <=3){LCD.setCursor(10,Row+13);LCD.print(Q2_FF2);}
if (Row >= -13 && Row+13 <=3){LCD.setCursor(12,Row+13);LCD.print("|BIN:");}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(0,Row+14);LCD.print("!Q3=");}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(4,Row+14);LCD.print("x");}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(5,Row+14);LCD.print(" !Q4=");}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(10,Row+14);LCD.print("x");}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(11,Row+14);LCD.print(" |[");}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(14,Row+14);LCD.print("x");}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(15,Row+14);LCD.print("x");}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(16,Row+14);LCD.print(Q2_FF2);}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(17,Row+14);LCD.print(Q2_FF1);}
if (Row >= -14 && Row+14 <=3){LCD.setCursor(18,Row+14);LCD.print("]");}
//////////////////////////////////////////////////////////////////////////////
if (Row >= -16 && Row+16<=3) {LCD.setCursor(0,Row+16);LCD.print(" [3-Bit Down Cnt] #3");}
if (Row >= -17 && Row+17<=3) {LCD.setCursor(1,Row+17);LCD.print("T=");}
if (Row >= -17 && Row+17<=3) {LCD.setCursor(3,Row+17);LCD.print(XT,BIN);}
if (Row >= -17 && Row+17<=3) {LCD.setCursor(6,Row+17);LCD.print("CLK=");}
if (Row >= -17 && Row+17<=3) {LCD.setCursor(10,Row+17);LCD.print(X1,BIN);}
if (Row >= -17 && Row+17<=3){LCD.setCursor(12,Row+17);LCD.print("!CLR=");}
if (Row >= -17 && Row+17<=3){LCD.setCursor(17,Row+17);LCD.print(XT,BIN);}
if (Row >= -18 && Row+18 <=3){LCD.setCursor(0,Row+18);LCD.print("!Q1=");}
if (Row >= -18 && Row+18 <=3){LCD.setCursor(4,Row+18);LCD.print(Q2_FF1);}
if (Row >= -18 && Row+18 <=3){LCD.setCursor(5,Row+18);LCD.print(" !Q2=");}
if (Row >= -18 && Row+18 <=3){LCD.setCursor(10,Row+18);LCD.print(Q2_FF2);}
if (Row >= -18 && Row+18 <=3){LCD.setCursor(12,Row+18);LCD.print("|BIN:");}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(0,Row+19);LCD.print("!Q3=");}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(4,Row+19);LCD.print(Q2_FF3);}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(5,Row+19);LCD.print(" !Q4=");}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(10,Row+19);LCD.print("x");}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(11,Row+19);LCD.print(" |[");}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(14,Row+19);LCD.print("x");}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(15,Row+19);LCD.print(Q2_FF3);}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(16,Row+19);LCD.print(Q2_FF2);}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(17,Row+19);LCD.print(Q2_FF1);}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(18,Row+19);LCD.print("]");}
///////////////////////////////////////////////////////////////////////////
if (Row >= -21 && Row+21<=3) {LCD.setCursor(0,Row+21);LCD.print(" [4-Bit Down Cnt] #4");}
if (Row >= -22 && Row+22<=3) {LCD.setCursor(1,Row+22);LCD.print("T=");}
if (Row >= -22 && Row+22<=3) {LCD.setCursor(3,Row+22);LCD.print(XT,BIN);}
if (Row >= -22 && Row+22<=3) {LCD.setCursor(6,Row+22);LCD.print("CLK=");}
if (Row >= -22 && Row+22<=3) {LCD.setCursor(10,Row+22);LCD.print(X1,BIN);}
if (Row >= -22 && Row+22<=3){LCD.setCursor(12,Row+22);LCD.print("!CLR=");}
if (Row >= -22 && Row+22<=3){LCD.setCursor(17,Row+22);LCD.print(XT,BIN);}
if (Row >= -23 && Row+23 <=3){LCD.setCursor(0,Row+23);LCD.print("!Q1=");}
if (Row >= -23 && Row+23 <=3){LCD.setCursor(4,Row+23);LCD.print(Q2_FF1);}
if (Row >= -23 && Row+23 <=3){LCD.setCursor(5,Row+23);LCD.print(" !Q2=");}
if (Row >= -23 && Row+23 <=3){LCD.setCursor(10,Row+23);LCD.print(Q2_FF2);}
if (Row >= -23 && Row+23 <=3){LCD.setCursor(12,Row+23);LCD.print("|BIN:");}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(0,Row+24);LCD.print("!Q3=");}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(4,Row+24);LCD.print(Q2_FF3);}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(5,Row+24);LCD.print(" !Q4=");}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(10,Row+24);LCD.print(Q2_FF4);}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(11,Row+24);LCD.print(" |[");}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(14,Row+24);LCD.print(Q2_FF4);}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(15,Row+24);LCD.print(Q2_FF3);}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(16,Row+24);LCD.print(Q2_FF2);}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(17,Row+24);LCD.print(Q2_FF1);}
if (Row >= -24 && Row+24 <=3){LCD.setCursor(18,Row+24);LCD.print("]");}
;}
///////////////////////////////////////////////////////////////////////////////////////
if (Row >= -26 && Row+26<=3) {LCD.setCursor(0,Row+26);LCD.print(" [T- Flip Flop 1] #5");}
if (Row >= -28 && Row+28<=3) {LCD.setCursor(1,Row+28);LCD.print("T1=");}
if (Row >= -28 && Row+28<=3) {LCD.setCursor(4,Row+28);LCD.print(!T1,BIN);}
if (Row >= -28 && Row+28<=3) {LCD.setCursor(6,Row+28);LCD.print("CLK=");}
if (Row >= -28 && Row+28<=3) {LCD.setCursor(10,Row+28);LCD.print(X1,BIN);}
if (Row >= -28 && Row+28<=3){LCD.setCursor(12,Row+28);LCD.print("!CLR=");}
if (Row >= -28 && Row+28<=3){LCD.setCursor(17,Row+28);LCD.print(XT,BIN);}
if (Row >= -29 && Row+29 <=3){LCD.setCursor(0,Row+29);LCD.print(" Q1=");}
if (Row >= -29 && Row+29 <=3){LCD.setCursor(4,Row+29);LCD.print(Q1_FF1);}
if (Row >= -29 && Row+29 <=3){LCD.setCursor(5,Row+29);LCD.print(" !Q1=");}
if (Row >= -29 && Row+29 <=3){LCD.setCursor(10,Row+29);LCD.print(Q2_FF1);}
//////////////////////////////////////////////////////////////////////////////////
if (Row >= -31 && Row+31<=3) {LCD.setCursor(0,Row+31);LCD.print(" [T- Flip Flop 2] #6");}
if (Row >= -33 && Row+33<=3) {LCD.setCursor(1,Row+33);LCD.print("T2=");}
if (Row >= -33 && Row+33<=3) {LCD.setCursor(4,Row+33);LCD.print(!T2,BIN);}
if (Row >= -33 && Row+33<=3) {LCD.setCursor(6,Row+33);LCD.print("CLK=");}
if (Row >= -33 && Row+33<=3) {LCD.setCursor(10,Row+33);LCD.print(X2,BIN);}
if (Row >= -33 && Row+33<=3){LCD.setCursor(12,Row+33);LCD.print("!CLR=");}
if (Row >= -33 && Row+33<=3){LCD.setCursor(17,Row+33);LCD.print(XT,BIN);}
if (Row >= -34 && Row+34 <=3){LCD.setCursor(0,Row+34);LCD.print(" Q2=");}
if (Row >= -34 && Row+34 <=3){LCD.setCursor(4,Row+34);LCD.print(Q1_FF2);}
if (Row >= -34 && Row+34 <=3){LCD.setCursor(5,Row+34);LCD.print(" !Q2=");}
if (Row >= -34 && Row+34 <=3){LCD.setCursor(10,Row+34);LCD.print(Q2_FF2);}
/////////////////////////////////////////////////////////////////////////////////
if (Row >= -36 && Row+36<=3) {LCD.setCursor(0,Row+36);LCD.print(" [T- Flip Flop 3] #7");}
if (Row >= -38 && Row+38<=3) {LCD.setCursor(1,Row+38);LCD.print("T3=");}
if (Row >= -38 && Row+38<=3) {LCD.setCursor(4,Row+38);LCD.print(!T3,BIN);}
if (Row >= -38 && Row+38<=3) {LCD.setCursor(6,Row+38);LCD.print("CLK=");}
if (Row >= -38 && Row+38<=3) {LCD.setCursor(10,Row+38);LCD.print(X3,BIN);}
if (Row >= -38 && Row+38<=3){LCD.setCursor(12,Row+38);LCD.print("!CLR=");}
if (Row >= -38 && Row+38<=3){LCD.setCursor(17,Row+38);LCD.print(XT,BIN);}
if (Row >= -39 && Row+39 <=3){LCD.setCursor(0,Row+39);LCD.print(" Q3=");}
if (Row >= -39 && Row+39 <=3){LCD.setCursor(4,Row+39);LCD.print(Q1_FF3);}
if (Row >= -39 && Row+39 <=3){LCD.setCursor(5,Row+39);LCD.print(" !Q3=");}
if (Row >= -39 && Row+39 <=3){LCD.setCursor(10,Row+39);LCD.print(Q2_FF3);}
//////////////////////////////////////////////////////////////////////////////////
if (Row >= -41 && Row+41<=3) {LCD.setCursor(0,Row+41);LCD.print(" [T- Flip Flop 4] #8");}
if (Row >= -43 && Row+43<=3) {LCD.setCursor(1,Row+43);LCD.print("T4=");}
if (Row >= -43 && Row+43<=3) {LCD.setCursor(4,Row+43);LCD.print(!T4,BIN);}
if (Row >= -43 && Row+43<=3) {LCD.setCursor(6,Row+43);LCD.print("CLK=");}
if (Row >= -43 && Row+43<=3) {LCD.setCursor(10,Row+43);LCD.print(X4,BIN);}
if (Row >= -43 && Row+43<=3){LCD.setCursor(12,Row+43);LCD.print("!CLR=");}
if (Row >= -43 && Row+43<=3){LCD.setCursor(17,Row+43);LCD.print(XT,BIN);}
if (Row >= -44 && Row+44 <=3){LCD.setCursor(0,Row+44);LCD.print(" Q4=");}
if (Row >= -44 && Row+44 <=3){LCD.setCursor(4,Row+44);LCD.print(Q1_FF4);}
if (Row >= -44 && Row+44 <=3){LCD.setCursor(5,Row+44);LCD.print(" !Q4=");}
if (Row >= -44 && Row+44 <=3){LCD.setCursor(10,Row+44);LCD.print(Q2_FF4);}
/////////////////////////////////////////////////////////////////////////////////////////
if (Row >= -46 && Row+46<=3){LCD.setCursor(0,Row+46);LCD.print(" ==[LAB Ending]== ");}
if (Row >= -47 && Row+47<=3){LCD.setCursor(0,Row+47);LCD.print(" Press Button ");}
if (Row >= -47 && Row+48<=3){LCD.setCursor(0,Row+48);LCD.print(" [LCD PgUp] ");}
if (Row >= -49 && Row+49<=3){LCD.setCursor(0,Row+49);LCD.print(" To See I/Os Status ");}
if (Row == -46) {delay (1000);} else {;}
if (Row >= -46 && Row+46<=3){LCD.setCursor(0,Row+46);LCD.print(" ==[LAB Ending]== ");}
if (Row >= -47 && Row+47<=3){LCD.setCursor(0,Row+47);LCD.print(" Press Button ");}
if (Row >= -47 && Row+48<=3){LCD.setCursor(0,Row+48);LCD.print(" ");}
if (Row >= -49 && Row+49<=3){LCD.setCursor(0,Row+49);LCD.print(" To See I/Os Status ");}
if (Row == -46) {delay (500);} else {;}
if (Row >= -46 && Row+46<=3){LCD.setCursor(0,Row+46);LCD.print(" ==[LAB Ending]== ");}
if (Row >= -47 && Row+47<=3){LCD.setCursor(0,Row+47);LCD.print(" Press Button ");}
if (Row >= -47 && Row+48<=3){LCD.setCursor(0,Row+48);LCD.print(" [LCD PgUp] ");}
if (Row >= -49 && Row+49<=3){LCD.setCursor(0,Row+49);LCD.print(" To See I/Os Status ");}
if ( Row == 4)
{LCD.clear();
LCD.setCursor(0,0);LCD.print(" This Board Done By ");
LCD.setCursor(0,1);LCD.print(" Asst Prof. ");
LCD.setCursor(0,2);LCD.print("Dr. AHMED ATEYA ALLU");
LCD.setCursor(0,3);LCD.print(" APRIL - 2023 ");
delay (2000); Row = -1;}
}
void ISR_BDn ()
{
if (MF == 0 && Row >-46){Val = 5;Row = Row - Val;Serial.println("UP");MF= 1;}
else {;}
}
void ISR_BUp ()
{
if (MF == 0 && Row <=-1){Val = 5;Row = Row + Val;Serial.println("Down");MF= 1;}
else {;}
}