基于51单片机可撤销溢出报警计算器

代码在keil软件中正常显示

#include"reg51.h"
#define GPIO_KEY P1
#define GPIO_DIG P0
typedef unsigned char u8;        
typedef unsigned int u16;

sbit LSA=P2^2;                                //74HC138¶ÎÑ¡
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit beep=P3^0;
sbit k=P3^1;

u16 KeyValue;                                 //´æ¼üÖµ      
u16 KeySwitch;                                //ÅжÏÊÇ·ñ°´Ï°´¼ü
u8 code duanxuan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x00}; //¶ÎÑ¡0-0xff
u16 i;
u16 box[8]={0,11,11,11,11,11,11,11};                                          //ÓÃÊý×é´æ·Åÿһλ¶ÎÑ¡µÃµ½µÄÊý×Ö

void delay(u16 i)                             //ÑÓʱ
{  
     while(i--);
}

void display()                                //ÏÔʾ³ÌÐò
{    
    
     LSA=0; LSB=0; LSC=0;        
       GPIO_DIG=duanxuan[box[7]];
       delay(50); GPIO_DIG=0x00;                //·ÀƵÉÁ
    
     LSA=1; LSB=0; LSC=0; 
       GPIO_DIG=duanxuan[box[6]];
       delay(50); GPIO_DIG=0x00;
    
     LSA=0; LSB=1; LSC=0;
     GPIO_DIG=duanxuan[box[5]];
       delay(50); GPIO_DIG=0x00; 
    
     LSA=1; LSB=1; LSC=0;
       GPIO_DIG=duanxuan[box[4]];
       delay(50); GPIO_DIG=0x00; 
    
     LSA=0; LSB=0; LSC=1; 
       GPIO_DIG=duanxuan[box[3]];
     delay(50); GPIO_DIG=0x00; 
    
     LSA=1; LSB=0; LSC=1; 
       GPIO_DIG=duanxuan[box[2]];
       delay(50); GPIO_DIG=0x00; 
         
     LSA=0; LSB=1; LSC=1; 
     GPIO_DIG=duanxuan[box[1]];
     delay(50); GPIO_DIG=0x00; 
         
     LSA=1; LSB=1; LSC=1; 
         GPIO_DIG=duanxuan[box[0]];
         delay(50); GPIO_DIG=0x00; 
         
}
void ring()                                                                        //¾¯±¨³ÌÐò
{
   while(1)
    {
      beep=~beep;
      delay(99);
        display();
    }
}

void Withdrew()                                //ÍËλ³ÌÐò
{
  if(k==0)
    {
        delay(1000); 
    if(k==0) 
    {
            for(i=0;i<8;i++)        //ÊäÈëÒ»¸öÊý£¬Êý×Ö¾ÍÓÒÒƶ¯Ò»Î»      
            {
                            box[i-1]=box[i];                
                        }                  
                   box[7]=0;
  
     while(!k);                     //¼ì²â°´¼üÊÇ·ñËÉ¿ª
    }
  }
}
void KeyDown()
{
    
    u16 a=0;
    GPIO_KEY=0x0f;
    if(GPIO_KEY!=0x0f)
    {
        delay(1000);
        if(GPIO_KEY!=0x0f)
        {   
           
            GPIO_KEY=0x0f;
            switch(GPIO_KEY)                    //¼üÅ̲¼¾Ö
            {
                case(0X07): KeyValue=7;break;
                case(0X0b): KeyValue=8;break;
                case(0X0d): KeyValue=9;break;
                case(0X0e): KeyValue=21;break;
            }
            
            GPIO_KEY=0xf0;
            switch(GPIO_KEY)
            {
                case(0X70): KeyValue=KeyValue;   break;
                case(0Xb0): KeyValue=KeyValue-3; break;
                case(0Xd0): KeyValue=KeyValue-6; break;
                case(0Xe0): KeyValue=KeyValue-9; break;
            }
       if(KeyValue==0 || KeyValue==1 || KeyValue==2 || KeyValue==3 || KeyValue==4 || KeyValue==5 || KeyValue==6 || KeyValue==7 || KeyValue==8 || KeyValue==9)
         {
          KeySwitch=1;
         }
            while((a<50)&&(GPIO_KEY!=0xf0)) //ËÉÊÖ¼à²â
            {
                delay(1000);
                a++;
            }
        }
    }
}

