基于单片机的计算器设计程序

版权声明:原创作品,转载请注明来源及本文链接! https://blog.csdn.net/weixin_42625444/article/details/84337545
#include<reg51.h>
#define DIG P0
#define KEY P1sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
unsigned long int count=0,
sum=1;
int a[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned  char KeyDate;
unsigned char symbol;
void delay();   
void KeyDown();  
void DigDisplay();
void conversion();
void DigDisplayNumble();
void main(void)
{ 
while(1) 
{  KeyDown(); // 
conversion();//  
DigDisplay(); 
}    
}
void KeyDown()//
{ 
KEY=0x0f; 
if(KEY!=0x0f) 
{  
delay(); 
 if(KEY!=0x0f) 
 {    KEY=0X0F;  
       switch(KEY)   
        {   case(0X07): 
                KeyDate=1;
                break;
            case(0X0b): 
                KeyDate=2;
                break;    
            case(0X0d): 
                KeyDate=3;
                break;    
            case(0X0e): 
                KeyDate=4;
                break;   
        }     
       KEY=0XF0;   
        switch(KEY)   
        {   case(0X70): 
                KeyDate=KeyDate;
                break;    
            case(0Xb0): 
                KeyDate=KeyDate+4;
                break;    
            case(0Xd0): 
                KeyDate=KeyDate+8;
                break;    
            case(0Xe0): 
                KeyDate=KeyDate+12;
                break;   
        }   
       while(KEY!=0xf0) ;    
        delay();   
        conversion();//  
    } 
    }
}
void DigDisplay()
    { 
    unsigned int j,p=0;  
    for(j=0;j<8;j++) 
    {  switch(j)  
        {   case(0):    
                LSA=0;
                LSB=0;
                LSC=0;
                DIG=a[count%10]; 
                break;   
            case(1):    
                LSA=1;
                LSB=0;
                LSC=0;    
                if(count>=10)     
                    DIG=a[count%100/10];    
                else     
                    DIG=a[10];    
                break;   
            case(2):    
                LSA=0;
                LSB=1;
                LSC=0;    
                if(count>=100)     
                DIG=a[count%1000/100];    
                else     
                DIG=a[10];    
                break;   
            case(3):    
                LSA=1;
                LSB=1;
                LSC=0;    
                if(count>=1000)     
                DIG=a[count%10000/1000];    
                else     
                DIG=a[10];    
                break;   
            case(4):    
                LSA=0;
                LSB=0;
                LSC=1;    
                if(count>=10000)     
                DIG=a[count%100000/10000];    
                else     
                DIG=a[10];    
                break;   
            case(5):    
                LSA=1;
                LSB=0;
                LSC=1;    
                if(count>=100000)     
                DIG=a[count%1000000/100000];    
                else     
                DIG=a[10];    
                break;   
            case(6):    
                LSA=0;
                LSB=1;
                LSC=1;    
                if(count>=1000000)     
                DIG=a[count%10000000/1000000];    
                else     
                DIG=a[10];    
                break;   
            case(7):    
                LSA=1;
                LSB=1;
                LSC=1;    
                if(count>=10000000)     
                DIG=a[count%100000000/10000000];    
                else     
                DIG=a[10];    
                break;   
           }  
           p=10;        
           while(p--);    
           DIG=0x00; 
        }
    }
void conversion()
    { 
    unsigned keydate_count;   
    if(KeyDate%4!=0)  
        {   
        if(KeyDate!=15)//    
        {     
            switch(KeyDate)//     
            {       case 1:       
                    case 2:       
                    case 3:keydate_count=KeyDate;break;       
                    case 5:       
                    case 6:       
                    case 7:keydate_count=KeyDate-1;break;       
                    case 9:       
                    case 10:       
                    case 11: keydate_count=KeyDate-2;break;       
                    case 14 :keydate_count=0;break;               
                    default :break;           
            }     
            count=count*10+keydate_count;    
        }    
        else//    
        {     
            if(symbol=='+')      
                sum+=count;     
            if(symbol=='-')      
                sum-=count;     
            if(symbol=='*')      
                sum*=count;     
            if(symbol=='/')      
                sum/=count;     
            count=sum;    
        }  
        }  
        else  //  
        {    
            switch(KeyDate)//    
            {     
            case 4: symbol='+';break;     
            case 8: symbol='-';break;     
            case 12: symbol='*';break;     
            case 16: symbol='/';break;    
        }    
        sum=count;    
        count=0;   
        }  
    }
void delay()   
    { 
    unsigned char b,c;    
    for(c=200;c>0;c--)        
    for(b=200;b>0;b--);
}

扫描加入电子开发圈,海量云盘学习资料等你下载!

猜你喜欢

转载自blog.csdn.net/weixin_42625444/article/details/84337545