**Project 005: Simple Integer Calculator**

In this project, you will implement a simple integer calculator using C language. The calculator will have the following operators: addition, subtraction, multiplication, and division

**Circuit**

**Pin configurations**

Device | Port.Pin | Signal Type | Module | Direction | Drive Mode |
---|---|---|---|---|---|

You will use the following **typedef enum** to define the operators:

typedef enum CAL_OPS{ CAL_ADD, CAL_SUB, CAL_MUL, CAL_DIV, CAL_EQU, CAL_CLR } CAL_OPS;

You will also use a **struct** to define the variables of the calculator, as follows:

typedef struct CALULATOR{ int currValue; int result; CAL_OPS opCode; } CALCULATOR; CALCULATOR cal;

You will declare an instance of the calculator as follows

CALCULATOR cal;

You will implement the following functions to handle the calculator response:

**void Cal_Clear()**

This function will clear the calculator's current value (**cal.currValue**) and result (**cal.result**) to 0 and set the operator (**cal.opCode**) to addition (**CAL_ADD**). Then, it will display the result on the LCD screen.**void Cal_DigitIn(int din)**

This function will take an integer digit (**din**) ranging from 0 to 9 as input. It will add the digit to the current value (**cal.currValue**) and display it on the LCD screen.**void Cal.OperatorIn(CAL_OPS op)**- This function will take an operator code (
**op**) as input. If**op**is one of the arithmetic operators (**CAL_ADD**,**CAL_SUB**,**CAL_MUL**, or**CAL_DIV**), it performs the corresponding calculation using the current operator code (**cal.opCode**) and the current value (**cal.currValue**), and updates the result accordingly (**result = result opCode currValue**). Then, it resets the current value (**cal.currValue**) to 0 and sets the operator code (**cal.opCode**) to the new input operator code (**op**). Finally, it displays the result on the LCD screen.

For example, if the current value is**5**, the current operator code is**CAL_ADD**, and the input operator code is CAL_SUB, the function will perform the following calculation:**result = result + currValue = 0 + 5 = 5**. Then, it will reset the current value to 0 and set the operator code to**CAL_SUB**. The LCD screen will display the result**5**. - If the input operator code (
**op**) is the**equal**operator (**CAL_EQU**), the function will perform the calculation using the current operator code (**cal.opCode**), the current value (**cal.currValue**), and updates the result accordingly (**result = result opCode currValue**). After the calculation, it will reset the current value (**cal.currValue**) to 0 and set the operator code (**cal.opCode**) to**CAL_ADD**. Finally, it will display the result on the LCD screen. - If
**op**is the**clear**operator (**CAL_CLR**), the function calls the**Cal_Clear()**function to clear the calculator's values and display 0 on the LCD screen.

- This function will take an operator code (

After setting up the peripherals in your embedded code, call the **Cal_Clear()** function to initialize the calculator. In the infinite loop, read the keypad every** 20ms** using the **ReadKeypad()** function.

- If the
**ReadKeypad()**function returns a digit key ('**0**' to '**9**'), call the**Cal_DigitIn()**function with the corresponding digit as the input parameter. - If the
**ReadKeypad()**function returns the '**A**' key, call the**Cal_OperatorIn()**function with the**CAL_ADD**operator code as the input parameter. - If the
**ReadKeypad()**function returns the '**B**' key, call the**Cal_OperatorIn()**function with the**CAL_SUB**operator code as the input parameter. - If the
**ReadKeypad()**function returns the '**C**' key, call the**Cal_OperatorIn()**function with the**CAL_MUL**operator code as the input parameter. - If the
**ReadKeypad()**function returns the '**D**' key, call the**Cal_OperatorIn()**function with the**CAL_DIV**operator code as the input parameter. - If the
**ReadKeypad()**function returns the '*****' key, call the**Cal_OperatorIn()**function with the**CAL_CLR**operator code as the input parameter. - If the
**ReadKeypad()**function returns the '**#**' key, call the**Cal_OperatorIn()**function with the**CAL_EQU**operator code as the input parameter.

By implementing these functions, you will be able to create a simple integer calculator that can perform basic arithmetic operations. Good luck!