void main()
{  
   u16 a=0,b=0,c=0;
   beep=0;
   while(1)
   {     
         display();         
         KeyDown();
             Withdrew();         
         if(KeySwitch==1)  
         {                    

            for(i=7;i>0;i--)        //ÊäÈëÒ»¸öÊý£¬Êý×Ö¾ÍÏò×óÒƶ¯Ò»Î»      
            {box[i]=box[i-1];}             
            box[0]=KeyValue;                            
            KeySwitch=0;                                  
         }

         else  if(KeyValue==-2)       //¹éÁã¼ü
         { 
              for(i=0;i<8;i++)
                  box[i]=0;                
                  display(); 
         }

         else  if(KeyValue==21)       //¼Ó·¨
         {
             a=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000+box[5]*100000+box[6]*1000000+box[7]*10000000;   
             //¼ÆËãµÚÒ»¸öÊýµÄÖµ´æµ½aÀï
                       for(i=0;i<8;i++)
             box[i]=0;                                    //Çå¿ÕÖµ£¬×¼±¸È¡ÏÂÒ»¸öÊý
             while(1)                                  
             {
                     display();
                     KeyDown();                   
                     Withdrew();
                     if(KeySwitch==1)
                     {  
                        for(i=7;i>0;i--)
                        {box[i]=box[i-1];}
                        box[0]=KeyValue;
                        KeySwitch=0;
                     }                                         
                                         if(KeyValue==-1) break;                //°´µÈÓںźó½áÊøÑ­»·
              }
              b=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000+box[5]*100000+box[6]*1000000+box[7]*10000000;  
              //¼ÆËãµÚ¶þ¸öÊýµÄÖµ´æµ½b
                            c=a+b;
                     if(c>=10000)                                                        //³¬Öµ±¨¾¯
                                ring();
                         else
                                beep=0;        
             box[0]=c%10;                    
             box[1]=c/10%10;
             box[2]=c/100%10;
             box[3]=c/1000%10;
             box[4]=c/10000%10;
             box[5]=c/100000%10;
             box[6]=c/1000000%10;
             box[7]=c/10000000%10;
             display();
        }
 
         else  if(KeyValue==18)       //¼õ·¨  
         {
             a=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000+box[5]*100000+box[6]*1000000+box[7]*10000000;
             for(i=0;i<8;i++)
             box[i]=0;
             while(1)
             {                                    
                     display();
                     KeyDown();
                                   Withdrew();
                     if(KeySwitch==1)
                     {  
                        for(i=7;i>0;i--)
                        {box[i]=box[i-1];}
                        box[0]=KeyValue;
                        KeySwitch=0;
                     }
                                         if(KeyValue==-1) break;
             }                                                  
             b=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000+box[5]*100000+box[6]*1000000+box[7]*10000000;   //??b??
             c=a-b;
                     if(c>=10000)                                                        //³¬Öµ±¨¾¯
                               ring();
                         else
                               beep=0;                         
               box[0]=c%10;                 
               box[1]=c/10%10;
               box[2]=c/100%10;
               box[3]=c/1000%10;
               box[4]=c/10000%10;
               box[5]=c/100000%10;
               box[6]=c/1000000%10;
               box[7]=c/10000000%10;   
                   display();
        }
                 
         else  if(KeyValue==15)       //³Ë·¨  
         {
             a=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000+box[5]*100000+box[6]*1000000+box[7]*10000000;
             for(i=0;i<8;i++)
             box[i]=0; 
             while(1)
             {                                     
                     display();
                     KeyDown();
                     Withdrew();
                     if(KeySwitch==1)
                     {  
                        for(i=7;i>0;i--)
                        {box[i]=box[i-1];}
                        box[0]=KeyValue;
                        KeySwitch=0;
                     }
                                         if(KeyValue==-1) break;
             }
              b=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000+box[5]*100000+box[6]*1000000+box[7]*10000000;   
              c=a*b;
                     if(c>=10000)                                                        //³¬Öµ±¨¾¯
                                ring();
                         else
                                beep=0;                            
             box[0]=c%10;                 
             box[1]=c/10%10;
             box[2]=c/100%10;
             box[3]=c/1000%10;
             box[4]=c/10000%10;
             box[5]=c/100000%10;
             box[6]=c/1000000%10;
             box[7]=c/10000000%10;
             display();
         }
                 
                          
         else  if(KeyValue==12)       //³ý·¨
         {
             a=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000+box[5]*100000+box[6]*1000000+box[7]*10000000;
             for(i=0;i<8;i++)
             box[i]=0;
             while(1)                                
             {
                     display();
                     KeyDown();
                                   Withdrew();
                     if(KeySwitch==1)
                     {  
                        for(i=7;i>0;i--)
                        {box[i]=box[i-1];}
                        box[0]=KeyValue;
                        KeySwitch=0;
                     }
                                         if(KeyValue==-1) break;
              }
              b=box[0]+box[1]*10+box[2]*100+box[3]*1000+box[4]*10000+box[5]*100000+box[6]*1000000+box[7]*10000000; 
             c=a/b;
                      if(c>=10000)                                                        //³¬Öµ±¨¾¯
                                ring();
                          else
                                beep=0;                            
             box[0]=c%10;                  
             box[1]=c/10%10;
             box[2]=c/100%10;
             box[3]=c/1000%10;
             box[4]=c/10000%10;
             box[5]=c/100000%10;
             box[6]=c/1000000%10;
             box[7]=c/10000000%10;
             display();               
         }
                     
   }

}


       
                     
   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值