zoukankan      html  css  js  c++  java
  • 用51单片机实现的计算器

    去年刚学1个月左右写的,还很稚嫩,初学者理解下思路水水就行了
     
     
    #include<reg52.h>
    typedef unsigned int u16;  
    typedef unsigned char u8;
    #define  led  P1
    #define  juzhen  P0
    sbit u1=P2^3;
    sbit u2=P2^4;
    sbit u3=P2^5;
    sbit beer=P2^6;
    u16 code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

    long int we=0,qian=0,hou=0,ge=16,shi=16,bai=16,qian1=16,wan=16,shiwan=16,baiwan=16,qianwan=16,jia=0,jian=0,
        cheng=0,chu=0,qingling=0,dengyu=0;    
    void delay(u16 i)
     {
      while(i--)
      {
       
      } 
      }      
    void baibai()
     {
      we=0,qian=0,hou=0,ge=16,shi=16,bai=16,qian1=16,wan=16,shiwan=16,baiwan=16,qianwan=16,jia=0,jian=0,
        cheng=0,chu=0,qingling=0,dengyu=0;    
     }
      void sing()
    {      unsigned char a,b,c;
        for(c=18;c>0;c--) 
      {
            for(b=50;b>0;b--) 
         {
                for(a=33;a>0;a--)
           {
                   beer=~beer;
                  delay(200);
          } 
         }
      }
    }
    void  display ()
     { 
       int i;
       if(qingling==1)
      baibai();
       for(i=0;i<8;i++)
        { 
          led=0x00;
         switch(i)
        {
       case 0:u1=0;u2=0;u3=0;led=duan[qianwan];delay(100);break;
       case 1:u1=1;u2=0;u3=0;led=duan[baiwan];delay(100);break;
       case 2:u1=0;u2=1;u3=0;led=duan[shiwan];delay(100);break;
       case 3:u1=1;u2=1;u3=0;led=duan[wan];delay(100);break;
       case 4:u1=0;u2=0;u3=1;led=duan[qian1];delay(100);break;
       case 5:u1=1;u2=0;u3=1;led=duan[bai];delay(100);break;
       case 6:u1=0;u2=1;u3=1;led=duan[shi];delay(100);break;
       case 7:u1=1;u2=1;u3=1;led=duan[ge];delay(100);break;    
      }
       
       }
     }
     void input ()
     {
       long int gaibian=20;
       juzhen=0x0f;
       if(juzhen!=0x0f)
       delay(1000);
       if(juzhen!=0x0f)
       {
       switch(juzhen)
       {
        case 0x07:gaibian=0;break;
       case 0x0b:gaibian=1;break;
       case 0x0d:gaibian=2;break;
       case 0x0e:gaibian=3;break;  
       }
       }
         juzhen=0xf0;
       if(juzhen!=0xf0)
       delay(1000);
       if(juzhen!=0xf0)
       {
       switch(juzhen)
       {
        case 0x70:gaibian=gaibian+0;break;
       case 0xb0:gaibian=gaibian+4;break;
       case 0xd0:gaibian=gaibian+8;break;
       case 0xe0:gaibian=gaibian+12;break;  
       } 
       }
       juzhen=0xf0;
       while(1)
       {
         if (juzhen==0xf0)
        {
          break;
        }
      
       }
      
          
        if(gaibian!=20)
      {
       switch(gaibian)
       {
       case 10:qingling=1;break;
       case 11:dengyu=1;break;
       case 12:jia=1;break;
       case 13:jian=1;break;
       case 14:cheng=1;break;
       case 15:chu=1;break;
       default :we=we+1;break;  
       }  
      }
       if(gaibian<10)
       {
       switch(we)
       {
       case 0:ge=16;shi=16;bai=16;qian1=16;wan=16;shiwan=16;baiwan=16;qianwan=16;break;
       case 1:ge=gaibian;shi=16;bai=16;qian1=16;wan=16;shiwan=16;baiwan=16;qianwan=16;qian=qian+gaibian*1;break;
       case 2:shi=gaibian;bai=16;qian1=16;wan=16;shiwan=16;baiwan=16;qianwan=16;qian=qian+gaibian*10;break;
       case 3:bai=gaibian;qian1=16;wan=16;shiwan=16;baiwan=16;qianwan=16;qian=qian+gaibian*100;break;
       case 4:qian1=gaibian;wan=16;shiwan=16;baiwan=16;qianwan=16;qian=qian+gaibian*1000;break;
       case 5:wan=gaibian;shiwan=16;baiwan=16;qianwan=16;qian=qian+gaibian*10000;break;
       case 6:shiwan=gaibian;baiwan=16;qianwan=16;qian=qian+gaibian*100000;break;
       case 7:baiwan=gaibian;qianwan=16;qian=qian+gaibian*1000000;break;
       case 8:qianwan=gaibian;qian=qian+gaibian*10000000;break;  
       }
      }
     }
     void main()
     {
     
       long int pp;
      beer=0;
      while(1)
      {
       display();
     
      if(jia==0&&jian==0&&cheng==0&&chu==0)
      {
       input();
         
       
      }
      else
      {
        hou=qian;
        qian=0;
       we=0,ge=16,shi=16,bai=16,qian1=16,wan=16,shiwan=16,baiwan=16,qianwan=16,qian=0;
           while(dengyu==0)
       {   
       display();
       input();               
       }
       if(jia==1)
       {
               hou=hou+qian;
       }
       if(jian==1)
       {
       
            hou=hou-qian;
       
       }
       if(cheng==1)
       {
       
          hou=hou*qian ;
       
       }
       if(chu==1)
       {     
        if(qian==0)
          {
         hou=0;break;
           }
           hou=hou/qian;      
       } 
        we=0,ge=16,shi=16,bai=16,qian1=16,wan=16,shiwan=16,baiwan=16,qianwan=16;
         pp=hou ;
        while(pp!=0)
        {
          pp=pp/10;
          we=we+1;
        }
        if(we>8)
        {
         sing();
         we=0;
        }
        
        switch(we)
        {
        
          case 0:ge=0;shi=16;bai=16;qian1=16;wan=16;shiwan=16;baiwan=16;qianwan=16;break;
         case 1:ge=hou;shi=16;bai=16;qian1=16;wan=16;shiwan=16;baiwan=16;qianwan=16;break;
          case 2:ge=hou%10;shi=hou/10;bai=16;qian1=16;wan=16;shiwan=16;baiwan=16;qianwan=16;break;
         case 3:ge=hou%10;shi=hou/10%10;bai=hou/100;qian1=16;wan=16;shiwan=16;baiwan=16;qianwan=16;break;
         case 4:ge=hou%10;shi=hou%100/10;bai=hou/100%10;qian1=hou/1000;wan=16;shiwan=16;baiwan=16;qianwan=16;break;
         case 5:ge=hou%10;shi=hou/1000%10;bai=hou/100%10;qian1=hou/1000%10;wan=hou/10000;shiwan=16;baiwan=16;qianwan=16;break;
         case 6:ge=hou%10;shi=hou/10000%10;bai=hou/100%10;qian1=16;wan=hou/1000%10;shiwan=hou/100000;baiwan=16;qianwan=16;break;
         case 7:ge=hou%10;shi=hou/100000%10;bai=hou/100%10;qian1=16;wan=hou/1000%10;shiwan=hou/100000%10;baiwan=hou/1000000;qianwan=16;break;
         case 8:ge=hou%10;shi=hou/1000000%10;bai=hou/100%10;qian1=16;wan=hou/1000%10;shiwan=hou/100000%10;baiwan=hou/1000000%10;qianwan=hou/10000000;break;
        }
       while(1)
       {
        input();
         display();
       }  
      } 
      }
     }
  • 相关阅读:
    TASK1
    CSS再学
    Html再学
    Python的hasattr() getattr() setattr() 函数使用方法详解
    GET/POST/g和钩子函数(hook)
    cookie和session
    SQLAlchemy外键的使用
    jquery树形菜单插件treeView
    linux设置防火墙
    linux解压命令
  • 原文地址:https://www.cnblogs.com/a1113775906/p/12098747.html
Copyright © 2011-2022 走看看