#include <mega32.h>
#include <alcd.h>
#include <stdio.h>
#include <delay.h>
int k=16;
float a,b,z;
int operator;
bit flag=0;
char c[16];
void keypad(void);
void main(void)
{
lcd_init(16);
DDRD=0x0F; PORTD=0x00;
while (1)
{
keypad();
delay_ms(2);
if(k>=0 && k<=15 && flag==0)
{
if(k>=0 && k<=9)
{
sprintf(c,"%d",k);lcd_puts(c);
if(operator==0){a=a*10+k;}else{b=b*10+k;}
}
if(k==10){lcd_putsf("/");operator=1;}
if(k==11){lcd_putsf("x");operator=2;}
if(k==12){lcd_putsf("-");operator=3;}
if(k==15){lcd_putsf("+");operator=4;}
if(k==14)
{
lcd_putsf("=");
if(operator==1)z=a/b;
if(operator==2)z=a*b;
if(operator==3)z=a-b;
if(operator==4)z=a+b;
sprintf(c,"%.2f",z);lcd_puts(c);
a=0;b=0;z=0;operator=0;
}
if(k==13){lcd_clear();}
flag=1;
}
if(flag==1 && k==16)flag=0;
}
}
void keypad(void)
{
k=16;
PORTD.0=1;
if(PIND.4==1)k=7;
if(PIND.5==1)k=8;
if(PIND.6==1)k=9;
if(PIND.7==1)k=10;
PORTD.0=0;
PORTD.1=1;
if(PIND.4==1)k=4;
if(PIND.5==1)k=5;
if(PIND.6==1)k=6;
if(PIND.7==1)k=11;
PORTD.1=0;
PORTD.2=1;
if(PIND.4==1)k=1;
if(PIND.5==1)k=2;
if(PIND.6==1)k=3;
if(PIND.7==1)k=12;
PORTD.2=0;
PORTD.3=1;
if(PIND.4==1)k=13;
if(PIND.5==1)k=0;
if(PIND.6==1)k=14;
if(PIND.7==1)k=15;
PORTD.3=0;
}