找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2524|回复: 0
打印 上一主题 下一主题
收起左侧

51计算器程序

[复制链接]
跳转到指定楼层
楼主
ID:212824 发表于 2017-6-20 09:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.H>
#define uchar unsigned char
#define uint unsigned int
#define duan P2//数码管显示段选定义
#define wei P2//数码管显示位选定义
#define key P1//键盘接口定义



sbit xwei=P3^5;
sbit xduan=P3^4;
unsigned              long
shu,shz,shuz,shuz1,shu1,i,shu2,shz3,shuz3,shz5,shuz5,shz4,shuz4,shz6,shuz6,xshu,shz7,shuz7;//进行运算的两个变量数
uchar num;////键盘扫描返回值
uchar flag1,fuhao,fhao ,flag2,flagf,flagl,flagLJ1,flagLJ2;//fuhao运符

unsigned char code Wela[]={0x20,0x10,0x08,0x04,0x02,0x01};//六位数码管的位选
unsigned char code Duan[]={0x3f,0x06,0x5b,// 0 1 2
    0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};// 3 4 5 6 7 8 9 无显示共阴极数码管

uchar keyscan();//键盘扫描函数

void weixz();
void duanxz();
void displayshu(unsigned long);
void delay(uint i)//延时函数
{
while(i--);
}
/***********************************************主函数************************************************/

void main()
{
     shu=100;
      xshu=0;
      shu1=0;
      shu2=0;
    flag1=0;
    flag2=0;
      flagf=0;
      flagl=0;
    while(1)
   {
////////////////////////////////////////////////
     shu=keyscan();


     if((shu<10)&&flag1==0&&flag2==0&&flagf==0&&flagLJ1==0)
     {
        shu1=shu;
        flag1=1;
        displayshu(shu1);
           flagLJ1=1;
           for (i=1;i<200;i++)
           {
            delay(500);
                }
           }
           else if((shu<10)&&flag1==1&&flag2==0&&flagf==0&&flagLJ1==1)
          {
             shu1=shu1*10;
             shu1=shu+shu1;
               flag1=1;
             displayshu(shu1);
              flagLJ1=1;
               }
//////////////////////////////////////////////////
if(shu==13&&flag1==1&&flagf==0)
           {
           fuhao=shu;
             wei=0xef;
           weixz();
           duan=Duan[0];
                duanxz();
             flagf=1;
            }
         if(shu==12&&flag1==1&&flagf==0)
           {
           fuhao=shu;
             wei=0xdf;
           weixz();
             duan=Duan[0];
           duanxz();
             flagf=1;
             }
////////////////////
if(shu==15&&flag1==1&&flagf==0)
      {
      fuhao=shu;
      wei=0xdf;
      weixz();
      duan=Duan[0];
        duanxz();
        flagf=1;
         }
/////////chu///////////////
if(shu==11&&flag1==1&&flagf==0)
{
fuhao=shu;
   wei=0xdf;
weixz();
duan=Duan[0];
duanxz();
flagf=1;
}
/////////////////////////////////////////////////


if((shu<10)&&flag1==1&&flagf==1&&flagLJ2==0)
    {
     shu2=shu;
     flag2=1;
       flagLJ2=1;
       displayshu(shu2);
      }
  else             if
((shu<10)&&flag1==1&&flag2==1&&flagf==1&&flagLJ2==1)
         {
         shu2=shu2*10;
           shu2=shu+shu2;
           flag2=1;
         displayshu(shu2);
         }
/////////////////////////////////////////////
          if(shu==10&&flag1==1&&flag2==1&&flagf==1)
   {
      switch(fuhao)
    {
      case13:shu1=shu2+shu1; break;
      case12:shu1=shu1-shu2; break;
      case15:shu1=shu1*shu2; break;
      case11:shu1=shu1/shu2; break;
   }

        shu2=0;
        flag1=1;
      flag2=0;
      flagf=0;
      flagLJ1=0;
      flagLJ2=0;

        displayshu(shu1);
      }

         if(shu==14)
       {
       shu1=0;
       shu2=0;
       flag1=0;
       flag2=0;
         flagf=0;
       flagLJ1=0;
     flagLJ2=0;
       displayshu(0);
             }
   }

         }

