Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

[PIC] Simple calculator using PIC16F877A

Status
Not open for further replies.

vasanthkumar.M

Newbie level 3
Joined
Dec 23, 2015
Messages
4
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
41
>>Hi Friends i am new to this field,,,So kindly help me to solve this issue...
>>I Sucessfully to interfaced PIC16F877A with LCD and Keypad...
>>I want to do an simple calculator program using PIC16F877A....
>>After interfacing LCD and Keypad..i write an array to copy the value of key pressed in it...
>>But when i try update it in main prograsm it is not retriving..........anyone please help me to solve problem...
>>I have attache my code with this and help me....

Code:
#include<pic.h>
#include "lcd.h"
extern int i;
int i;
void add();
void sub(int,int);
void mul(int,int);
void div(float,float);
void main()
{
TRISC=0x0F;
PORTC=0x00;
init();
int a,q,k;
while(1)
{
cmd(0x01);
cmd(0x80);
display("PIC CALCULATOR");
delay2();
cmd(0xC0);
keypad1();

q=i+k;
data(q+0x30);
}
}
//void add()
//{
//int r,t,e;
//r=a[0]+a[1];
//t=r%10;
//r=r/10;
//e=r%10;
//cmd(0x01);
//cmd(0x80);
//display("Addition");
//cmd(0xC0);
//data(c+0x30);
//data(d+0x30);
//delay2();
//}
//void sub(int a,int b)
//{
//int c,d,e;
//c=a-b;
//d=c%10;
//c=c/10;
//e=c%10;
//cmd(0x01);
//cmd(0x80);
//display("subraction");
//cmd(0xC0);
//data(c+0x30);
//data(d+0x30);
//}
//void mul(int a,int b)
//{
//int c,d,e;
//c=a*b;
//d=c%10;
//c=c/10;
//e=c%10;
//cmd(0x01);
//cmd(0x80);
//display("multiplication");
//cmd(0xC0);
//data(c+0x30);
//data(d+0x30);
//}
//void div(float a,float b)
//{
//float c;
//int d,e,f,g,h;
//c=a/b;
//h=c*1000;
//d=h%10;
//h=h/10;
//e=h%10;
//h=h/10;
//f=h%10;
//h=h/10;
//g=h%10;
//cmd(0x01);
//cmd(0x80);
//display("Division");
//cmd(0xC0);
//data(g+0x30);
//data(f+0x30);
//data('.');
//data(e+0x30);
//data(d+0x30);
//}




#include<pic.h>
#include "lcd.h"
extern int i;
int i;
extern int a[4];
int a[4];
int q;
void keypad1()
{    
    TRISC=0xF0;
    PORTC=0x00;
    while(q<=1)
{
    PORTC=0x01;
    if(RC4==1)
    {
    data('7');
    i=7;
q++;
    delay2();
    }
    else if(RC5==1)
    {
    data('8');
i=8;
q++;
delay2();
    }
    else if(RC6==1)
    {
    data('9');
i=9;
q++;
delay2();
    }
    else if(RC7==1)
    {
    data('/');
i='/';
q++;
delay2();
    }
    else
    {
    }
PORTC=0x02;
    if(RC4==1)
    {
    data('4');
i=4;
q++;
delay2();
    }
    else if(RC5==1)
    {
    data('5');
i=5;
q++;
delay2();
    }
    else if(RC6==1)
    {
    data('6');
i=6;
q++;
delay2();
    }
    else if(RC7==1)
    {
    data('*');
i='*';
q++;
delay2();
    }
    else
    {
    }
PORTC=0x04;
    if(RC4==1)
    {
    data('1');
i=1;
q++;
delay2();
    }
    else if(RC5==1)
    {
    data('2');
i=2;
q++;
delay2();
    }
    else if(RC6==1)
    {
    data('3');
i=3;
q++;
delay2();
    }
    else if(RC7==1)
    {
    data('-');
i='-';
q++;
delay2();
    }
    else
    {
    }
PORTC=0x08;
    if(RC4==1)
    {
    data('N');
i='N';
q++;
delay2();
    }
    else if(RC5==1)
    {
    data('0');
i=0;
q++;
delay2();
    }
    else if(RC6==1)
    {
    data('=');
i='=';
q++;
delay2();
    }
    else if(RC7==1)
    {
    data('+');
i='+';
q++;
delay2();
    }
    else
    {
    }
}
}




#include<pic.h>
#include "lcd.h"
void init()
{
    TRISB=0x00;
    TRISE=0x00;
    PORTB=0x00;
    PORTE=0x00;
    ADCON1=0x02;
    cmd(0x01);//clear
    delay1();
//    cmd(0x02);// cursor return home
//    delay();
//    cmd(0x06);//Entry mode set
//    delay();
    cmd(0x0E);//display on,cursor on,cursor blinking off
    delay1();
    cmd(0x1C);//cursor or display shift
    delay1();
    cmd(0x38);//interface length,no of lines
    delay1();
//    while(1)
//    {
//        cmd(0x80);
//        display("Calculator");    
//    }
}
void cmd(unsigned char cd)
{
PORTE=0x04;
PORTB=cd;
delay1();
RE2=0;
}
void data(unsigned char dt)
{
PORTE=0x05;
PORTB=dt;
delay1();
RE2=0;
}
void display(const char *s)
{
while(*s)
data(*s++);
}
void delay1()
{
unsigned int q;
for(q=0;q<1000;q++)
{
}
}
void delay2()
{
unsigned int w;
for(w=0;w<30000;w++)
{
}
}





void cmd(unsigned char);
void data(unsigned char);
void display(const char *s);
void delay1();
void delay2();
void keypad1();
void init();
 
Last edited by a moderator:

Your program is very confusing, with included headers and global variables doubly declared, as well had not been properly indented.
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top