Younin123 2021-11-07 21:36 采纳率: 0%
浏览 110

keil单片机简易计算机有bug;求指点

第一次输入时会卡两次,除颤试过了,没用,除了第一次意外都能正常输入
还有输入1时会闪一下然后变成0;

下面是程序

#include <REGX52.h>  
#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)//延时函数
 {
     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))%1000)/100;//°Ùλ
        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);    
        }
}

  • 写回答

1条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 创建了问题 11月7日

      悬赏问题

      • ¥15 C语言,密切接触者追踪
      • ¥20 关于计算机网络问题,请附带讲解
      • ¥20 论文附带的代码如何运行?
      • ¥30 自动识别图像目标并判断
      • ¥30 BP神经网络遥感图像分类问题
      • ¥20 新闻小程序6万人在线
      • ¥15 Fluent轴流风扇模拟
      • ¥15 基于GPS的自行车定位系统设计
      • ¥15 idea中安装matplotlib模块完成,运行还是显示无安装
      • ¥15 robotframework 运行报错