关于51单片机的计算器程序设计

关于51单片机IAP58S4的计算器程序设计,我调试的程序一直有错。可以发一下有关于这个项目的程序例子吗?


# include <reg52.h>
# include <IAP58S4.h>

# define SegData P1 //显示单元段码缓冲寄存器
# define Control P2 //控制缓冲寄存器

unsigned int Flow;  //用于计算的变量

//计算器程序
void Calcu()
{
    unsigned char flag; //标志位
    unsigned char key;  //按键判断

    begin:flag = 0;
    Flow = 0;
    while(1)
    {
        key = Key_Scan();
        switch(key)
        {
            case '+': //用户按下“+”按键
                {
                    if(flag == 0)
                    {
                        flag = 1;
                    }
                    else if (flag == 1)
                    {
                        while(1)
                        {
                            key = Key_Scan();
                            if('=' == key)
                            {
                                //进行加法
                                Flow += Flow;
                                 ShowDot_Data(Flow); //显示结果
                                 //清零重新计算
                                 Flow = 0;
                                 goto begin;
                            }
                            else if('+' == key)
                            {
                                //进行加法
                                Flow += Flow;
                                goto filp;
                            }
                            else if('-' == key)
                            {
                                //进行减法
                                Flow -= Flow;
                                goto filp;
                            }
                            else
                            {
                                //输入数据
                                Flow = 10 * Flow + Digit_Scan(key);
                                ShowDot_Data(Flow); //显示结果
                            }
                        }
                    
                        filp:ShowDot_Data(Flow);    //显示结果
                        Flow = 0;
                        goto begin;
                    }
                    break;
                }
    
            case '-': //用户按下“-”按键
                {
                    if(flag == 0)
                    {
                        flag = 2;
                    }
                    else if(flag == 2)
                    {
                        while(1)
                        {
                            key = Key_Scan();
                            if('=' == key)
                            {
                                //进行减法
                                Flow -= Flow;
                                 ShowDot_Data(Flow); //显示结果
                                 //清零重新计算
                                 Flow = 0;
                                 goto begin;
                            }
                            else if('+' == key)
                            {
                                //进行加法
                                Flow += Flow;
                                goto filp;
                            }
                            else if('-' == key)
                            {
                                //进行减法
                                Flow -= Flow;
                                goto filp;
                            }
                            else
                            {
                                //输入数据
                                Flow = 10 * Flow + Digit_Scan(key);
                                ShowDot_Data(Flow); //显示结果
                            }
                        }
                    
                        filp:ShowDot_Data(Flow);    //显示结果
                        Flow = 0;
                        goto begin;
                    }
                    break;
                }
            case '=':
                {
                    //显示结果并使按键失效
                    ShowDot_Data(Flow); 
                    goto begin;
                    break;
                }
            default:
                {
                    //不为符号则进行数字输入累加
                    Flow = 10 * Flow + Digit_Scan(key);
                    ShowDot_Data(Flow); //显示结果
                    break;
                }
        }
    }
}

void main()
{
    Calcu();
}
    
//按键扫描程序
unsigned char Key_Scan()
{
    while(1)
    {
        if(P0 == 0xF0) continue; // 当按键没有按下时,P0等于0xF0
        
        delay(2); // 延时2毫秒,软件延时函数
        if(P0 == 0xF0) break;
        P2 = 0x0F; // 先取低四位 high-->low
            
        switch(P0)
        {
            case 0xF6:return '+'; // 按键的键值,自定义
            case 0xEE:return '-'; // 按键的键值,自定义
            case 0xDE:return '*'; // 按键的键值,自定义
            case 0xBE:return '/'; // 按键的键值,自定义
            case 0x7E:return '='; // 按键的键值,自定义
            case 0xF7:return '1';
            case 0xEF:return '2';