0% found this document useful (0 votes)
138 views

PIC16f877 Based Simple Calculator Project

This document describes a simple calculator project implemented on a PIC16F877 microcontroller using C code. The calculator allows input of two single-digit numbers and performs one of four basic math operations on them, displaying the result on an LCD. Key details include: it initializes the keypad and LCD inputs, gets the first number, function, second number, then calculates and displays the result. Errors are handled for invalid inputs. The full code is provided and explained.

Uploaded by

Bizuneh getu
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
138 views

PIC16f877 Based Simple Calculator Project

This document describes a simple calculator project implemented on a PIC16F877 microcontroller using C code. The calculator allows input of two single-digit numbers and performs one of four basic math operations on them, displaying the result on an LCD. Key details include: it initializes the keypad and LCD inputs, gets the first number, function, second number, then calculates and displays the result. Errors are handled for invalid inputs. The full code is provided and explained.

Uploaded by

Bizuneh getu
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 13

PIC16f877 based simple calculator

project
1 Features of this calculator
2 Main function code
3 Notes and References
4 Downloads
5 About The Author

This PIC microcontroller tutorial provides a simple calculator implementation for


PIC16F877 microcontroller. This is a simple one digit [1] calculator which implements only 4
functions addition(+), subtraction(-), multiplication(x) and division(/). The code for
PIC16F877 is written in C language using MPLAB with HI-TECH C compiler. You can
download this code from the ‘Downloads‘ section at the bottom of this page.

In this post, it is assumed that you know,


 How to interface keypad with PIC16F877 microcontroller. If you don’t then please
read this page.
 How to interface LCD with PIC16F877 microcontroller. If you don’t then please
read this page.
The following diagram (made in Proteus) shows the PIC microcontroller circuit diagram.

Figure 1. Circuit diagram for implementing calculator on PIC16F877

In the above figure, we can see that a result of “2+2=4” is shown on the screen. To achieve
this result, first press ‘2’ from the keypad. Then press ‘+’ and then press ‘2’ again. After that,
on pressing ‘=’ from the keypad the result ‘4’ is automatically displayed on the screen.

Features of this calculator

 You can give any single digit input from 0 to 9.


 You can press ‘ON/C‘ button at any time to reset the calculator.
 4 functions are implemented i-e addition, subtraction, multiplication and division.
 Error messages are displayed if wrong input is detected. For example, if calculator is
expecting a number, but a function key is pressed then ‘Wrong Input‘ message is
displayed. Similarly, ‘Wrong Function‘ message is displayed if wrong key is pressed
instead of a function key.
Main function code

The code for the main function is shown below.

/* Name : main.c

* Purpose : Main file for calculator code for PIC16F877.

* Date : 25-11-12

* * Revision : None

*/

#include "Includes.h"

// Configuration word for PIC16F877

__CONFIG( FOSC_HS & WDTE_OFF & PWRTE_ON & CP_OFF & BOREN_ON

& LVP_OFF & CPD_OFF & WRT_ON & DEBUG_OFF);


// Main function

void main(void)

char key; // Key char for keeping record of pressed key

int num1 = 0; // First number

char func = '+'; // Function to be performed among two numbers

int num2 = 0; // Second number

InitKeypad(); // Initialize Keypad

InitLCD(); // Initialize LCD

while(1)

//get numb1

key = GetKey();

ClearLCDScreen(); // Clear LCD screen


WriteDataToLCD(key); // Echo the key pressed to LCD

num1 = get_num(key); // Get int number from char value, it checks for wrong input as
well

if(num1!=Error) // If correct input then proceed, num1==Error means wrong input

//get function

key = GetKey();

WriteDataToLCD(key); //Echo the key pressed to LCD

func = get_func(key); //it checks for wrong func

if(func!='e') //if correct input then proceed, func=='e' means wrong


input

//get numb2

key = GetKey();

WriteDataToLCD(key); //Echo the key pressed to LCD


num2 = get_num(key); //Get int number from char value, it
checks for wrong input as well

if(num2!=Error) //if correct input then proceed, num2==Error


means wrong input

//get equal sign

key = GetKey();

WriteDataToLCD(key); //Echo the key pressed to LCD

if(key == '=') //if = is pressed then proceed

switch(func) //switch on function

case '+': disp_num(num1+num2); break;

case '-': disp_num(num1-num2); break;

case 'x': disp_num(num1*num2); break;


case '/': disp_num(num1/num2); break;

else //key other then =


here means error wrong input

if(key == 'C') //if clear screen is pressed then


clear screen and reset

ClearLCDScreen(); // Clear LCD screen

else

DispError(0); //Display wrong


input error

}
/*

* Functions used inside main for

* making calculator are shown below

*/

int get_num(char ch) //convert char into int

int num = 0;

switch(ch)

case '0': num = 0; break;

case '1': num = 1; break;

case '2': num = 2; break;

case '3': num = 3; break;


case '4': num = 4; break;

case '5': num = 5; break;

case '6': num = 6; break;

case '7': num = 7; break;

case '8': num = 8; break;

case '9': num = 9; break;

case 'C': ClearLCDScreen(); num = Error; break; //this is used as a clear screen
and then reset by setting error

default: DispError(0); num = Error; break; //it means wrong input

return num;

char get_func(char chf) //detects the errors in inputted function

if(chf=='C') //if clear screen then clear the LCD and reset
{

ClearLCDScreen(); //clear display

return 'e';

if( chf!='+' && chf!='-' && chf!='x' && chf!='/' ) //if input is not from allowed funtions
then show error

DispError(1);

return 'e';

return chf; //function is correct so return the correct function

void DispError(int numb) //displays differet error messages

{
ClearLCDScreen(); //clear display

switch(numb)

case 0: WriteStringToLCD("Wrong Input"); break;

case 1: WriteStringToLCD("Wrong Function"); break;

default: WriteStringToLCD("Wrong Input"); break;

void disp_num(int numb) //displays number on LCD

unsigned char UnitDigit = 0; //It will contain unit digit of numb

unsigned char TenthDigit = 0; //It will contain 10th position digit of numb

if(numb<0)
{

numb = -1*numb; // Make number positive

WriteDataToLCD('-'); // Display a negative sign on LCD

TenthDigit = (numb/10); // Findout Tenth Digit

if( TenthDigit != 0) // If it is zero, then don't display

WriteDataToLCD(TenthDigit+0x30); // Make Char of TenthDigit and then


display it on LCD

UnitDigit = numb - TenthDigit*10;

WriteDataToLCD(UnitDigit+0x30); // Make Char of UnitDigit and then display it on


LCD

In the main code, firstly keypad and LCD are initialized. Then the code waits for the first
number[1] from the keypad. After getting this number LCD screen is cleared. And this number
is displayed on the LCD. After that, code waits for the function key [2] from the user. After
getting the function key, code waits for the second number [1] and then the equal sign. After
getting the equal sign, according to the desired function the result is calculated and
displayed on the screen.

You can leave your comments in the comment section below.

Notes and References

[1]
You can give any single digit input from 0 to 9.
[2]
You can select any function i-e ‘+’ or ‘-‘ or ‘x’ or ‘/’.

You might also like