///////////////键盘扫描/////////////////

          uchar keyscan()

           {
           //////1
          key=0xfe;
            if(key!=0xfe)
         {
           delay(500);
            if(key!=0xfe)
            {
            switch(key)
                {
                case 0xee:num=7 break;
                case 0xde:num=8 break;
                case 0xbe:num=9 break;
                case 0x7e:num=13;break; //"/"
               }


                 return num;

                }
                  }                  

           ////// 1
        ////// 2
           key=0xfd;
        if(key!=0xfd)
         {
           delay(500);
           if(key!=0xfd)
           {
            switch(key)
               {
                 case 0xed:num=4 break;
                 case 0xdd:num=5 break;
                 case 0xbd:num=6 break;
                 case 0x7d:num=12;break; //*
                }


               return num

                       }
                  }

               //////2
            //////3
                  key=0xfb;
             if(key!=0xfb)
                {
              delay(500);
              if(key!=0xfb)
                  {
                 switch(key)
                 {
                  case 0xeb:num=1 break;
                  case 0xdb:num=2;break;
                  case 0xbb:num=3;break;
                  case 0x7b:num=11;break;
                  }

                     return num
                       }
                   }
              //////3
             //////4
              key=0xf7;
                 if(key!=0xf7)
               {
                 delay(500);
                   if(key!=0xf7)
                 {
                     switch(key)
                    {
                       case 0xe7:num=0;break;
                       case 0xd7:num=15;break;
                       case 0xb7:num=14;break;
                       case 0x77:num=10;break;
                      }
                        return num
                        }

                      }

                      for(i=1;i<30;i++)
                    {
                       delay(1600);        
                        }
                       }
    /////////////////////////////////////////////////////////////////
                    void weixz()
                    {
                       xwei=1;
                         delay(1);
                         xwei=0;
                     }
                    void duanxz()
                    {
                      xduan=1;
                        delay(1);
                      xduan=0;
                     }
                   void displayshu(shu)
                     { if(shu<10)
                           {
                               wei=0xfe;
                             weixz()
                             duan=Duan[shu];
                               duanxz();
                             delay(5000);
                              }
                         else if(shu>9&&shu<100)
                             {         
                                 for (i=1;i<100;i++ )        
                               {      
                                  wei=0xfe;      
                                  shuz=shu%10;      
                                  weixz();      
                                  duan=Duan[shuz];         
                                  duanxz();      
                                  delay(200);     

                                  shz=shu/10;     
                                  wei=0xfd;     
                                  shuz1=shz%10;     
                                  weixz()      
                                  duan=Duan[shuz1];        
                                  duanxz();        
                                  delay(200);      

                                  wei=0xff;        
                                    weixz();     
                                        }      
                                  }        
                         //////////////3wei/////         
                          else if(shu>99&&shu<1000)      
                               {         
                                  for (i=1;i<100;i++ )        
                                {      
                                   wei=0xfe;      
                                   shuz=shu%10;      
                                   weixz();      
                                   duan=Duan[shuz];         
                                   duanxz();      
                                   delay(100);     
                                   shz=shu/10;     
                                   wei=0xfd;     
                                   shuz1=shz%10;     
                                   weixz()      
                                   duan=Duan[shuz1];        
                                   duanxz();        
                                   delay(100);


                                   shz3=shu/100;     
                                   wei=0xfb;

                                   shuz3=shz3%10;  

                                   weixz();
                                 duan=Duan[shuz3];
                                 duanxz();
                                   delay(100);

                                    wei=0xff;
                                   weixz();
                                  }

                                  }
                         //////////////4////////////
                         else if(shu>999&&shu<10000)
                            {
                                  for(i=1;i<100;i++)
                             {
                                 wei=0xfe;
                                 shuz=shu%10;
                                 weixz();
                                 duan=Duan[shuz];
                                   duanxz();
                                 delay(120);

                                   shz=shu/10;
                                   wei=0xfd;
                                   shuz1=shz%10;
                                 weixz()
                                 duan=Duan[shuz1];
                                   duanxz();
                                 delay(120);

                                   shz3=shu/100;
                                   wei=0xfb;
                                 shuz3=shz3%10;
                                 weixz();
                                   duan=Duan[shuz3];
                                   duanxz();
                                 delay(120);

                                 shz4=shu/1000;
                                 wei=0xf7;
                                 shuz4=shz4%10;
                                   weixz();
                                 duan=Duan[shuz4];
                                 duanxz();
                                 delay(120);


                                    wei=0xff;
                                   weixz();

                                  }

                                }

                     ////////////5///////////////////////
                   else if(shu>9999&&shu<100000)
                         {
                          for(i=1;i<100;i++)
                         {
                                  wei=0xfe;
                                shuz=shu%10;
                                weixz();
                                duan=Duan[shuz];
                                duanxz();
                                delay(180);
                                  shz=shu/10;
                                  wei=0xfd;
                                  shuz1=shz%10;
                                  weixz()
                                duan=Duan[shuz1];
                               duanxz();
                                delay(180);

                                  shz3=shu/100;
                                  wei=0xfb;
                                shuz3=shz3%10;
                                weixz();
                                duan=Duan[shuz3];
                                  duanxz();
                                delay(180);

                                  shz4=shu/1000;
                                  wei=0xf7;
                                shuz4=shz4%10;
                                weixz();
                                  duan=Duan[shuz4];
                                  duanxz();
                                delay(180);

                                  shz5=shu/10000;
                                  wei=0xef;
                                  shuz5=shz5%10;
                                weixz();
                                  duan=Duan[shuz5];
                                  duanxz();
                                delay(180);

                                wei=0xff;
                                 weixz();

                                }

                              }

                     ////////////6///////////////////////
                     else if(shu>99999&&shu<1000000)
                       {
                             for(i=1;i<100;i++)
                           {
                               wei=0xfe;
                             shuz=shu%10;
                               weixz();
                             duan=Duan[shuz];
                             duanxz();
                             delay(180);

                             shz=shu/10;
                               wei=0xfd;
                             shuz1=shz%10;
                               weixz();
                               duan=Duan[shuz1];
                               duanxz();
                             delay(180);

                               shz3=shu/100;
                               wei=0xfb;
                             shuz3=shz3%10;
                             weixz();
                               duan=Duan[shuz3];
                             duanxz();
                             delay(180);

                               shz4=shu/1000;
                             wei=0xf7;
                             shuz4=shz4%10;
                             weixz();
                               duan=Duan[shuz4];
                               duanxz();
                             delay(180);
                               shz5=shu/10000;
                             wei=0xef;
                             shuz5=shz5%10;
                               weixz();
                             duan=Duan[shuz5];
                             duanxz();
                             delay(180);

                               shz6=shz5/10;
                             wei=0xdf;
                             shuz6=shz6%10;
                             weixz();
                             duan=Duan[shuz6];
                               duanxz();
                             delay(180);

                               wei=0xff;
                               weixz();


                                     }
                                  }
                                }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表