#include "sevSeg.h"
#include "Keypad_2.h"
void setup() {
// put your setup code here, to run once:
volatile char *DDR_F, *DDR_K, *DDR_A, *PORT_F, *PORT_K, *PORT_A, *PIN_A;
unsigned volatile int k, l;
unsigned volatile char x, y, z, j, i,
add_flag = 0, sub_flag = 0, mul_flag = 0, div_flag = 0;
volatile char arr[5];
DDR_F = 0x30;
DDR_K = 0x107;
DDR_A = 0x21;
PORT_F = 0x31;
PORT_K = 0x108;
PORT_A = 0x22;
PIN_A = 0x20;
*DDR_F = 0xFF;
*DDR_K = 0x0F;
*DDR_A = 0x0F;
//*PORT_F = 0xFF;
// k = 0;
// while (1) {
// x = scanKeypad(PORT_A, PIN_A);
// dispQuadSevSeg(PORT_F, PORT_K, x);
// }
k = 0; z = 0;
while (1) {
x = scanKeypad(PORT_A, PIN_A);
delay(100);
if (x != 0xFF) {
delay(100);
if (x == 0x0A) { // +
add_flag = 1;
l = k; // memory of previous key pressed value
k = 0;
z = 0;
} else if (x == 0x0B) { // -
sub_flag = 1;
l = k; // memory of previous key pressed value
k = 0;
z = 0;
}
else if (x == 0x0C) { // *
mul_flag = 1;
l = k; // memory of previous key pressed value
k = 0;
z = 0;
}
else if (x == 0x0E) { // division
div_flag = 1;
l = k; // memory of previous key pressed value
k = 0;
z = 0;
} else if (x == 0x0D) { // =
if (add_flag)
k = l + k;
else if (sub_flag)
k = l - k;
else if (mul_flag)
k = l * k;
else if (div_flag)
k = l / k;
add_flag = 0; sub_flag = 0; mul_flag = 0; div_flag = 0;
// k = 0;
} else {
if (z < 5) { // no of digits
k = k * 10 + x;
z++;
}
if (z == 5) {
z = 0; k = 0;
}
}
}
dispQuadSevSeg(PORT_F, PORT_K, k);
}
}
void loop() {
// put your main code here, to run repeatedly:
}
/*
if (x < 10) {
PORT_K = 0x07;
dispSevSeg(PORT_F, x);
offSevSeg(PORT_F);
}
else if (x > 10 && x < 100) {
PORT_K = 0x07;
dispSevSeg(PORT_F, x % 10);
offSevSeg(PORT_F);
PORT_K = 0x0B;
dispSevSeg(PORT_F, x / 10);
offSevSeg(PORT_F);
}
else if (x > 100 && x < 1000) {
PORT_K = 0x07;
dispSevSeg(PORT_F, x % 10);
offSevSeg(PORT_F);
PORT_K = 0x0B;
dispSevSeg(PORT_F, (x / 10) % 10);
offSevSeg(PORT_F);
PORT_K = 0x0D;
dispSevSeg(PORT_F, x / 100);
offSevSeg(PORT_F);
} else if (x > 1000) {
PORT_K = 0x07;
dispSevSeg(PORT_F, x % 10); // right most digit
offSevSeg(PORT_F);
PORT_K = 0x0B;
dispSevSeg(PORT_F, ((x / 10) % 10));
offSevSeg(PORT_F);
PORT_K = 0x0D;
dispSevSeg(PORT_F, (x / 100) % 10);
offSevSeg(PORT_F);
PORT_K = 0x0E;
dispSevSeg(PORT_F, x / 1000); // left most digit
offSevSeg(PORT_F);
}
// while (1) {
// *PORT_K = 0x0E;
// dispSevSeg(PORT_F, 1);
// offSevSeg(PORT_F);
// *PORT_K = 0x0D;
// dispSevSeg(PORT_F, 2);
// offSevSeg(PORT_F);
// *PORT_K = 0x0B;
// dispSevSeg(PORT_F, 3);
// offSevSeg(PORT_F);
// *PORT_K = 0x07;
// dispSevSeg(PORT_F, 4);
// offSevSeg(PORT_F);
// }
// if ((x == 0x01) || (x == 0x02) || (x == 0x03) || (x == 0x0A) ||
// (x == 0x04) || (x == 0x05) || (x == 0x06) || (x == 0x0B) ||
// (x == 0x07) || (x == 0x08) || (x == 0x09) || (x == 0x0C) ||
// (x == 0x00) || (x == 0x0D) ) {
// break;
// }
//addition with 1 digit
k = 0; z = 0;
while (1) {
x = scanKeypad(PORT_A, PIN_A);
delay(50);
if (x != 0xFF) {
if (x == 0x0A) { // +
add_flag = 1;
i = k;
} else if (x == 0x0D) { // =
if (add_flag)
k = i + k;
add_flag = 0;
} else {
k = x;
}
}
dispQuadSevSeg_digit(PORT_F, PORT_K, 2, k);
}
//pressing and displaying 4 digit together
k = 0; z = 0;
while (1) {
x = scanKeypad(PORT_A, PIN_A);
delay(50);
if (z < 5) {
if ((x != 0xFF)) {
delay(150);
k = k * 10 + x;
z++;
}
// Serial.println(z);
// delay(50);
dispQuadSevSeg_digit(PORT_F, PORT_K, z, k);
}
if (z == 5) {
k = 0; z = 0;
dispQuadSevSeg_digit(PORT_F, PORT_K, 1, k);
}
}
// four digit addition
k = 0; z = 0;
while (1) {
x = scanKeypad(PORT_A, PIN_A);
delay(100);
if (x != 0xFF) {
delay(100);
if (x == 0x0A) { // +
add_flag = 1;
l = k; // memory of previous key pressed value
k = 0;
z = 0;
} else if (x == 0x0D) { // =
if (add_flag)
k = l + k;
add_flag = 0;
// k = 0;
} else {
if (z < 5) { // no of digits
k = k * 10 + x;
z++;
}
if (z == 5) {
z = 0; k = 0;
}
}
}
dispQuadSevSeg(PORT_F, PORT_K, k);
}
*/