求指点,单片机简易计算器有bug,查不出来

#include <REGX52.h>     //Í·Îļþ20206229lijifei
#define uint unsigned int //
#define uchar unsigned char 
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xFF};
uchar anjian[ ]={0x7f,0xbf,0xdf,0xef};//¼ì²â¾ØÕó°´¼ü
sbit w1=P2^0;
sbit w2=P2^1;
sbit w3=P2^2;
sbit w4=P2^3;
int result=0;//
int higher=0;//×î¸ßλ
int play;//Ï
uchar c,now=0,k,temp;
int i;
int ok;
///
void  delay(unsigned int z)//ddddd
 {
     unsigned int x,y;
     for(x=z;x>0;x--)
     for(y=125;y>0;y--);
 }
 ///
uint jiance()//°´¼ü¼ì²â³ÌÐò
{
        int k,a,b,f=0,g=0; 
        for(a=0;a<4;a++)
        {
                P1=anjian[a];
                temp=P1&0x0f;
                if(temp!=0x0f)
                {
                        switch(temp)
                        {
                                case 0x07:b=0;delay(25);break;
                                case 0x0b:b=1;delay(25);break;
                                case 0x0d:b=2;delay(25);break;
                                case 0x0e:b=3;delay(25);break;
                        }
                        break;                        
                }
                
        }
                            f++;
                            if(f==g)
                            {
                                    ok=1;
                            }
                            else
                            {
                                    ok=0;
                            }
                            g=f;
                            c=b+(a*4);
                            switch(c)
                                    {
                                            case 0:    k=1; break;
                                            case 1: k=2; break;
                                            case 2: k=3; break;
                                            case 3: k=11; break;//+
                                            case 4: k=4; break;                    
                                            case 5: k=5; break;
                                            case 6: k=6; break;            
                                            case 7: k=12; break;//-
                                            case 8: k=7; break;
                                            case 9: k=8; break;
                                            case 10: k=9; break;
                                            case 11: k=13; break;//*
                                            case 12: k=16; break;//Í˸ñ
                                            case 13: k=0; break;
                                            case 14: k=15; break;//=
                                            case 15: k=13; break;// /
                                    }    
                                    return(k);
}
void display(int number)//数码管显示
{
        int L1,L2,L3,L4;
        int l1,l2,l3,l4;
        L4=(number%10);//个位
        l4=L4;
    
        L3=((number-L4)%100)/10;//十位
        if(number<10)
        {
                l3=10;
        }
        if(number>=10)
        {
                l3=L3;
        }

        L2=((number-L4-(L3*10))%
        if(number<100)
        {
                l2=10;
        }
        
        if(number>=100)
        {
                l2=L2;
        }
        
        L1=((number-L4-(L3*10)-(L2*100))%10000)/1000;//ǧλ
        if(number<1000)
        {
                l1=10;
        }
        if(number>=1000)
        {
                l1=L1;
        }
        
        while(1)
        {
                P0=table[l1];
                w1=0;
                delay(1);
                w1=1;
                
                P0=table[l2];
                w2=0;
                delay(1);
                w2=1;
                
                P0=table[l3];
                w3=0;
                delay(1);
                w3=1;
                
                P0=table[l4];
                w4=0;
                delay(1);
                w4=1;
            
                jiance();
                
                if(ok==0)
                {
                     break;
                }
        }
}
void accum(int i)//ÀÛ¼Ó
{
        result=result*10+i;
        play=result;//Ö±½ÓÏÔʾ
        delay(20);
}
void addition()//¼Ó¼õ³Ë³ý
{        
        switch(now)
    {
        case 0: higher=result; result=0; break;//µÚÒ»´Î
        case 1: higher=higher+result; result=0; play=result; break;//¼Ó·¨
        case 2: higher=higher-result; result=0; play=result; break;//¼õ·¨
        case 3: higher=higher*result; result=0; play=result; break;//³Ë·¨
        case 4: higher=higher+result; result=0; play=result; break;//³ý·¨
    }
}
void back()//Í˸ñ
{
        result=result/10;
        play=result;
}
void is()//µÈÓÚ
{
        switch(now)
        {
            case 0: higher=result;result=0; break;//µÚÒ»´Î
            case 1: higher=higher+result; play=result; result=0; break;//¼Ó·¨
            case 2: higher=higher-result; play=result; result=0; break;//¼õ·¨
            case 3: higher=higher*result; play=result; result=0; break;//³Ë·¨
            case 4: higher=higher/result; play=result; result=0; break;//³ý·¨
        }
        now=0;
        display(higher);
        play=higher;
}
uint ererr()//±¨´í
{
        return(12);
}
void main()//¼ÆËãÖ÷º¯Êý
{
            int mo=1;
            while(1)
            {            
                        while(mo)
                        {
                                i=jiance();
                                if(ok==0)
                                {        
                                        delay(100);
                                        if(ok==0)
                                        {
                                                mo=0;
                                        }
                                }
                        }
                        mo=1;
                        switch(i)
                        {
                                case 0:accum(i); break;//累加
                                case 1:accum(i); break;//累加
                                case 2:accum(i); break;//累加
                                case 3:accum(i); break;//累加
                                case 4:accum(i); break;//累加
                                case 5:accum(i); break;///累加
                                case 6:accum(i); break;///累加
                                case 7:accum(i); break;//累加
                                case 8:accum(i); break;//累加
                                case 9:accum(i); break;//累加
                                case 11: addition(); now=1; break;//加法
                                case 12: addition(); now=2; break;//减法
                                case 13: addition(); now=3; break;//乘法
                                case 14: addition(); now=4; break;//除法¨
                                case 15: is(); break;//等于
                                case 16: back(); break;//退格                      
                                case 17: ererr(); break;//±¨´í
                        }
                        display(play);    
        }
}

救救孩子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值