#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27,20,4);
// Inputs setting:
int X1=0,X2=0,X3=0,X4=0,X5=0,X6=0;
int X7=0,X8=0,X9=0,X10=0,X11=0,X12=0;
int X13=0,X14=0,X15=0,X16=0,X17=0,X18=0;
const byte interruptPin1 = 2;
const byte interruptPin2 = 3;
volatile int Row = -1;
volatile int MF =0;
volatile int Val = 0;
int A_AND1=22,B_AND1=23,Y_AND1;
int A_AND2=26,B_AND2=27,Y_AND2;
int A_AND3=30,B_AND3=31,Y_AND3;
int A_OR1=34,B_OR1=35,Y_OR1;
int A_OR2=38,B_OR2=39,Y_OR2;
int A_OR3=42,B_OR3=43,Y_OR3;
int A_NOT1=45,Y_NOT1;
int A_NOT2=47,Y_NOT2;
int A_NOT3=49,Y_NOT3;
int A_NOT4=46,Y_NOT4;
int A_NOT5=48,Y_NOT5;
int A_NOT6=50,Y_NOT6;
void setup() {
Serial.begin(9600);
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 (1000);LCD.setCursor(0,2);LCD.print(" AND OR NOR NAND & ");
delay (150);LCD.setCursor(0,3);LCD.print(" NOT Gates Board ");
delay (5000);LCD.clear();
// IOs Configuration setting:
pinMode(A_AND1,INPUT_PULLUP);pinMode(B_AND1,INPUT_PULLUP);pinMode(A0,OUTPUT);
pinMode(A_AND2,INPUT_PULLUP);pinMode(B_AND2,INPUT_PULLUP);pinMode(A1,OUTPUT);
pinMode(A_AND3,INPUT_PULLUP);pinMode(B_AND3,INPUT_PULLUP);pinMode(4,OUTPUT);
pinMode(A_OR1,INPUT_PULLUP);pinMode(B_OR1,INPUT_PULLUP);pinMode(5,OUTPUT);
pinMode(A_OR2,INPUT_PULLUP);pinMode(B_OR2,INPUT_PULLUP);pinMode(6,OUTPUT);
pinMode(A_OR3,INPUT_PULLUP);pinMode(B_OR3,INPUT_PULLUP);pinMode(7,OUTPUT);
pinMode(A_NOT1,INPUT_PULLUP);pinMode(8,OUTPUT);
pinMode(A_NOT2,INPUT_PULLUP);pinMode(9,OUTPUT);
pinMode(A_NOT3,INPUT_PULLUP);pinMode(10,OUTPUT);
pinMode(A_NOT4,INPUT_PULLUP);pinMode(11,OUTPUT);
pinMode(A_NOT5,INPUT_PULLUP);pinMode(12,OUTPUT);
pinMode(A_NOT6,INPUT_PULLUP);pinMode(13,OUTPUT);
pinMode(2,INPUT_PULLUP);
pinMode(3,INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin1),ISR_BDn,LOW);
attachInterrupt(digitalPinToInterrupt(interruptPin2),ISR_BUp,LOW);
}
void loop() {
//====== [ AND Gate (1) ] ======//
if (digitalRead(A_AND1) == HIGH){X1 = 0;}else {X1 = 1;}
if (digitalRead(B_AND1) == HIGH){X2 = 0;}else {X2 = 1;}
// Bitwise Operator of AND Gate1
Y_AND1 = (X1 && X2);
if (Y_AND1 == 1){digitalWrite(A0,LOW);}else {digitalWrite(A0,HIGH);}
//====== [ AND Gate (2) ] ======//
if (digitalRead(A_AND2) == HIGH){X3 = 0;}else {X3 = 1;}
if (digitalRead(B_AND2) == HIGH){X4 = 0;}else {X4 = 1;}
// Bitwise Operator of AND Gate2
Y_AND2 = (X3 && X4);
if (Y_AND2 == 1){digitalWrite(A1,LOW);}else {digitalWrite(A1,HIGH);}
//====== [ AND Gate (3) ] ======//
if (digitalRead(A_AND3) == HIGH){X5 = 0;}else {X5 = 1;}
if (digitalRead(B_AND3) == HIGH){X6 = 0;}else {X6 = 1;}
// Bitwise Operator of AND Gate3
Y_AND3 = (X5 && X6);
if (Y_AND3 == 1){digitalWrite(4,LOW);}else {digitalWrite(4,HIGH);}
//====== [ OR Gate (1) ] ======//
if (digitalRead(A_OR1) == HIGH){X7 = 0;}else {X7 = 1;}
if (digitalRead(B_OR1) == HIGH){X8 = 0;}else {X8 = 1;}
// Bitwise Operator of OR Gate1
Y_OR1 = (X7 || X8);
if (Y_OR1 == 1){digitalWrite(5,LOW);}else {digitalWrite(5,HIGH);}
//====== [ OR Gate (2) ] ======//
if (digitalRead(A_OR2) == HIGH){X9 = 0;}else {X9 = 1;}
if (digitalRead(B_OR2) == HIGH){X10 = 0;}else {X10= 1;}
// Bitwise Operator of OR Gate2
Y_OR2 = (X9 || X10);
if (Y_OR2 == 1){digitalWrite(6,LOW);}else {digitalWrite(6,HIGH);}
//====== [ OR Gate (3) ] ======//
if (digitalRead(A_OR3) == HIGH){X11 = 0;}else {X11 = 1;}
if (digitalRead(B_OR3) == HIGH){X12 = 0;}else {X12 = 1;}
// Bitwise Operator of OR Gate3
Y_OR3 = (X11 || X12);
if (Y_OR3 == 1){digitalWrite(7,LOW);}else {digitalWrite(7,HIGH);}
//====== [ NOT Gate (1) ] ======//
if (digitalRead(A_NOT1) == HIGH){X13 = 0;}else {X13 = 1;}
// Bitwise Operator of NOT Gate1
Y_NOT1 = !(X13);
if (Y_NOT1 == 1){digitalWrite(8,LOW);}else {digitalWrite(8,HIGH);}
//====== [ NOT Gate (2) ] ======//
if (digitalRead(A_NOT2) == HIGH){X14 = 0;}else {X14 = 1;}
// Bitwise Operator of NOT Gate2
Y_NOT2 = !(X14);
if (Y_NOT2 == 1){digitalWrite(9,LOW);}else {digitalWrite(9,HIGH);}
//====== [ NOT Gate (3) ] ======//
if (digitalRead(A_NOT3) == HIGH){X15 = 0;}else {X15 = 1;}
// Bitwise Operator of NOT Gate3
Y_NOT3 = !(X15);
if (Y_NOT3 == 1){digitalWrite(10,LOW);}else {digitalWrite(10,HIGH);}
//====== [ NOT Gate (4) ] ======//
if (digitalRead(A_NOT4) == HIGH){X16 = 0;}else {X16 = 1;}
// Bitwise Operator of NOT Gate4
Y_NOT4 = !(X16);
if (Y_NOT4 == 1){digitalWrite(11,LOW);}else {digitalWrite(11,HIGH);}
//====== [ NOT Gate (5) ] ======//
if (digitalRead(A_NOT5) == HIGH){X17 = 0;}else {X17 = 1;}
// Bitwise Operator of NOT Gate1
Y_NOT5 = !(X17);
if (Y_NOT5 == 1){digitalWrite(12,LOW);}else {digitalWrite(12,HIGH);}
//====== [ NOT Gate (6) ] ======//
if (digitalRead(A_NOT6) == HIGH){X18 = 0;}else {X18 = 1;}
// Bitwise Operator of NOT Gate6
Y_NOT6 = !(X18);
if (Y_NOT6 == 1){digitalWrite(13,LOW);}else {digitalWrite(13,HIGH);}
//////////////////////////////////////////////////////////////////////
MF = 0;
Serial.print("Row = ");Serial.println(Row);
//Serial.print("MF = ");Serial.println(MF);
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(" [Down LCD Row] ");}
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(" [Down LCD Row] ");}
if (Row >= -4 && Row+4<=3){LCD.setCursor(0,Row+4);LCD.print(" To See I/Os Status ");}
///////////////////////////////////////////////////////////////////////////////////////
if (Row >= -6 && Row+6<=3){LCD.setCursor(0,Row+6);LCD.print(" [I/O AND Gates] #1 ");}
if (Row >= -7 && Row+7<=3){LCD.setCursor(0,Row+7);LCD.print(" A1=");}
if (Row >= -7 && Row+7<=3){LCD.setCursor(4,Row+7);LCD.print(X1,BIN);}
if (Row >= -7 && Row+7<=3){LCD.setCursor(6,Row+7);LCD.print("& B1=");}
if (Row >= -7 && Row+7<=3){LCD.setCursor(11,Row+7);LCD.print(X2,BIN);}
if (Row >= -7 && Row+7<=3){LCD.setCursor(12,Row+7);LCD.print(" : Y1=");}
if (Row >= -7 && Row+7<=3){LCD.setCursor(18,Row+7);LCD.print(Y_AND1);}
if (Row >= -8 && Row+8 <=3){LCD.setCursor(0,Row+8);LCD.print(" A2=");}
if (Row >= -8 && Row+8 <=3){LCD.setCursor(4,Row+8);LCD.print(X3,BIN);}
if (Row >= -8 && Row+8 <=3){LCD.setCursor(6,Row+8);LCD.print("& B2=");}
if (Row >= -8 && Row+8 <=3){LCD.setCursor(11,Row+8);LCD.print(X4,BIN);}
if (Row >= -8 && Row+8 <=3){LCD.setCursor(12,Row+8);LCD.print(" : Y2=");}
if (Row >= -8 && Row+8 <=3){LCD.setCursor(18,Row+8);LCD.print(Y_AND2);}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(0,Row+9);LCD.print(" A3=");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(4,Row+9);LCD.print(X5,BIN);}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(6,Row+9);LCD.print("& B3=");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(11,Row+9);LCD.print(X6,BIN);}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(12,Row+9);LCD.print(" : Y3=");}
if (Row >= -9 && Row+9 <=3){LCD.setCursor(18,Row+9);LCD.print(Y_AND3);}
///////////////////////////////////////////////////////////////////////////////////////
if(Row >= -11 && Row+11<=3){LCD.setCursor(0,Row+11);LCD.print(" [I/O OR Gates] #2");}
if (Row >= -12 && Row+12<=3){LCD.setCursor(0,Row+12);LCD.print(" A1=");}
if (Row >= -12 && Row+12<=3){LCD.setCursor(4,Row+12);LCD.print(X7,BIN);}
if (Row >= -12 && Row+12<=3){LCD.setCursor(6,Row+12);LCD.print("| B1=");}
if (Row >= -12 && Row+12<=3){LCD.setCursor(11,Row+12);LCD.print(X8,BIN);}
if (Row >= -12 && Row+12<=3){LCD.setCursor(12,Row+12);LCD.print(" : Y1=");}
if (Row >= -12 && Row+12<=3){LCD.setCursor(18,Row+12);LCD.print(Y_OR1,BIN);}
if (Row >= -13 && Row+13<=3){LCD.setCursor(0,Row+13);LCD.print(" A2=");}
if (Row >= -13 && Row+13<=3){LCD.setCursor(4,Row+13);LCD.print(X9,BIN);}
if (Row >= -13 && Row+13<=3){LCD.setCursor(6,Row+13);LCD.print("| B2=");}
if (Row >= -13 && Row+13<=3){LCD.setCursor(11,Row+13);LCD.print(X10,BIN);}
if (Row >= -13 && Row+13<=3){LCD.setCursor(12,Row+13);LCD.print(" : Y2=");}
if (Row >= -13 && Row+13<=3){LCD.setCursor(18,Row+13);LCD.print(Y_OR2,BIN);}
if (Row >= -14 && Row+14<=3){LCD.setCursor(0,Row+14);LCD.print(" A3=");}
if (Row >= -14 && Row+14<=3){LCD.setCursor(4,Row+14);LCD.print(X11,BIN);}
if (Row >= -14 && Row+14<=3){LCD.setCursor(6,Row+14);LCD.print("| B3=");}
if (Row >= -14 && Row+14<=3){LCD.setCursor(11,Row+14);LCD.print(X12,BIN);}
if (Row >= -14 && Row+14<=3){LCD.setCursor(12,Row+14);LCD.print(" : Y3=");}
if (Row >= -14 && Row+14<=3){LCD.setCursor(18,Row+14);LCD.print(Y_OR3,BIN);}
///////////////////////////////////////////////////////////////////////////////////////
if (Row >= -16 && Row+16<=3){LCD.setCursor(0,Row+16);LCD.print(" [I/O NAND Gates] #3");}
if (Row >= -17 && Row+17<=3) {LCD.setCursor(0,Row+17);LCD.print(" A1=");}
if (Row >= -17 && Row+17<=3) {LCD.setCursor(4,Row+17);LCD.print(X1,BIN);}
if (Row >= -17 && Row+17<=3) {LCD.setCursor(6,Row+17);LCD.print("& B1=");}
if (Row >= -17 && Row+17<=3) {LCD.setCursor(11,Row+17);LCD.print(X2,BIN);}
if (Row >= -17 && Row+17<=3){LCD.setCursor(12,Row+17);LCD.print(" ! Y1=");}
if (Row >= -17 && Row+17<=3){LCD.setCursor(18,Row+17);LCD.print(Y_NOT1);}
if (Row >= -18 && Row+18 <=3){LCD.setCursor(0,Row+18);LCD.print(" A2=");}
if (Row >= -18 && Row+18 <=3){LCD.setCursor(4,Row+18);LCD.print(X3,BIN);}
if (Row >= -18 && Row+18 <=3){LCD.setCursor(6,Row+18);LCD.print("& B2=");}
if (Row >= -18 && Row+18 <=3){LCD.setCursor(11,Row+18);LCD.print(X4,BIN);}
if (Row >= -18 && Row+18 <=3){LCD.setCursor(12,Row+18);LCD.print(" ! Y2=");}
if (Row >= -18 && Row+18 <=3){LCD.setCursor(18,Row+18);LCD.print(Y_NOT2);}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(0,Row+19);LCD.print(" A3=");}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(4,Row+19);LCD.print(X5,BIN);}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(6,Row+19);LCD.print("& B3=");}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(11,Row+19);LCD.print(X6,BIN);}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(12,Row+19);LCD.print(" ! Y3=");}
if (Row >= -19 && Row+19 <=3){LCD.setCursor(18,Row+19);LCD.print(Y_NOT3);}
//////////////////////////////////////////////////////////////////////////////////////
if (Row >= -21 && Row+21<=3){LCD.setCursor(0,Row+21);LCD.print(" [I/O NOR Gates] #4");}
if (Row >= -22 && Row+22<=3){LCD.setCursor(0,Row+22);LCD.print(" A1=");}
if (Row >= -22 && Row+22<=3){LCD.setCursor(4,Row+22);LCD.print(X7,BIN);}
if (Row >= -22 && Row+22<=3){LCD.setCursor(6,Row+22);LCD.print("| B1=");}
if (Row >= -22 && Row+22<=3){LCD.setCursor(11,Row+22);LCD.print(X8,BIN);}
if (Row >= -22 && Row+22<=3){LCD.setCursor(12,Row+22);LCD.print(" ! Y1=");}
if (Row >= -22 && Row+22<=3){LCD.setCursor(18,Row+22);LCD.print(Y_NOT4,BIN);}
if (Row >= -23 && Row+23<=3){LCD.setCursor(0,Row+23);LCD.print(" A2=");}
if (Row >= -23 && Row+23<=3){LCD.setCursor(4,Row+23);LCD.print(X9,BIN);}
if (Row >= -23 && Row+23<=3){LCD.setCursor(6,Row+23);LCD.print("| B2=");}
if (Row >= -23 && Row+23<=3){LCD.setCursor(11,Row+23);LCD.print(X10,BIN);}
if (Row >= -23 && Row+23<=3){LCD.setCursor(12,Row+23);LCD.print(" ! Y2=");}
if (Row >= -23 && Row+23<=3){LCD.setCursor(18,Row+23);LCD.print(Y_NOT5,BIN);}
if (Row >= -24 && Row+24<=3){LCD.setCursor(0,Row+24);LCD.print(" A3=");}
if (Row >= -24 && Row+24<=3){LCD.setCursor(4,Row+24);LCD.print(X11,BIN);}
if (Row >= -24 && Row+24<=3){LCD.setCursor(6,Row+24);LCD.print("| B3=");}
if (Row >= -24 && Row+24<=3){LCD.setCursor(11,Row+24);LCD.print(X12,BIN);}
if (Row >= -24 && Row+24<=3){LCD.setCursor(12,Row+24);LCD.print(" ! Y3=");}
if (Row >= -24 && Row+24<=3){LCD.setCursor(18,Row+24);LCD.print(Y_NOT6,BIN);}
///////////////////////////////////////////////////////////////////////////////////////
if (Row >= -26 && Row+26 <=3){LCD.setCursor(0,Row+26);LCD.print(" [I/O NOT Gates] #5");}
if (Row >= -27 && Row+27<=3){LCD.setCursor(0,Row+27);LCD.print(" X1= ");}
if (Row >= -27 && Row+27<=3){LCD.setCursor(6,Row+27);LCD.print(X13,BIN);}
if (Row >= -27 && Row+27<=3){LCD.setCursor(7,Row+27);LCD.print(" :!(X1)=");}
if (Row >= -27 && Row+27<=3){LCD.setCursor(15,Row+27);LCD.print(Y_NOT1,BIN);}
if (Row >= -28 && Row+28<=3){LCD.setCursor(0,Row+28);LCD.print(" X2= ");}
if (Row >= -28 && Row+28<=3){LCD.setCursor(6,Row+28);LCD.print(X14,BIN);}
if (Row >= -28 && Row+28<=3){LCD.setCursor(7,Row+28);LCD.print(" :!(X2)=");}
if (Row >= -28 && Row+28<=3){LCD.setCursor(15,Row+28);LCD.print(Y_NOT2,BIN);}
if (Row >= -29 && Row+29<=3){LCD.setCursor(0,Row+29);LCD.print(" X3= ");}
if (Row >= -29 && Row+29<=3){LCD.setCursor(6,Row+29);LCD.print(X15,BIN);}
if (Row >= -29 && Row+29<=3){LCD.setCursor(7,Row+29);LCD.print(" :!(X3)=");}
if (Row >= -29 && Row+29<=3){LCD.setCursor(15,Row+29);LCD.print(Y_NOT3,BIN);}
///////////////////////////////////////////////////////////////////////////////////////
if (Row >= -31 && Row+31 <=3){LCD.setCursor(0,Row+31);LCD.print(" [I/O NOT Gates] #6");}
if (Row >= -32 && Row+32<=3){LCD.setCursor(0,Row+32);LCD.print(" X4= ");}
if (Row >= -32 && Row+32<=3){LCD.setCursor(6,Row+32);LCD.print(X16,BIN);}
if (Row >= -32 && Row+32<=3){LCD.setCursor(7,Row+32);LCD.print(" :!(X4)=");}
if (Row >= -32 && Row+32<=3){LCD.setCursor(15,Row+32);LCD.print(Y_NOT4,BIN);}
if (Row >= -33 && Row+33<=3){LCD.setCursor(0,Row+33);LCD.print(" X5= ");}
if (Row >= -33 && Row+33<=3){LCD.setCursor(6,Row+33);LCD.print(X17,BIN);}
if (Row >= -33 && Row+33<=3){LCD.setCursor(7,Row+33);LCD.print(" :!(X5)=");}
if (Row >= -33 && Row+33<=3){LCD.setCursor(15,Row+33);LCD.print(Y_NOT5,BIN);}
if (Row >= -34 && Row+34<=3){LCD.setCursor(0,Row+34);LCD.print(" X6= ");}
if (Row >= -34 && Row+34<=3){LCD.setCursor(6,Row+34);LCD.print(X18,BIN);}
if (Row >= -34 && Row+34<=3){LCD.setCursor(7,Row+34);LCD.print(" :!(X6)=");}
if (Row >= -34 && Row+34<=3){LCD.setCursor(15,Row+34);LCD.print(Y_NOT6,BIN);}
////////////////////////////////////////////////////////////////////////////////////
if (Row >= -36 && Row+36<=3){LCD.setCursor(0,Row+36);LCD.print(" ==[LAB Ending]== ");}
if (Row >= -37 && Row+37<=3){LCD.setCursor(0,Row+37);LCD.print(" Press Button ");}
if (Row >= -38 && Row+38<=3){LCD.setCursor(0,Row+38);LCD.print(" [UP LCD Row] ");}
if (Row >= -39 && Row+39<=3){LCD.setCursor(0,Row+39);LCD.print(" To See I/Os Status ");}
if (Row == -36) {delay (1000);} else {;}
if (Row >= -36 && Row+36<=3){LCD.setCursor(0,Row+36);LCD.print(" ==[LAB Ending]== ");}
if (Row >= -37 && Row+37<=3){LCD.setCursor(0,Row+37);LCD.print(" Press Button ");}
if (Row >= -38 && Row+38<=3){LCD.setCursor(0,Row+38);LCD.print(" ");}
if (Row >= -39 && Row+39<=3){LCD.setCursor(0,Row+39);LCD.print(" To See I/Os Status ");}
if (Row == -36) {delay (500);} else {;}
if (Row >= -36 && Row+36<=3){LCD.setCursor(0,Row+36);LCD.print(" ==[LAB Ending]== ");}
if (Row >= -37 && Row+37<=3){LCD.setCursor(0,Row+37);LCD.print(" Press Button ");}
if (Row >= -38 && Row+38<=3){LCD.setCursor(0,Row+38);LCD.print(" [UP LCD Row] ");}
if (Row >= -39 && Row+39<=3){LCD.setCursor(0,Row+39);LCD.print(" To See I/Os Status ");}
//// COPYRIGHT /////
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 >-35){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 {;}
}