#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);
}
}
}
}
}
} 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);
}
}
}
}
}
}
}
mega:SCL
mega:SDA
mega:AREF
mega:GND.1
mega:13
mega:12
mega:11
mega:10
mega:9
mega:8
mega:7
mega:6
mega:5
mega:4
mega:3
mega:2
mega:1
mega:0
mega:14
mega:15
mega:16
mega:17
mega:18
mega:19
mega:20
mega:21
mega:5V.1
mega:5V.2
mega:22
mega:23
mega:24
mega:25
mega:26
mega:27
mega:28
mega:29
mega:30
mega:31
mega:32
mega:33
mega:34
mega:35
mega:36
mega:37
mega:38
mega:39
mega:40
mega:41
mega:42
mega:43
mega:44
mega:45
mega:46
mega:47
mega:48
mega:49
mega:50
mega:51
mega:52
mega:53
mega:GND.4
mega:GND.5
mega:IOREF
mega:RESET
mega:3.3V
mega:5V
mega:GND.2
mega:GND.3
mega:VIN
mega:A0
mega:A1
mega:A2
mega:A3
mega:A4
mega:A5
mega:A6
mega:A7
mega:A8
mega:A9
mega:A10
mega:A11
mega:A12
mega:A13
mega:A14
mega:A15
sevseg1:A
sevseg1:B
sevseg1:C
sevseg1:D
sevseg1:E
sevseg1:F
sevseg1:G
sevseg1:DP
sevseg1:DIG1
sevseg1:DIG2
sevseg1:DIG3
sevseg1:DIG4
sevseg1:COM
sevseg1:CLN
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4