void setup() {
volatile char *dirf, *dirk, *dira, *dirc;
dirf = 0x30;dirk = 0x107;dira = 0x21;dirc = 0x27;
*dirf = 0x0f;*dirk = 0x00;*dira = 0xff;*dirc = 0x0f;
}
void loop() {
mul();
}
void mul() {
volatile char *outf, *outa, *outc;
volatile char *ink;
outf = 0x31;outa = 0x22;outc = 0x28;ink = 0x106;
volatile char numbers[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
volatile long i, j, x, num1 = 0, num2 = 0, num, cs = 0, cs1 = 0, pdt = 0;
volatile int digit1, digit2, digit3, digit4, mul = 0, equal = 0,dn=0;
while (1) {
for (i = 0; i < 4; i++) {
*outf = 1 << i;
x = *ink;
if (x != 0) {//check if anything is pressed
// Find value entered in keypad
if (*outf == 1 && x == 1) num = 1;
else if (*outf == 1 && x == 2) num = 2;
else if (*outf == 1 && x == 4) num = 3;
else if (*outf == 2 && x == 1) num = 4;
else if (*outf == 2 && x == 2) num = 5;
else if (*outf == 2 && x == 4) num = 6;
else if (*outf == 4 && x == 1) num = 7;
else if (*outf == 4 && x == 2) num = 8;
else if (*outf == 4 && x == 4) num = 9;
else if (*outf == 8 && x == 2) num = 0;
//Multiply Button
if (*outf == 4 && x == 8) {
cs = num1;
mul++;
}
//EQUAL Function
if (*outf == 8 && x == 4) {
if(dn == 2){
cs1 = num2 % 10;
}
else if(dn == 3){
cs1 = num2 % 100;
}
else if(dn == 4){
cs1 = num2 % 1000;
}
else if(dn == 5){
cs1 = num2 % 10000;
}
equal++;
}
// FINAL RESULT AND DISPLAY
if (mul != 0 && equal != 0) {
pdt = cs*cs1; // Calculate the profuct
// Display the result on a 7-segment display
if (pdt >= 1000&&pdt<10000) {
digit1 = pdt / 1000;
digit2 = (pdt % 1000) / 100;
digit3 = (pdt % 100) / 10;
digit4 = pdt % 10;
//DISPLAY
*outc = 0x01;
*outa = numbers[digit1];
for (j = 0; j < 200000; j++);
*outc = 0x02;
*outa = numbers[digit2];
for (j = 0; j < 200000; j++);
*outc = 0x04;
*outa = numbers[digit3];
for (j = 0; j < 200000; j++);
*outc = 0x08;
*outa = numbers[digit4];
for (j = 0; j < 200000; j++);
}
else if (pdt>=100 && pdt < 1000) {
digit1 = pdt / 100;
digit2 = (pdt % 100) / 10;
digit3 = pdt % 10;
//DISPLAY
*outc = 0x01;
*outa = numbers[digit1];
for (j = 0; j < 200000; j++);
*outc = 0x02;
*outa = numbers[digit2];
for (j = 0; j < 200000; j++);
*outc = 0x04;
*outa = numbers[digit3];
for (j = 0; j < 200000; j++);
}
else if(pdt>=10&&pdt<100){
digit1 = pdt/10;
digit2 = pdt %10;
*outc = 0x01;
*outa = numbers[digit1];
for (j = 0; j < 200000; j++);
*outc = 0x02;
*outa = numbers[digit2];
for (j = 0; j < 200000; j++);
}
else if(pdt<10){
digit1 = pdt;
*outc = 0x01;
*outa = numbers[digit1];
for (j = 0; j < 200000; j++);
}
else if(pdt>9999){
*outc = 0x0F;
*outa = 0x86;
for (j = 0; j < 200000; j++);
}
//reset
num1 = 0; num2 = 0;
mul =0; equal =0;dn=0;
break;
}
// Display pressed key digit
*outc = 0x01;
*outa = numbers[num];
for (j = 0; j < 200000; j++);
// Store and update num1 &num2
if (mul!=0){
num2 = (num2 * 10) + num;
dn++;
}
num1 = (num1 * 10) + num;
}
}
}
}