51单片机设计计算器

通过51单片机做一个计算机,结果只有矩阵按键1-9用于输入数字的生效,用于计算的按键不生效

#include"reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit LSA=P2^2;                  //38译码器
sbit LSB=P2^3;     
sbit LSC=P2^4;
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f};  //数码管
 #define anjian  P1  //矩阵按键
 u16 r,b,c;
void delay (u16 i)
{
    while(i--);
}

void DigDisplay()  //动态数码管显示
{
    u8 i;
    
        for(i=7;c>0;i--)
        {
            switch(i)
            {
                case(0):
                LSA=0;LSB=0;LSC=0;break;
                case(1):
                LSA=1;LSB=0;LSC=0;break;
                case(2):
                LSA=0;LSB=1;LSC=0;break;
                case(3):
                LSA=1;LSB=1;LSC=0;break;
                case(4):
                LSA=0;LSB=0;LSC=1;break;
                case(5):
                LSA=1;LSB=0;LSC=1;break;
                case(6):
                LSA=0;LSB=1;LSC=1;break;
                case(7):
                LSA=1;LSB=1;LSC=1;break;
            }
            P0=smgduan[c%10];
            c=c/10;
            delay(100);
            //P0=0x00;
        }
    
}
void keydown()  //矩阵按键
 {
     u8 a;
    anjian = 0xf0;
    if(anjian!=0xf0)
    {
        delay(100);
        if(anjian!=0xf0)
        {
            anjian=0xf0;
            switch(anjian)
            {
                case(0xe0):r=1;break;
                case(0xd0):r=2;break;
                case(0xb0):r=3;break;
                case(0x70):r=4;break;
            }
            anjian=0x0f;
            switch(anjian)
            {
                case(0x0e):r+=0;break;
                case(0x0d):r+=4;break;
                case(0x0b):r+=8;break;
                case(0x07):r+=12;break;
            }
            anjian=0xf0;
        }

    }
    while(a<50&&anjian!=0xf0)
    {
        delay(100);
        a++;
    }
 }
void operation()  //计算函数
{
    u8 t=0;
    if(r<10)
    {
        c=r;
        b=r;
    }
    if(r==13)
    {
        t=t+b;
    }
    if(r==14)
    {
        t-=b;
    }
    if(r==15)
    {
        t*=b;
    }
    if(r==16)
    {
        t/=b;
    }
    if(r==10)
        t=0;
    if(r==12)
        c=t;
}
void main()
{
    while(1)
    {
        keydown();
        DigDisplay();
        operation();
    }

用于计算的键,题主准备实现什么功能?
用if实现,如果条件设置的不合理,就不一定能成功运行了。