51单片机实现0-9的加法

(4) 使用按键和数码管完成计算器设计,利用按键表示0~9键值以及加减乘除运算符号,将按键输入的数值在数码管上显示(操作按键时可以有声光提示),计算结束后,依然使用数码管显示(显示正负)。

半成品,只实现加法,为什么数码管显示不了结果?

#include "reg51.h"


```c



typedef unsigned char u8;
typedef unsigned int u16;

#define tube P0
#define key P1

u8 code guan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u16 save[5]={0};
u8 j;


void delay(u16 i)
{
    while(i--)
        ;
}


void keydown()
{
    u8 a=0;
    key=0x0f;//0000 1111
    if(key!=0x0f)
    {
        delay(1000);
        if(key!=0x0f)
        {
            switch(key)
            {
                case(0x07):j=0;break;
                case(0x0b):j=1;break;
                case(0x0d):j=2;break;
                case(0x0e):j=3;break;
            }
            key=0xf0;//1111 0000
            switch(key)
            {    
                case(0x70):j=j;break;
                case(0xb0):j=j+4;break;
                case(0xd0):j=j+8;break;
                case(0xe0):j=j+12;break;
            }
            
            while((a<50)&&(key!=0xf0))
            {
                delay(1000);
                a++;
            }
        }
    }
}


void play()
{
    if(save[1]==12)
    {
        u8 s;
        s=save[0]+save[2];
        tube=guan[s];
    }
}


void main()
{
    u8 i;
    while(1)
    {
        for(i=0;i<4;i++)
        {
            keydown();
            tube=guan[j];
            save[i]=j;
        }
        if(save[3]==11)
        {
            play();
        }
        
    }
}