#include "core.h"
short num1, num2, result;
char dig1, dig2, operation1, operation2;
char tempx, tempy, i;
void setup() {
initPort('F', "OUTPUT");
initPort('K', "OUTPUT");
initPort('C', "OUTPUT");
initPort('A', "INPUT");
}
void loop() {
dig1 = keypad_select();
num1 = convert_symbol_to_number(dig1);
while ((dig1 != '+') || (dig1 != '-') || (dig1 != '*') || (dig1 != '/')) {
dig1 = convert_symbol_to_number(dig1);
DisplayLogic("one digit display");
tempx = sevenSegment(dig1);
output(tempx);
delay_ms(150);
dig1 = keypad_select();
if (is_numeric(dig1) == 1) {
num1 *= 10;
num1 += convert_symbol_to_number(dig1);
} else {
break;
}
}
operation1 = keypad_select();
DisplayLogic("clear display");
delay_ms(150);
dig2 = keypad_select();
num2 = convert_symbol_to_number(dig2);
while ((dig2 != '+') || (dig2 != '-') || (dig2 != '*') || (dig2 != '/')) {
dig2 = convert_symbol_to_number(dig2);
DisplayLogic("one digit display");
tempx = sevenSegment(dig2);
output(tempx);
delay_ms(150);
dig2 = keypad_select();
if (is_numeric(dig2) == 1) {
num2 *= 10;
num2 += convert_symbol_to_number(dig2);
} else {
break;
}
}
operation2 = keypad_select();
DisplayLogic("clear display");
delay_ms(150);
if (operation1 == '+') {
if (operation2 == '=') {
result = num1 + num2;
if (result < 10) {
DisplayLogic("one digit display");
tempx = sevenSegment(result);
output(tempx);
delay_ms(150);
} else if (result >= 10) {
if (result < 100) {
for (i = 0; i < 5; i++) {
DisplayLogic("one digit display");
tempy = find_desired_digit(result, 1);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("tenth digit display");
tempy = find_desired_digit(result, 2);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("clear display");
}
} else if (result >= 100) {
if (result < 1000) {
for (i = 0; i < 5; i++) {
DisplayLogic("one digit display");
tempy = find_desired_digit(result, 1);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("tenth digit display");
tempy = find_desired_digit(result, 2);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("hundreth digit display");
tempy = find_desired_digit(result, 3);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("clear display");
}
} else if (result >= 1000) {
if (result < 10000) {
for (i = 0; i < 5; i++) {
DisplayLogic("one digit display");
tempy = find_desired_digit(result, 1);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("tenth digit display");
tempy = find_desired_digit(result, 2);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("hundreth digit display");
tempy = find_desired_digit(result, 3);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("thousands digit display");
tempy = find_desired_digit(result, 4);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("clear display");
}
} else if (result >= 10000) {
DisplayLogic("four digit display");
tempx = sevenSegment('e');
output(tempx);
}
}
}
}
}
} else if (operation1 == '-') {
if (operation2 == '=') {
result = num1 - num2;
if (result >= 0) {
if (result < 10) {
DisplayLogic("one digit display");
tempx = sevenSegment(result);
output(tempx);
delay_ms(150);
} else if (result >= 10) {
if (result < 100) {
for (i = 0; i < 5; i++) {
DisplayLogic("one digit display");
tempy = find_desired_digit(result, 1);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("tenth digit display");
tempy = find_desired_digit(result, 2);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("clear display");
}
} else if (result >= 100) {
if (result < 1000) {
for (i = 0; i < 5; i++) {
DisplayLogic("one digit display");
tempy = find_desired_digit(result, 1);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("tenth digit display");
tempy = find_desired_digit(result, 2);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("hundreth digit display");
tempy = find_desired_digit(result, 3);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("clear display");
}
} else if (result >= 1000) {
if (result < 10000) {
for (i = 0; i < 5; i++) {
DisplayLogic("one digit display");
tempy = find_desired_digit(result, 1);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("tenth digit display");
tempy = find_desired_digit(result, 2);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("hundreth digit display");
tempy = find_desired_digit(result, 3);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("thousands digit display");
tempy = find_desired_digit(result, 4);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("clear display");
}
} else if (result >= 10000) {
DisplayLogic("four digit display");
tempx = sevenSegment('e');
output(tempx);
}
}
}
}
} else if (result < 0) {
result = result * (-1);
if (result < 10) {
for (i = 0; i < 5; i++) {
DisplayLogic("one digit display");
tempx = sevenSegment(result);
output(tempx);
delay_ms(70);
DisplayLogic("tenth digit display");
tempx = sevenSegment('-');
output(tempx);
delay_ms(70);
DisplayLogic("clear display");
}
} else if (result >= 10) {
if (result < 100) {
for (i = 0; i < 5; i++) {
DisplayLogic("one digit display");
tempy = find_desired_digit(result, 1);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("tenth digit display");
tempy = find_desired_digit(result, 2);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("hundreth digit display");
tempx = sevenSegment('-');
output(tempx);
delay_ms(70);
DisplayLogic("clear display");
}
} else if (result >= 100) {
if (result < 1000) {
for (i = 0; i < 5; i++) {
DisplayLogic("one digit display");
tempy = find_desired_digit(result, 1);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(50);
DisplayLogic("tenth digit display");
tempy = find_desired_digit(result, 2);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(50);
DisplayLogic("hundreth digit display");
tempy = find_desired_digit(result, 3);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(50);
DisplayLogic("thousands digit display");
tempx = sevenSegment('-');
output(tempx);
delay_ms(50);
DisplayLogic("clear display");
}
} else if (result >= 1000) {
DisplayLogic("four digit display");
tempx = sevenSegment('e');
output(tempx);
}
}
}
}
}
} else if (operation1 == '*') {
if (operation2 == '=') {
result = num1 * num2;
if (result < 10) {
DisplayLogic("one digit display");
tempx = sevenSegment(result);
output(tempx);
delay_ms(150);
} else if (result >= 10) {
if (result < 100) {
for (i = 0; i < 5; i++) {
DisplayLogic("one digit display");
tempy = find_desired_digit(result, 1);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("tenth digit display");
tempy = find_desired_digit(result, 2);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("clear display");
}
} else if (result >= 100) {
if (result < 1000) {
for (i = 0; i < 5; i++) {
DisplayLogic("one digit display");
tempy = find_desired_digit(result, 1);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("tenth digit display");
tempy = find_desired_digit(result, 2);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("hundreth digit display");
tempy = find_desired_digit(result, 3);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("clear display");
}
} else if (result >= 1000) {
if (result < 10000) {
for (i = 0; i < 5; i++) {
DisplayLogic("one digit display");
tempy = find_desired_digit(result, 1);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("tenth digit display");
tempy = find_desired_digit(result, 2);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("hundreth digit display");
tempy = find_desired_digit(result, 3);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("thousands digit display");
tempy = find_desired_digit(result, 4);
tempx = sevenSegment(tempy);
output(tempx);
delay_ms(70);
DisplayLogic("clear display");
}
} else if (result >= 10000) {
DisplayLogic("four digit display");
tempx = sevenSegment('e');
output(tempx);
}
}
}
}
}
}
}